《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社).pdf

上传人:赵** 文档编号:69173579 上传时间:2022-12-31 格式:PDF 页数:41 大小:867.12KB
返回 下载 相关 举报
《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社).pdf_第1页
第1页 / 共41页
《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社).pdf_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社).pdf》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社).pdf(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 1 of 41 1 汇编语言程序设计(第二版)第二章 1、答:直接由指令指定的 I/O 端口数为 256 个。2、答:3、答:字节单元:(30022H)=AB H,(30024H)=EF H 字单元:(30021H)=AB34 H,(30022H)=CDAB H。4、答:3017:000A 的存储单元的物理地址是 3017AH,3015:002A 的存储单元的物理地址是 3017AH,3010:007A 的存储单元的物理地址是 3017AH。5、答:该程序的第一个字的物理地址是 0AAA40

2、H。6、答:条件标志 OF、SF、ZF、CF 的值依次分别为 0、0、0、0。7、答:(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、SP、BP、DI、SI(注意:学生尽量不要用 SP 参与加减运算)(2)CX (3)DX、AX、AH、AL (4)CS、DS、ES、SS (5)FLAGS (6)IP (7)SS、SP、BP 8、答:可以用来指示存储器地址的寄存器有 BX、SP、BP、DI、SI、IP、CS、DS、ES、SS。9、答:唯一正确的是 D。第三章 1。.(1)立即寻址 没有 (2)直接寻址 7237H(3)使用 BX 的寄存器寻址 没有 (4)使用 BX

3、 的间接寻址 637DH(5)使用 BX 的寄存器相对寻址 0D5F0H(6)基址变址寻址 8E18H(7)相对基址变址 004FH 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 2 of 41 2 2。根据下列要求,写出相应的汇编指令。(1)ADD DX,BX (2)ADD AL,BXSI (3)ADD BX0B2H,CX (4)MOV AX,2A59H ADD 0524H,AX(5)ADD AL,0B5H 3。(1)寄存器间接寻址 MOV BX,OFFSET BLOCK0AH MOV DX ,BX(2)寄存器相对寻址 MOV SI,

4、OAH MOV DX,BLOCKSI (3)基址变址寻址 MOV BX,BLOCK MOV SI,OAH MOV DX,BXSI 4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。(1)MOV AX,1200H 1200H (2)MOV AX,BX 0100H (3)MOV AX,1200 4C2AH 注意,是字单元!(4)MOV A

5、X,BX 3412H 同上(5)MOV 1100BX 4C2AH (6)MOV AX,BXSI 7856H (7)MOV AX,1100BXSI 65B7H 5。(1)7CD9H (2)1200H (3)6319H 6。MOV BX,2000H LES DI,BX MOV AX,ES:DI 7。转向地址 OBJ 的值分别为:(1)064DH (2)0691H (3)05E0H 注意有符号数的符号位 8。(1)MOV AX,0ABH 立即数寻址 无物理地址 (2)MOV AX,BX 寄存器寻址 同上 (3)MOV AX,100 直接寻址 20100H (4)MOV AX,VAL 直接寻址 200

6、50H (5)MOV AX,BX 寄存器间接寻址 20100H (6)MOV AX,ES:BX 直接寻址 21100H (7)MOV AX,BP 寄存器间接寻址 20010H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 3 of 41 3 (8)MOV AX,SI 同上 200A0H (9)MOV AX,BX+10 寄存器相对寻址 20110H (10)MOV AX,VALBX 同上 20150H (11)MOV AX,BXSI 基址变址寻址 201A0H (12)MOV AX,VALBXSI 相对基相变址寻址 201F0H 9。的指

7、令:MOV AX,BX0CH MOV ZREO,AX (2)的指令:MOV AX,ARRAYBX MOV ZREO,AX 10。MOV AX,TABLE 是把符号地址 TABLE 里的内容送到 AX 里,指令执行完后,(AX)=1234H LEA AX,TABLE 是把符号地址 TABLE 的有效地址(这里是偏移量)送到指定寄存器 AX 里,指令执行完后,(AX)=0032H 11。执行完指令后,(AX)=1E00H 12。LEA AX,CSTRING MOV DL,AX MOV DH,AX+6 13。这个,图,很麻烦了,所以就不画了大家可以看一下课本上 P51-P53,很清楚,看完了这道韪也

8、会了 14。LES BX,2000 MOV AX,ES:BX 注意:一开始我写的是:MOV AX,ES:8000H,后来看到题目里要求写两条指令,所以一条就不行了,就要画蛇添足 15。运算结果:SF,ZF,CF,OF 各位的值(从左至右依次往下)(1)74D4H 0 0 0 0 (2)A5C1H 1 0 0 1 (3)4240 H 0 0 1 0 (4)0000 H 0 1 1 0 16。接上表 (1)5D14 0 0 0 0(2)A870 1 0 0 1(3)D870 1 0 0 0(4)34E4 0 0 1 0 17。(1).MOV AX,Z ;把 Z 送到 AX SUB AX,X ;Z-

9、X ADD AX,W ;W+(Z-X)MOV Z,AX ;结果保存在 Z 中(2).MOV AX,R ;R 送到 AX 中 ADD AX,9 ;R+9 MOV BX,X ;X 送到 BX 中 ADD BX,6 ;X+6 ADD AX,BX ;(R+9)+(X+6),结果保存在 AX 中 MOV BX,W ;W 送到 BX 中 SUB BX,AX ;W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 4 of 41 4 MOV Z,BX ;最终结果送到 Z 中(3)MOV AX

10、,W ;把 W 送到 AX IMUL X ;W*X 注意:低十六位保存在 AX 里,高十六位保存在 DX 里 MOV BX,Y ;把 Y 送到 BX 里 ADD BX,6 ;Y+6 IDIV BX ;(W*X)/(Y+6)注意:商保存在 AX 里,余数保存在 DX 里 MOV Z,AX ;把商送到 Z 中,MOV R,DX ;把余数 送到 R 中(4)MOV AX,W ;把 W 送到 AX 中 SUB AX,X ;W-X CWD ;把 AX 中的十六位带符号数扩展成为 32 位,低十六位保存在 AX 中,高十六位保;在 DX 中 MOV BX,5 ;把 5 送到 BX 中 IDIV BX ;(

11、W-X)/5 被除数为 32 位,除数为 16 位 商为 16 位 IMUL Y ;上一步结果再乖以 Y,积为 32 位 MOV BX,2 ;把 2 送到 BX 中 IMUL BX ;上一步乘法所得的积再乘以 2,各为 64 位 MOV Z,EAX ;把结果中低 32 位放入 Z 双字单元中 MOV Z+4,EDX ;把结果中高 32 位放入 Z+4 双字单元中 18。指令 本条指令执行完后 AX 的内容执行完后 CF,SF,ZF 的值 MOV AX,1234H 1234H 0 0 0 MOV CL,4 1234H 0 0 0 ROL AX,CL 2341H 1 0 0 DEC AX 2340

12、H 1 0 0 MOV CX,4 2340H 1 0 0 MUL CX 8918H 0 0 0 INT 20H 程序结束后,(AX)=8918H (DX)=0000H 19。指令执行完后 AX 的内容 执行完后 CF,SF,ZF 和 OF 的值 MOV AX,0 0 0010 DEC AX FFFFH 0100 ADD AX,7FFFH 7FFEH 0000 ADD AX,2 8000H 0101 NOT AX 7FFFH 0101 SUB AX,0FFFFH 8000H 1101 ADD AX,8000H 0000H 1011 SUB AX,1 FFFFH 1101 AND AX,58D1H

13、 58D1H 0000 SAL AX,1 B1A2H 0101 SAR AX,1 D8D1H 0100 NEG AX 272FH 1000 ROR AX,1 9397H 1001 20。(1)MOV AX,DA TAX ADD DA TAY,AX(2)MOV AX,DA TAX ADD DA TAY,AX MOV AX,DA TAX+2 ADD DA TAY+2,AX 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 6 of 41 6 LEA D

14、I,PRLINE ;把 PRLINE 中第一个字节 的偏移地址送到 DI 中 MOV CX,20 ;把重复次数放到 CX 里 CLD ;让 SI DI 从低地址指向高地址(即从左到右传送)REP MOVSB ;传送(2)从右到左把 CONMAE 中的字符串传送到 PRLINE 中的程序实现:LEA SI,CONAME LEA DI,PRLINE MOV CX,20 STD ;和上面唯一不同的就是这次是从右到左,所以要从高地址批向低地址 REP MOVSB(3)把 CONAME 中的第三和第四个字节装入 AX 的程序实现:LEA SI,CONAME+3 LODSW (4)把 AX 寄存器的内容存

15、入从 PRLINE+5 开始的字节中的程序实现:LEA DI,PRLINE+5 STOSW(5)检查 CONAME 字符串中有无空格字符,如有把它伟送给 BH 寄存器的程序实现:LEA DI,CONAME ;把 CONAME 中第一个字符偏移地址放入 DI 中 MOV CX,20 ;把重复次数放到 CX 中 MOV AL,20H ;把空格符的 ASCII 值放入 AL 中 CLD ;从低到高 REPNE SCASB ;比较 MOV BH,DI-1R ;把检查到的空格符送到 BH 中 30。MOV CX,12H ;把重复次数放到 CX 中。这里用十六进制表示 MOV SI,0 ;初始化 SI M

16、OV AX,26H ;把&字符的 ASCII 值放入 AX CHECK:CMP AX,STRINGSI ;依次查找 INC SI LOOPNE CHECK ;找到了就退出 MOV AX,20H ;把空格符的 ASCII 值勤放入 AX 中 MOV STRINGSI-1,AX ;用空格符代替&31。(1)用空格符清除 PRINT_LINE 域的程序实现:MOV AL,20H LEA DI,PRINT_LINE MOV CX,132 CLD REP STOSB(2)在 STUDENT_ADDR 中查找 第一个_ 的程序实现:MOV AX,2DH ;把“”的 ASCII 值放入 AX MOV SI,

17、0 ;初始化 SI MOV CX,9 ;把重复次数放入 CX 中;依次检查 STUDENT-ADDR 中的字符是否为_,找到第一个停下来 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 7 of 41 7 CHECK:CMP AX,STUDENT_ADDRSI ;INC SI LOOPNZ CHECK (3)在 STUDENT_ADDR 中查找最后一个”_“的程序实现:;和第二题不同的就是这次是从右到左查询,所以 SI 的初始化为 9 MOV AX,2DH MOV SI,9 MOV CX,9 CHECK:CMP AX,STUDENT_AD

18、DRSI DEC SI LOOPNZ CHECK(4)程序实现:MOV AL,2OH ;把空格符的 ASCII 值放入 AL 中 LEA DI,STUDENT_NAME ;把 STUDENT_NAME 中第一个字符偏移地址放到 DI中 MOV CX,30 ;把重复次数放到 CX 中 CLD ;让 DI 从低位移到高位 REPZ SCASB ;如果有不是空格符的,就退出 JZ STORE ;如果全是空格符,就转到 STORE 中;用*代替空格 STORE:MOV AL 2AH MOV CX,30 STD ;注意,这里是把前面从低到高移动的 DI 再从高到低移上去 REP STOSB(5)程序实现

19、:;把 STUDENT_NAME 移到 PRINT_LINE 的前 30 个字节中 LEA SI,STUDENT_NAME LEA DI,PRINT_LINE MOV CX,30 CLD REP MOVSB;把 STUDENT_ADDR 移到 PRINT_LINE 的后 9 个字节中 LEA SI,STUDENT_ADDR+9 LEA DI,PRINT_LINE+132 MOV CX,9 STD REP MOVSB 32。程序实现:。LEA SI,OLDS LEA DI,NEWS MOV CX,5 REPZ CMPSB JNZ NEW_LESS 欢迎您阅读并下载本文档,本文档来源于互联网,如有

20、侵权请联系删除!我们将竭诚为您提供优质的文档!Page 8 of 41 8 。33。(1)CMP DX,CX JA EXCEED(2)CMP BX,AX JG EXCEED (3)CMP CX,0 JZ ZERO(4)CMP BX,AX JO OVERFLOW(5)CMP BX,AX JLE EQ_SMA(6)CMP DX,CX JBE EQ_CX 34。(1)跳转到:L1 (2)跳转到 L1 (3)跳转到 L2 (4)跳转到 L5 (5)跳转到 L5 35。(1)可以引起转移到 L1 的指令有:NB ,BE,NL,LE(2)可以引起转移到 L1 的指令有:同上(3)可以引起转移到 L1 的指

21、令有:B,BE,L,LE (4)可以引起转移到 L1 的指令有:NB ,NBE,NL,NLE (5)可以引起转移到 L1 的指令有:同上(6)可以引起转移 到 L1 的指令有:同(3)(7)可以引起转移 到 L1 的指令有:同上 36。37。程序流程图就不画了,呵呵,程序如下 MOV AL,STAUSSI ;把要测试的字节放到 AL 中 AND AL,2AH ;把第一,三,五位为一其他位为 0 的数-2AH,与这个字节比较,结果 ;放到 AL 中 JZ ROUTINE_4 ;如果结果为 0,则三位都为 0 XOR AL,2AH ;前面相与的结果再与 2AH 异或 JZ ROUTINE_1 ;如

22、果结果为 0,则三位都为 1 BSF BL,AL ;BSR BL,AL CMP BL,CL;如果向前和向后测试后,第一个 1 的位置相同,说明只有一个 1,则异或运算前有 AL 中有两个 1 JE ROUTINE_2 ROUTINE_1 注:本题还有其他解法,请大家自己试试 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 9 of 41 9 38。(1)当括号内是:LOOP 时,循环四次,程序结束后(AX)=05 (BX)=16 (CX)=0(DX)=0(2)当括号内是:LOOPE 时,不循环,程序结束后(AX)=02(BX)=04(CX

23、)=03(DX)=02(3)当括号内是:LOOPNE 时:循环三次,程序结束后(AX)=04(BX)=11(CX)=01(DX)=0 IBM-PC 汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美明,温冬蝉著)第三章答案 39-52 39。图,就不画了,呵呵自己看一下课本,P101 40.。(1)0000 3100H (2)5100H (3)7100H 41。(1)目的地址:2004H 内容依次为:56H F4H 23H 98H (2)目的地址:384CH 内容依次为:91H 34H F2H 01H (3)目的地址:寄存器,无物理地址 内容依次为:92H 6DH A2H 4CH

24、42。(1)PUSH AX (SP)-(SP)-2 (SP+1)-(AH)(SP)-(AL)(2)POP ESI (ESI)-(ESP)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)-(ESP)+4(3)PUSH BX (SP)-(SP)-2 (SP+1)-(BX+1)(SP)-(BX)(4)PUSHAD (ESP)-(EAX)(ESP-4)-(ECX)(ESP-8)-(EDX)(ESP-12)-(EBX)(ESP-16)-(ESP);这里指的是指令执行前的 ESP (ESP-20)-(EBP)(ESP-24)-(ESI)(ESP-28)-(EDI)(ESP)-(ESP)-32(5

25、)POP DS(DS)-(SP)+1,(SP)(SP)-(SP)+2(6)PUSH 4(SP)-(SP)-2(SP+1)-0(SP)-4 43。(1)2CE FF93H (2)24B 76A0H (3)909 0804H (4)6F 13ADH 44。(1)0FFFF FFFCH (2)0FFFF FFF8H (3)0000 0007H (4)0000 0099H 45。(EAX)=0 (EBX)=25d 46。(AX)=3d (DX)=7d 47。ADD ECX,EDX ADD ECX,ESI MOV EDI ,ECX 48。IMUL BX,DX,100H 执行的操作是:(BX)-(DX)*

