汇编语言小程序例子Word格式文档下载.docx
《汇编语言小程序例子Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编语言小程序例子Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
。
程序:
DATASEGMENT
R1DB'
MATCH'
0AH,0DH
R2DB'
NOMATCH'
STRING1DB'
XXXXX'
N1EQU$-STRING1
STRING2DB'
YYYYY'
N2EQU$-STRING2
DATAENDS
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVAX,N1
CMPAX,N2
JNZAA1
ADDAX,1
LEASI,STRING1
LEADI,STRING2
MOVBL,[SI]
MOVBH,[DI]
INCSI
INCDI
SUBAX,1
CMPBL,BH
JZAA2
JMPAA1
LEABX,R1
MOVCX,7
AA4:
MOVDL,[BX]
INCBX
MOVAH,2
LOOPAA4
JMPE
LEABX,R2
MOVCX,10
AA5:
LOOPAA5
E:
ENDSTART
3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.
由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。
由于数字'
0'
~'
9'
的ASCⅡ码为30H~39H,字母'
a'
~'
f'
与'
A'
F'
的ASCⅡ码为61H~66H与41H~46H,因此,如果输入的字母为数字'
,则其低4位即为对应的二进制位;
如果输入的字符为字母'
a'
f'
或'
A'
F'
,则需要减7,然后通过移位将低4位依次输出。
汇编程序如下:
MSG1 DB '
Hex:
'
'
$'
MSG2 DB 0DH, 0AH, '
Binary:
COUNTEQU4
BUFDB4DUP(?
)
MOVAX,DATA
MOVDS,AX
LEADX,MSG1
MOVAH,9
MOVCX,COUNT
MOVSI,0
INPUT:
;
通过四次循环从键盘读入四位十六进制数
MOVAH,1
MOVBUF[SI],AL
DECCX
CMPCX,0
JNZINPUT
NEXT3:
LEADX,MSG2
NEXT2:
MOVBL,BUF[SI]
CMPBL,'
9'
JBEOK;
读入的字符<=9 转向 OK:
SUBBL,7 ;
读入字符>
=9减7
OK:
PUSHCX
MOVCL,4
SHLBL,CL;
逻辑左移4位,低4位à
高4位
MOVCX,4;
4次循环将当前处理字符的4位二进制输出
NEXT1:
MOVDL,'
0'
SHLBL,1
JNCSKIP
INCDL
SKIP:
MOVAH,2
LOOPNEXT1
POPCX;
LOOPNEXT2;
4次循环将4位十六进制数,每位转换为对应的4位二进制
EXIT:
MOVAH,4CH
CODEENDS
4.设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NUM开始的内存中,大写字母送入BCHAR开始的内存区中,小写字母存入LCHAR开始的内存中,其他字符存入OTHER开始的内存区中。
STRINGDB'
abc123ABC'
'
NEQU$-STRING
NUMDBNDUP(?
BCHARDBNDUP(?
LCHARDBNDUP(?
OTHERDBNDUP(?
MOVAX,DATA
LEABX,STRING
DECBX
LEASP,BCHAR
LEACX,LCHAR
LEADX,OTHER
LEASI,NUM
INCBX
MOVAL,[BX]//判断是否为$,是否结束
CMPAL,'
JZAA5
CMPAL,30H//判定数字字符
JCAA4
CMPAL,39H
JAAA2
MOV[SI],AL
CMPAL,41H//判定大写字母
CMPAL,5AH
JAAA3
MOVDI,SP
MOV[DI],AL
INCSP
CMPAL,61H//判定小写字母
CMPAL,7AH
JAAA4
MOVDI,CX
INCCX
MOVDI,DX//判定其他
MOV[DI],AL
INCDX
MOVAH,4CH//返回DOS结束
5.试编写找出首地址为BUF数据块中的最小偶数(该数据块中有100个带符号字节数),并以十六进制的形式显示在CRT上的源程序。
答:
BUFDB100DUP(?
);
要比较的数
LEABX,BUF;
BUF首地址送BX
MOVCL,101;
循环控制
MOVDL,126;
DL存放最小偶数
MOVAH,0;
标志是不是有偶数
LOOP1:
DECCL;
循环计数减1
JZTOEND;
ZF标志0则跳转
MOVAL,[BX];
BX内存内容送AL
INCBX;
BX指向下一内存单元
SHRAL,1;
AL逻辑右移一位
JCLOOP1;
是基数则接着循环
SHLAL,1;
是偶数,因为上面右移了左移得到原数值
MOVAH,1;
能进行这一步则说明数值中有偶数
CMPAL,DL;
与CH比较大小
JGELOOP1;
AL大DL小则循环
MOVDL,AL;
保证DL存放最小偶数
JMPLOOP1;
CL不为0继续循环
TOEND:
CMPAH,1
JCL;
有借位则说明数值中无偶数直接返DOS
MOVBL,DL
SHRDL,1
SHRDL,1
ANDDL,0FH
CMPDL,10
JBL4
ADDDL,7
L4:
ADDDL,30H;
显示高四位对应的十六进制的ascii码
MOVDL,BL
JBL6
L6:
显示低四位对应的十六进制的ascii码
MOVDL,'
H'
;
显示H
L:
MOVAH,4CH;
返回DOS
6.已知数据块BUFA中存放15个互不相等的字节数据,BUFB中存放20个互不相等的字节数据,试编写将既在BUFA中出现,又在BUFB中出现的数据存放到BUFC开始的缓冲区中的源程序。
BUFADB41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH
BUFBDB31H,32H,33H,41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH
DB50H,51H,52H,53H,54H
BUFCDB15DUP(0)
LEASI,BUFA
LEABX,BUFC
MOVCX,15;
外层循环计数
MOVAH,20;
内层循环20次
MOVAL,[SI]
LEADI,BUFB
CMPAL,[DI]:
比较BUFA,BUFB内容
JNZAA3;
内容不同,跳至AA3
MOV[BX],AL;
内容相同,将其存入BUFC单元
JMPAA4;
找到相同内容,结束本次内层循环
DECAH;
内层循环计数减一
JNZAA2;
内层循环结束
LOOPAA1;
外层循环结束
此行以下将BUFC中的内容输出
BB1:
LOOPBB1
7.试编写由键盘输入一个以回车作为结束的字符串,将其按ASCII码由大到小的顺序输入到CRT上的源程序。
DATASEGMENT;
数据段
BUFDB200DUP(?
DATAENDS
CODESEGMENT;
代码段
ASSUMECS:
CODE,DS:
START:
MOV