IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明)).pdf
《IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明)).pdf》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明)).pdf(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.第五章 5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答:程序段如下:BEGIN:MOV AH,1;从键盘输入一个字符的 DOS 调用 INT 21H CMP AL,a;输入字符z吗?JA STOP SUB AL,20H;转换为大写字母,用 AND AL,1101 1111B也可 MOV DL,AL;显示一个字符的 DOS 调用 MOV AH,2 INT 21H JMP BEGIN STOP:RET 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字
2、符,再按顺序显示这三个字符。答:程序段如下:BEGIN:MOV AH,1;从键盘输入一个字符的 DOS 调用 INT 21H CMP AL,a;输入字符z吗?欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.JA STOP DEC AL;得到前导字符 MOV DL,AL;准备显示三个字符 MOV CX,3 DISPLAY:MOV AH,2;显示一个字符的 DOS 调用 INT 21H INC DL LOOP DISPLAY STOP:RET 5.3 将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别放在AL、BL、CL
3、和 DL 中。答:程序段如下:DSEG SEGMENT STORE DB 4 DUP(?)DSEG ENDS BEGIN:MOV CL,4;右移四次 MOV CH,4;循环四次 LEA BX,STORE A10:MOV DX,AX AND DX,0FH;取 AX 的低四位 MOV BX,DL;低四位存入 STORE 中 INC BX SHR AX,CL;右移四次 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.DEC CH JNZ A10;循环四次完了码?B10:MOV DL,STORE;四组数分别放在 AL、BL、CL 和 DL 中 MOV C
4、L,STORE+1 MOV BL,STORE+2 MOV AL,STORE+3 STOP:RET 5.4 试编写一程序,要求比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同,若相同则显示MATCH,若不相同则显示NO MATCH。答:程序如下:DSEG SEGMENT STRING1 DB I am a student.STRING2 DB I am a student!YES DB MATCH,0DH,0AH,$NO DB NO MATCH,0DH,0AH,$DSEG ENDS;-CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS
5、:DSEG,ES:DSEG START:PUSH DS;设置返回 DOS SUB AX,AX PUSH AX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.MOV AX,DSEG MOV DS,AX;给 DS 赋值 MOV ES,AX;给 ES 赋值;BEGIN:LEA SI,STRING1;设置串比较指令的初值 LEA DI,STRING2 CLD MOV CX,STRING2-STRING1 REPE CMPSB;串比较 JNE DISPNO LEA DX,YES;显示 MATCH JMP DISPLAY DISPNO:LEA DX,NO;
6、显示 NO MATCH DISPLAY:MOV AH,9;显示一个字符串的 DOS 调用 INT 21H RET MAIN ENDP CSEG ENDS;以上定义代码段;-END START 5.5 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为 07)。答:程序段如下:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.BEGIN:MOV AH,1;从键盘输入一个字符的 DOS 调用 INT 21H SUB AL,0 JB STOP;输入字符9吗?JA STOP CBW MOV CX,AX;响铃次数 N JCXZ S
7、TOP BELL:MOV DL,07H;准备响铃 MOV AH,2;显示一个字符的 DOS 调用,实际为响铃 INT 21H CALL DELAY100ms;延时 100ms LOOP BELL STOP:RET 5.6 编写程序,将一个包含有 20 个数据的数组 M 分成两个数组:正数数组 P 和负数数组 N,并分别把这两个数组中数据的个数显示出来。答:程序如下:DSEG SEGMENT COUNT EQU 20 ARRAY DW 20 DUP(?);存放数组 COUNT1 DB 0;存放正数的个数 ARRAY1 DW 20 DUP(?);存放正数 COUNT2 DB 0;存放负数的个数 欢
8、迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.ARRAY2 DW 20 DUP(?);存放负数 ZHEN DB 0DH,0AH,The positive number is:,$;正数的个数是:FU DB 0DH,0AH,The negative number is:,$;负数的个数是:CRLF DB 0DH,0AH,$DSEG ENDS;-CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG START:PUSH DS;设置返回 DOS SUB AX,AX PUSH AX MOV AX,DSEG M
9、OV DS,AX;给 DS 赋值 BEGIN:MOV CX,COUNT LEA BX,ARRAY LEA SI,ARRAY1 LEA DI,ARRAY2 BEGIN1:MOV AX,BX CMP AX,0;是负数码?JS FUSHU MOV SI,AX;是正数,存入正数数组 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.INC COUNT1;正数个数+1 ADD SI,2 JMP SHORT NEXT FUSHU:MOV DI,AX;是负数,存入负数数组 INC COUNT2;负数个数+1 ADD DI,2 NEXT:ADD BX,2 LOOP
10、 BEGIN1 LEA DX,ZHEN;显示正数个数 MOV AL,COUNT1 CALL DISPLAY;调显示子程序 LEA DX,FU;显示负数个数 MOV AL,COUNT2 CALL DISPLAY;调显示子程序 RET MAIN ENDP;-DISPLAY PROC NEAR;显示子程序 MOV AH,9;显示一个字符串的 DOS 调用 INT 21H AAM;将(AL)中的二进制数转换为二个非压缩 BCD 码 ADD AH,0;变为 09 的 ASCII 码 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.MOV DL,AH MOV
11、 AH,2;显示一个字符的 DOS 调用 INT 21H ADD AL,0;变为 09 的 ASCII 码 MOV DL,AL MOV AH,2;显示一个字符的 DOS 调用 INT 21H LEA DX,CRLF;显示回车换行 MOV AH,9;显示一个字符串的 DOS 调用 INT 21H RET DISPLAY ENDP;显示子程序结束 CSEG ENDS;以上定义代码段;-END START 5.7 试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在 AX 中。答:程序段如下:BEGIN:MOV BX,0 MOV CX,100 COMPARE:MOV
12、 AX,DATABX;取数组的第一个偶数 ADD BX,2 TEST AX,01H;是偶数吗?欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.LOOPNZ COMPARE;不是,比较下一个数 JNZ STOP;没有偶数,退出 JCXZ STOP;最后一个数是偶数,即为最小偶数,退出 COMPARE1:MOV DX,DATABX;取数组的下一个偶数 ADD BX,2 TEST DX,01H;是偶数吗?JNZ NEXT;不是,比较下一个数 CMP AX,DX;(AX)(DX)吗?JLE NEXT MOV AX,DX;(AX)(DX),则置换(AX)为
13、最小偶数 NEXT:LOOP COMPARE1 STOP:RET 5.8 把 AX 中存放的 16 位二进制数 K 看作是 8 个二进制的“四分之一字节”。试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。答:程序段如下:BEGIN:MOV DL,0;计数初始值 MOV CX,8 COMPARE:TEST AX,03H;是数 03 吗?JNZ NOEQUAL;不是,转走 INC DL;是,计数 NOEQUAL:ROR AX,1;准备判断下一个数 ROR AX,1 LOOP COMPARE 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联
14、系删除!我们将竭诚为您提供优质的文档!.ADD DL,0;将计数值转换为 ASCII 码 MOV AH,2;进行显示 INT 21H STOP:RET 5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的 16 进制数,并在终端上显示与它等值的二进制数。答:程序段如下:BEGIN:MOV BX,0;用于存放四位的 16 进制数 MOV CH,4 MOV CL,4 INPUT:SHL BX,CL;将前面输入的数左移 4 位 MOV AH,1;从键盘取数 INT 21H CMP AL,30H;0 吗?JB INPUT;不是0F的数重新输入 CMP AL,39H;是09吗?JA AF;不是,转A
15、F的处理 AND AL,0FH;转换为:0000B1001B JMP BINARY AF:AND AL,1101 1111B;转换为大写字母 CMP AL,41H;又F 吗?JA INPUT;不是AF的数重新输入 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.AND AL,0FH;转换为:1010B1111B ADD AL,9 BINARY:OR BL,AL;将键盘输入的数进行组合 DEL CH JNZ INPUT DISPN:MOV CX,16;将 16 位二进制数一位位地转换成 ASCII 码显示 DISP:MOV DL,0 ROL BX,
16、1 RCL DL,1 OR DL,30H MOV AH,2;进行显示 INT 21H LOOP DISP STOP:RET 5.10 设有一段英文,其字符变量名为 ENG,并以$字符结束。试编写一程序,查对单词 SUN 在该文中的出现次数,并以格式“SUN:xxxx”显示出次数。答:程序如下:DSEG SEGMENT ENG DB Here is sun,sun,$DISP DB SUN:DAT DB 0000,0DH,0AH,$KEYWORD DB sun DSEG ENDS 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;-CSEG SEG
17、MENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG,ES:DSEG START:PUSH DS;设置返回 DOS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX;给 DS 赋值 MOV ES,AX;给 ES 赋值 BEGIN:MOV AX,0 MOV DX,DISP-ENG-2;计算 ENG 的长度(每次比较 sun,因此比较次数-2)LEA BX,ENG COMP:MOV DI,BX LEA SI,KEYWORD MOV CX,3 REPE CMPSB;串比较 JNZ NOMATCH INC AX;是,SUN 的个数加 1 AD
18、D BX,2 NOMATCH:INC BX;指向 ENG 的下一个字母 DEC DX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.JNZ COMP DONE:MOV CH,4;将次数转换为 16 进制数的 ASCII 码 MOV CL,4 LEA BX,DAT;转换结果存入 DAT 单元中 DONE1:ROL AX,CL MOV DX,AX AND DL,0FH;取一位 16 进制数 ADD DL,30H CMP DL,39H JLE STORE ADD DL,07H;是“AF”所以要加 7 STORE:MOV BX,DL;转换结果存入 DA
19、T 单元中 INC BX DEC CH JNZ DONE1 DISPLAY:LEA DX,DISP;显示字符串程序(将 DISP 和 DAT 一起显示)MOV AH,09H INT 21H RET MAIN ENDP CSEG ENDS;以上定义代码段;-欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.END START 5.11 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。答:程序段如下:DSEG SEGMENT BUFF DB 50 DUP()COUNT DW 0 DSEG ENDS BEGIN:LEA
20、 BX,BUFF MOV COUNT,0 INPUT:MOV AH,01;从键盘输入一个字符的功能调用 INT 21H MOV BX,AL INC BX CMP AL,$;是$结束符吗?JNZ INPUT;不是,继续输入 LEA BX,BUFF;对非数字字符进行计数 NEXT:MOV CL,BX INC BX CMP CL,$;是$结束符,则转去显示 JZ DISP CMP CL,30H;小于 0 是非数字字符 JB NEXT 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.CMP CL,39H;大于 9 是非数字字符 JA NEXT INC C
21、OUNT;个数+1 JMP NEXT DISP:;16 进制数显示程序段(省略)5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上 0。答:程序如下:DSEG SEGMENT MEM DW 100 DUP(?)DSEG ENDS;-CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG START:PUSH DS;设置返回 DOS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX;给 DS 赋值 BEGIN:MOV SI,(100-1)*2;(S
22、I)指向 MEM 的末元素的首地址 MOV BX,-2;地址指针的初值 MOV CX,100 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.COMP:ADD BX,2 CMP MEM BX,0 JZ CONS LOOP COMP JMP FINISH;比较完了,已无 0 则结束 CONS:MOV DI,BX CONS1:CMP DI,SI;到了最后单元码?JAE NOMOV MOV AX,MEM DI+2;后面的元素向前移位 MOV MEM DI,AX ADD DI,2 JMP CONS1 NOMOV:MOV WORD PTR SI,0;最后单
23、元补 0 LOOP COMP FINISH:RET MAIN ENDP CSEG ENDS;以上定义代码段;-END START 5.13 在 STRING 到 STRING+99 单元中存放着一个字符串,试编制一个程序测试该字符串中是否存在数字,如有则把 CL 的第 5 位置 1,否则将该位置 0。答:程序如下:DSEG SEGMENT 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.STRING DB 100 DUP(?)DSEG ENDS;-CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG
24、START:PUSH DS;设置返回 DOS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX;给 DS 赋值 BEGIN:MOV SI,0;(SI)作为地址指针的变化值 MOV CX,100 REPEAT:MOV AL,STRING SI CMP AL,30H JB GO_ON CMP AL,39H JA GO_ON OR CL,20H;存在数字把 CL 的第 5 位置 1 JMP EXIT GO_ON:INC SI LOOP REPEAT 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.AND CL,0DFH;不
25、存在数字把 CL 的第 5 位置 0 EXIT:RET MAIN ENDP CSEG ENDS;以上定义代码段;-END START 5.14 在首地址为 TABLE 的数组中按递增次序存放着 100H 个 16 位补码数,试编写一个程序把出现次数最多的数及其出现次数分别存放于 AX 和 CX 中。答:程序如下:DSEG SEGMENT TABLE DW 100H DUP(?);数组中的数据是按增序排列的 DATA DW?COUNT DW 0 DSEG ENDS;-CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG START:PUSH DS;设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IBM-PC汇编语言程序设计课后习题答案第二版 沈美明 IBM PC 汇编语言 程序设计 课后 习题 答案 第二 沈美明
限制150内