26、100H 49。程序实现:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 10 of 41 10 MOV AL,BL CBW IDIV CL IMUL 2 MOV DX,AX 50。JMP DI 是直接跳转,执行的操作是:(IP)-(IP)+(DI)JMP DI是间接跳转,执行的操作是:(IP)-(IP)+(DI)跳转到 DI 中所指向的内存单元中的指令地址 51。假设数组名为 NUMBERS,程序如下 MOV BX,0 ;后面用到 MOV CX,100H ;把循环次数放入 CX MOV AL,42H MOV SI,0 ;初始化 SI;C

27、HECK 用来实现查找功能 CHECK:CMP AL,NUMBERSSI INC SI JB STORE1 ;大于 42H 的数的个数存入 UP JA STORE2 ;小于 42H 的的数的个数存入 DOWN 中 LOOP CHECK ;相等继续循环 STORE1 INC BL ;找到一个大于 42 的数,BL 值增加 1 MOV UP,BL LOOP CHECK STORE2 INC BH MOV DOWN,BH LOOP CHECK 52。图,也不用画了呵呵好了,本章结束 第四章 1。指令下列指令的错误(1)MOV AH,BX 源操作数与目的操作数长度不相同(2)MOV BX,SI 这是两

28、个内存单元在传递数据,而这在汇编语言中是不允许的 (3)MOV AX,SIDI 不能用两个变址连用,其中一个应为基址(4)MOV MYDA TBXSI,ES:AX 同(2)(5)MOV BYTE PTRBX,1000 必须有一个为寄存器(6)MOV BX,OFFSET MYDA TSI OFFSET 不能与复杂操作数相连(7)MOV CS,AX 不能对 CS 赋值(8)MOV ECX,AX 操作数类型不同 2。(1)合法 (2)非法 (3)非法 (4)非法 3。(1)非法,操作数类型不同 (2)合法 (3)非法,不允许两个内存单元直接传递数据,你把人家 CPU 放哪了?呵 (4)合法 (5)合

