;////////////////////////////////////////////////////////////////////
;// 汇编语言-字 符 矩 阵 //
;// CopyRight CCSoft 2005.10.3 --贝贝--QQ:1125591 //
;// //
;// 运行后输入一个大写字符,然后看输出结果吧! //
;// 注意:一定是大写字符,否则后果难料。程序中注释详尽,可以参照 //
;// 改动一下,使之可以适应各种输入。 //
;// //
;////////////////////////////////////////////////////////////////////
;///////////////////////macro define segment/////////////////////////
;output pstr
MOUTPUT MACRO PSTR
MOV DX,OFFSET PSTR
MOV AH,09H
INT 021H
ENDM
;if pa(pr)pb,goto pl
MLOOP MACRO PB,PA,PR,PL
MOV AL,PA
CMP AL,PB
J&PR PL
ENDM
;///////////////////////stack segment////////////////////////////////
STACKS SEGMENT STACK
DB 128 DUP(?)
STACKS ENDS
;///////////////////////data segment/////////////////////////////////
DATAS SEGMENT
N DB 0 ;这里用来注释循环的次数
CLINE DB 13,10,'$' ;改变串
OC DB ?,'$' ;输出字符
LD DB ? ;记录L1的循环次数
L1 DB ? ;LAY的第一次循环记录
L2A DB ? ;LAY的第二次循环记录
L2AD DB 0 ;记录L2AD的循环次数
BEIBEI DB 'Wrote in 2005 by BEIBEI',13,10,'$'
WANG DB ' QQ:1125591 ','$'
QI DB ' CopyQight','$'
CHAO DB ' Love HeSiYing Forever~~' ,13,10,'$'
L2B DB ?
L2C DB ?
DS1 DB 9,?,?,'$'
DATAS ENDS
;///////////////////////code segment/////////////////////////////////
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
;///////////////////////////////////
START PROC FAR
;初使化程序
MOV AX,DATAS
MOV DS,AX
;从输入中读取一个字符以便输出
MOUTPUT BEIBEI ;输出BEIBEI变量中的字符(不知道为什么这段任务完成不了)
MOUTPUT WANG
MOUTPUT QI
MOUTPUT CHAO
MOV AH,01H ;读取字符
INT 021H
SBB AL,41H ;读取字符的数目
MOV N,AL
MOV CL,2
IMUL CL
INC AL
MOV L1,AL ;l1=n*2+1
MOV LD,0 ;不循环
MOV AL,N
ADC AL,41H
MOV OC,AL ;set c n
CALL PINISET
;开始绘画
MOUTPUT CLINE ;改变输入输出的行
LU1: MLOOP L1,1,A,EL1 ;if l1<1 then goto el1(exit loop 1)
;// 汇编语言-字 符 矩 阵 //
;// CopyRight CCSoft 2005.10.3 --贝贝--QQ:1125591 //
;// //
;// 运行后输入一个大写字符,然后看输出结果吧! //
;// 注意:一定是大写字符,否则后果难料。程序中注释详尽,可以参照 //
;// 改动一下,使之可以适应各种输入。 //
;// //
;////////////////////////////////////////////////////////////////////
;///////////////////////macro define segment/////////////////////////
;output pstr
MOUTPUT MACRO PSTR
MOV DX,OFFSET PSTR
MOV AH,09H
INT 021H
ENDM
;if pa(pr)pb,goto pl
MLOOP MACRO PB,PA,PR,PL
MOV AL,PA
CMP AL,PB
J&PR PL
ENDM
;///////////////////////stack segment////////////////////////////////
STACKS SEGMENT STACK
DB 128 DUP(?)
STACKS ENDS
;///////////////////////data segment/////////////////////////////////
DATAS SEGMENT
N DB 0 ;这里用来注释循环的次数
CLINE DB 13,10,'$' ;改变串
OC DB ?,'$' ;输出字符
LD DB ? ;记录L1的循环次数
L1 DB ? ;LAY的第一次循环记录
L2A DB ? ;LAY的第二次循环记录
L2AD DB 0 ;记录L2AD的循环次数
BEIBEI DB 'Wrote in 2005 by BEIBEI',13,10,'$'
WANG DB ' QQ:1125591 ','$'
QI DB ' CopyQight','$'
CHAO DB ' Love HeSiYing Forever~~' ,13,10,'$'
L2B DB ?
L2C DB ?
DS1 DB 9,?,?,'$'
DATAS ENDS
;///////////////////////code segment/////////////////////////////////
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
;///////////////////////////////////
START PROC FAR
;初使化程序
MOV AX,DATAS
MOV DS,AX
;从输入中读取一个字符以便输出
MOUTPUT BEIBEI ;输出BEIBEI变量中的字符(不知道为什么这段任务完成不了)
MOUTPUT WANG
MOUTPUT QI
MOUTPUT CHAO
MOV AH,01H ;读取字符
INT 021H
SBB AL,41H ;读取字符的数目
MOV N,AL
MOV CL,2
IMUL CL
INC AL
MOV L1,AL ;l1=n*2+1
MOV LD,0 ;不循环
MOV AL,N
ADC AL,41H
MOV OC,AL ;set c n
CALL PINISET
;开始绘画
MOUTPUT CLINE ;改变输入输出的行
LU1: MLOOP L1,1,A,EL1 ;if l1<1 then goto el1(exit loop 1)