29、法 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 11 of 41 11 (6)合法 (7)非法,必须有一个寄存器把 CPU 放哪了?(8)非法,两个内存单元地址相加没有意义 (9)合法 (10)非法,同(3)4。(1)两内存单元传递数据 (2)操作数类型不同 (3)跳转指令只能跳转到符号地址 (4)转移指令后不能为变量,只能为标号 (5)格式不对,应为 NEAR PTR。5。图,就不画了 6。(1)DW 5150H(2)MOV AX,5150H MOV ADDRESS ,AX 等,写出几个就可以 7。DA TASG SEGMENT F

30、LD1B DB personal computer FLD2B DB 10 DUP(32)FLD3B DB 20H FLD4B DB 01011001B FLD5B DB 32654 FLD6B DB 10 DUP(0)FLD7B DB PART1,DUP 20 (?),PART2,DUP 50(?),PART3,DUP 14(?)FLD1W DW 0FFF0H FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5,6,7,8,9 FLD5W DW 5 DUP(0)FLD6W DW (FLD6W-FLD1W)-(FLD7B-FLD1B)8。PLENTH 的值

31、为 22,GE 表示该数据段的长度 9。L 的值为 7 10。(1)MOV AX,OFFSET LNAME (2)MOV SI,WORD PTR CODE_LIST (3)CODE_LENGHT EQU$-CODE_LIST 11。代码如下:DA TA_SEG SEGMENT DB 5 DA TA_LIST DW 0FFFFH,0,2,5,4,5 DUP(?)DA TA_SEG ENDS CODE_SEG SEGMENT ASSUME CS:CODE_SEG,DS:DA TA_SEG MOV AX,5 MOV MAX,AX MOV AX,0FFFFH MOV MIN,AX CODE_SEG E

32、NDS 12。(1)10025 (2)19 (3)2548 (4)3 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 13 of 41 13 E_SEG ENDS C_SEG SEGMENT ;代码段定义 ASSUME CS:C_SEG,DS:D_SEG,ES:E_SEG START:MOV AX,D_SEG MOV DS,AX MOV AX,E_SEG MOV ES,AX MOV EAX,DS:AUGEND ADD EAX,ES:ADDEND

33、MOV DS:SUM,EAX C_SEG ENDS END START ;结束 18。19。需要加上 PTR 伪操作的有:(2)(3)(4)第五章 5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来.model small.stack 100H.code main proc far Start:push dx mov ax,0 push ax mov ah,01H int 21H cmp al,61H jl lop1 cmp al,7BH jge lop1 sub al,20H mov dl,al lop1:mov ah,2 int 21H ret End start

34、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 14 of 41 14 5.2 编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符.model small.386.code MAIN PROC FAR start:push ds sub ax,ax push ax input:mov ah,7H int 21H cmpe:cmp al,20H JE exit cmp al,61H JL input cmp al,7AH JG input print:sub al,01H mov dl,al mov

35、 ah,02H int 21H add al,01H mov dl,al mov ah,02H int 21H add al,01H mov dl,al mov ah,02H int 21H ;输出换行回车 mov dl,0AH mov ah,02H int 21H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 15 of 41 15 jmp input exit:ret MAIN ENDP END start 5.3 将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别放在 AL、BL、CL、DL 中。.mo

36、del small.data x DB 4 dup(?).stack 100H.code MAIN PROC FAR start:push ds and ax,00H push ax mov ax,1234H mov cx,04H mov si,00H lop:push cx mov cl,04H rol ax,cl push ax and al,0FH mov BYTE PTR xsi,al pop ax pop cx add si,2 Loop lop mov al,X mov bl,X+2 mov cl,X+4 mov dl,X+6 print:mov ah,02H int 21H mo

37、v dl,al mov ah,02H int 21H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 16 of 41 16 mov dl,bl mov ah,02H int 21H mov dl,cl mov ah,02H int 21H exit:ret MAIN ENDP END start 5.4 编写一个程序,要求比较两个字符串 STRING1 和 STRING2 所含字符是否相同,若相同则显示MA TCH,若不同在显示:NO MA TCH。.model small.data STRING1 DB I must study ha

38、rd STRING2 DB I must study hard X DB MA TCH.$Y DB NO MA TCH.$.stack 100H.code main proc far Start:push dx mov ax,0 push ax mov ax,data mov ds,ax mov es,ax lea si,STRING1 lea di,STRING2 cld mov cx,(string2-string1)/type STRING2 ret End start 5.5 编写一个程序,要求能从键盘接收一个个位数 N,然后响铃 N 次,(响铃的 ASCII 为 07)。这题比较有意

39、思,呵呵。model small.code main proc far start:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 17 of 41 17 push ds sub ax,ax push ax input:mov ah,01H int 21H cmp al,20H je exit cmp al,30H jle input cmp al,3AH jge input sub al,30H mov cx,ax and cx,0FFH lop:mov dl,07H mov ah,2H int 21H loop lop jmp inp

40、ut exit:ret main endp end start 5.6 编写程序,将一个包含有 20 个数据的数组 M 分成两个数组:正数数组和负数数组 N,并分别把这两个数组中的数据个数显示出来。.model small.386.data M DB 1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10 P DB 20 dup(?)N DB 20 dup(?).code MAIN PROC FAR start:PUSH ds AND ax,0 PUSH ax MOV ax,data mov ds,ax MOV bx,0 MOV si,0 欢迎您

41、阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 18 of 41 18 MOV di,0 MOV cx,20D cmpe :CMP Mbx,0 JL ifLow hight:MOV al,byte ptr Mbx MOV byte ptr Psi,al inc si JMP commonContrl ifLow:MOV al,byte ptr Mbx MOV byte ptr Ndi,al INC di commonContrl:INC bx loop cmpe mov ax,si call showNumber call printCR mo

42、v ax,di call showNumber exit:ret MAIN ENDP;注意,ShowNumber 这个子过程有问题,请自行修改;showNumber PROC NEAR covernum:DAA MOV dx,ax MOV cl,2H show:ROL dl,4H push dx AND dl,0fH ADD dl,30H MOV ah,02H int 21H pop dx loop show ret showNumber ENDP;printCR PROC NEAR 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 19

43、of 41 19 mov dl,0aH mov ah,02H int 21H mov dl,0dH mov ah,02H int 21H ret printCR ENDP end start 5.7 编制一个汇编语言程序,求出首地址为 DATA的 100D字数组中的最小偶数,并把它放在AX 中。此题根据题意要求应该使用完整汇编格式,因为精简格式也使用 DATA.dataare segment DA TA DW 3322H,4555H,200H,3544H,1245H num DB($-DA TA)/2 dataare ends code segment assume cs:code,ds:da

44、taare MAIN PROC FAR start:push ds mov ax,0H push ax mov ax,dataare mov ds,ax mov dx,0H ;偶数数量计数 mov cx,Word ptr num mov si,0H isO:mov bx,WORD PTR DA TAsi shr bx,1H jnc addDX jmp commonControl addDX:ADD dx,1H cmp dx,1H je firstAXValue compare:mov bx,WORD PTR DA TAsi cmp bx,ax jge commonControl mov ax,

45、bx commonControl:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 20 of 41 20 ADD si,2H loop isO jmp exit firstAXvalue:mov ax,WORD PTR DA TAsi jmp compare exit:ret MAIN ENDP code ends END start 5.8 没有做。5.9 编写一个汇编语言程序,要求从键盘上接收一个思维的十六位进制数,并在终端上显示与它等值的二进制数。.model small.386.code main proc far start:p

46、ush ds mov ax,0 push ax mov ax,0 mov cx,4 mov dx,0 input:mov ah,1H int 21H cmp al,30H jl input cmp al,39H jle s cmp al,61H jl input cmp al,66H jg input sub al,27H s:sub al,30H add dl,al cmp cx,1H je f rol dx,4 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 21 of 41 21 f:loop input exit:call pri

47、nt ret main endp print proc near mov cx,10H p:rol dx,1 push dx and dx,1 add dx,30H mov ah,2 int 21H pop dx loop p ret print endp end start 5.10 设有一段英文,其变量字符名为 ENG,并以$字符结束。试编写一程序,查对单词 SUN在该文中的出现次数,并以格式SUN XXXX显示出次数。.model small .386.data ENG db SUNs SUN JA VA,24H ;24H=$MESSAGE db SUN:,$.stack 100H.co

48、de MAIN PROC FAR start:PUSH DS AND AX,0 PUSH AX MOV AX,data MOV DS,AX ;-MOV AX,0H MOV SI,1H subSI1:SUB SI,1H subSI2:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 22 of 41 22 SUB SI,1H compareS:ADD SI,1H MOV DL,ENGSI CMP DL,24H JE print CMP DL,53H JNE compareS compareU:ADD SI,1H MOV DL,ENGSI CM

49、P DL,55H JNE subSI2 compareN:ADD SI,1H MOV DL,ENGSI CMP DL,4EH JNE subSI1 INC AX JMP compares print:LEA DX,MESSAGE PUSH AX MOV AH,09H INT 21H POP AX call showNumber exit:ret MAIN ENDP;注意,ShowNumber 这个子过程有问题,请自行修改;showNumber PROC NEAR covernum:DAA MOV dx,ax MOV cl,4H show:ROL dx,4H push dx AND dx,0fH

50、 ADD dx,30H MOV ah,02H int 21H pop dx 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!Page 23 of 41 23 loop show ret showNumber ENDP END start 5.11 从键盘输入一系列以$为结束副的字符串,然后对其中的非数字字符计数,并显示出计数结果。.model small.386.code MAIN PROC FAR start:push ds mov ax,0 push ax mov cx,0 input:mov ah,1H int 21H compare:cmp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