习题答案ibm-pc-汇编语言程序设计(第二版,清)

合集下载

《汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案及答案(第二版)

《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:20XX年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,20XX年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66)第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

《汇编语言程序设计》教案及答案第二版-2007

《汇编语言程序设计》教案及答案第二版-2007

《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。

它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。

3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。

(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。

(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。

(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。

(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。

(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。

(7).第九章说明BIOS和DOS系统功能调用的使用方法。

(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。

附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (13)3.180X86的寻址方式 (13)3.2程序占有的空间和执行时间 (15)3.380X86的指令系统 (15)第 4 章汇编语言程序格式 (32)4.1汇编程序功能 (32)4.2伪操作 (32)4.3汇编语言程序格式 (36)4.4汇编语言程序的上机过程 (39)第 5 章循环与分支程序设计 (42)5.1循环程序设计 (42)5.2分支程序设计 (43)5.3如何在实模式下发挥80386及其后继机型的优势 (43)第 6 章子程序结构 (45)6.1子程序的设计方法 (45)6.2子程序的嵌套 (46)6.3子程序举例 (46)第7 章高级汇编语言技术 (48)7.1宏汇编 (48)7.2重复汇编 (49)7.3条件汇编 (50)第8 章输入/输出程序设计 (51)8.1I/O设备的数据传送方式 (51)8.2程序直接控制I/O方式 (52)8.3中断传送方式 (52)第9 章BIOS和DOS中断 (55)9.1键盘I/O (55)9.2显示器I/O (57)9.3打印机I/O (58)9.4串行通信口I/O (59)第10 章图形与发声系统的程序设计 (60)10.1显示方式 (60)10.2视频显示存储器 (60)10.3EGA/VGA图形程序设计 (61)10.4通用发声程序 (62)10.5乐曲程序 (63)第11 章磁盘文件存取技术 (64)11.1磁盘的记录方式 (64)11.2文件代号式磁盘存取 (65)11.3字符设备的文件代号式I/O (66)11.4BIOS磁盘存取功能 (67)附录:《IBM—PC汇编语言程序设计》习题参考答案 (68)第一章.习题 (68)第二章.习题 (69)第三章.习题 (70)第四章.习题 (83)第五章.习题 (88)第六章.习题 (107)第七章.习题 (120)第八章.习题 (126)第九章.习题 (131)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。

IBM-PC汇编语言程序设计答案(第2版)

IBM-PC汇编语言程序设计答案(第2版)

附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。

IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明))

IBM-PC汇编语言程序设计课后习题答案(第二版 沈美明))

第五章5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗?JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗?JA STOPSUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可MOV DL, AL ;显示一个字符的DOS调用MOV AH, 2INT 21HJMP BEGINSTOP: RET5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗?JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗?DEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。

答:程序段如下:DSEG SEGMENTSTORE DB 4 DUP (?)DSEG ENDS┇BEGIN: MOV CL, 4 ;右移四次MOV CH, 4 ;循环四次LEA BX, STOREA10: MOV DX, AXAND DX, 0FH ;取AX的低四位MOV [BX], DL ;低四位存入STORE中INC BXSHR AX, CL ;右移四次JNZ A10 ;循环四次完了码?B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(著)答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美明,温冬蝉著)答案第三章答案1-221.(1)立即寻址没有(2)直接寻址 7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址 637DH(5)使用BX的寄存器相对寻址 0D5F0H(6) 基址变址寻址 8E18H(7)相对基址变址 004FH2.根据下列要求,写出相应的汇编指令。

(1)ADD DX,BX(2) ADD AL,[BX][SI](3) ADD [BX][0B2H], CX(4) MOV AX,2A59H ADD [0524H] ,AX(5) ADD AL ,0B5H3.(1)寄存器间接寻址MOV BX,OFFSET [BLOCK][0AH]MOV DX ,[BX](2)寄存器相对寻址MOV SI,OAHMOV DX,[BLOCK][SI](3)基址变址寻址MOV BX ,BLOCKMOV SI,OAHMOV DX,[BX][SI]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 AX,[BX] 同上(5)MOV 1100[BX] 4C2AH(6) MOV AX,[BX][SI] 7856H(7) MOV AX,1100[BX][SI] 65B7H5.(1) 7CD9H (2) 1200H (3) 6319H6. MOV BX,2000HLES DI ,[BX]MOV AX, ES:DI7.转向地址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 直接寻址 20050H(5) MOV AX,[BX] 寄存器间接寻址 20100H(6) MOV AX,ES:[BX] 直接寻址 21100H(7) MOV AX,[BP] 寄存器间接寻址 20010H(8)MOV AX,[SI] 同上 200A0H(9) MOV AX,[BX+10] 寄存器相对寻址 20110H(10)MOV AX,VAL[BX] 同上 20150H(11) MOV AX,[BX][SI] 基址变址寻址 201A0H(12) MOV AX,VAL[BX][SI] 相对基相变址寻址 201F0H9.(1)的指令: MOV AX, [BX][0CH] MOV ZREO ,AX(2) 的指令: MOV AX,ARRAY[BX] MOV ZREO,AX10. MOV AX,TABLE 是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234HLEA AX,TABLE 是把符号地址TABLE 的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H11. 执行完指令后,(AX)=1E00H12. LEA AX,CSTRINGMOV DL,AXMOV DH,[AX+6]13. 这参考课本P51--P5314.LES BX,[2000]MOV AX,ES:[BX]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 016.接上表~(1) 5D14 0 0 0 0(2) A870 1 0 0 1(3) D870 1 0 0 0(4) 34E4 0 0 1 017.(1).MOV AX,Z ;把Z送到AXSUB AX,X ;Z-XADD AX,W ;W+(Z-X)MOV Z,AX ;结果保存在Z中(2). MOV AX,R ;R送到AX中ADD AX,9 ;R+9MOV BX,X ;X送到BX中ADD BX,6 ;X+6ADD AX,BX ;(R+9)+(X+6),结果保存在AX中MOV BX,W ; W送到BX中SUB BX,AX ; W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~ MOV Z,BX ;最终结果送到Z中(3)MOV AX,W ;把W送到AXIMUL X ;W*X 注意:低十六位保存在AX里,高十六位保存在DX里MOV BX,Y ;把Y送到BX 里ADD BX,6 ;Y+6IDIV 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-XCWD ;把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保;在DX中MOV BX,5 ;把5送到BX中IDIV BX ;(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 0MOV CL,4 1234H 0 0 0ROL AX,CL 2341H 1 0 0DEC AX 2340H 1 0 0MOV CX,4 2340H 1 0 0MUL CX 8918H 0 0 0INT 20H程序结束后,(AX)=8918H (DX)=0000H19.指令执行完后AX的内容执行完后CF ,SF,ZF和OF的值MOV AX,0 0 0010DEC AX FFFFH 0100ADD AX,7FFFH 7FFEH 0000ADD AX,2 8000H 0101NOT AX 7FFFH 0101SUB AX,0FFFFH 8000H 1101ADD AX,8000H 0000H 1011SUB AX,1 FFFFH 1101AND AX,58D1H 58D1H 0000SAL AX,1 B1A2H 0101SAR AX,1 D8D1H 0100NEG AX 272FH 1000ROR AX,1 9397H 100120.(1)MOV AX,DATAXADD DATAY,AX(2)MOV AX,DATAXADD DATAY,AXMOV AX,[DATAX+2]ADD [DATAY+2] ,AX(3)本組指令的作用是:BX <------[DATAX]+[DATAY]+[1](CF的值) 帶進位加法~ (4)MOV AX,DATAXMUL DATAY ;結果的高十六位保存在DX裏,低十六位保存在AX裏(5)MOV AX,DATAXMOV DX,[DATAX+2]MUL DWORD DATAY;;(6)MOV AX,DATAXDIV 17H ;結果商保存在AL中,余數在AH中(7)MOV AX,DATAXCDWDIV DATAY21.NEG DXNEG AXSBB DX,022.MOV AX,A ;把雙字長數的低字放到AX中MOV DX,[A+2] ;把雙字長數的高字放到DX中TEST DX,8000H ;測試雙字長數的符號JZ RIGHT ;如果是非負數,則直接保存NEG DX ;如果是負數,則求補NEG AXSBB DX,0RIGHT: MOV B ,AXMOV [B+2],DX23.每條指令單獨執行完後的結果依次為:(1) 9AH (2)61H (3)0FBH (4)1CH (5)0 (6)0E3H24.執行指令序列後,BX的內容為:0DAH25.(1)把53D乘以2的程序:MOV AX,35H ;53D=35HSHL AX ,1(2)把53除以2 的程序:MOV AX,35HSHR AX,1其他的同理~~26.這段程序完成的功能是:把DX:AX中的雙字數據左移4位(相當於乘以16D)27.各條指令單獨執行後,DX的值依次為:(1) 5CH (2)17H (3)05C8H (4)72H (5)2017H (6)0CDH (7)0172H (8)05CCH (9)0DCH28.該程序段執行完後,BX寄存器的內容是:C02DH29.(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:LEA SI,CONAME ;把CONAME中第一个字节的偏移地址送到SI中LEA DI,PRLINE ;把PRLINE中第一个字节的偏移地址送到DI中MOV CX,20 ;把重复次数放到CX里CLD ;让SI DI从低地址指向高地址(即从左到右传送)REP MOVSB ;传送(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现:LEA SI ,CONAMELEA DI,PRLINEMOV CX,20STD ;和上面唯一不同的就是这次是从右到左,所以要从高地址指向低地址REP MOVSB(3)把CONAME中的第三和第四個字節裝入AX的程序實現:LEA SI ,[CONAME+3]LODSW(4)把AX寄存器的內容存入從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-1]R ;把檢查到的空格符送到BH中30.MOV CX,12H ;把重複次數放到CX中。

《IBM-PC汇编语言程序设计》(第2版)第3章习题解答及答案

《IBM-PC汇编语言程序设计》(第2版)第3章习题解答及答案

第3章习题答案3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1)立即寻址;答案:无。

如:MOV AX,5(2)直接寻址;答案:7237H 如:MOV AX,[7237H](3)使用BX的寄存器寻址;答案:无。

因不涉及内存如:MOV AX,BX(4)使用BX的间接寻址;答案:637DH 如:MOV AX,[BX](5)使用BX的寄存器相对寻址答案:D5B4H 如:MOV AX,[BX+ 7237H](6)基址变址寻址答案:8E18H 如:MOV AX,[BX][SI](7)相对基址变址寻址;答案:无效,溢出如:MOV AX,[BX][SI] + 7237H 3.2 试根据以下要求,写出相应的汇编语言指令:(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中;答案:ADD DX,BX(2) 用寄存器BX 和SI 的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中;答案:ADD AL,[BX][SI](3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回到存储器中;答案:ADD [BX+0B2H],CX (4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回到该存储单元中;答案:ADD WORD PTR [0524H],2A59H (5)把数0B5H与(AL)相加,并把结果送回AL中。

答案:ADD AL, 0B5H3.3 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。

要求使用以下几种寻址方式:(1) 寄存器间接寻址答案:LEA BX, BLOCKADD BX, 5*2MOV DX, [BX](2) 寄存器相对寻址答案:LEA BX, BLOCKMOV DX, [BX+5*2](3) 基址变址寻址答案:LEA BX, BLOCKMOV SI,5*2MOV DX, [BX][SI]3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56, (20103)=78H,(21200)=2AH,(21201)=4CH, (21202)=B7H, (21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。

IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明)

IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明)第一章1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=2551.3 将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

IBM_PC汇编语言程序设计第二版(沈美明)习题参考答案


(9) 物理地址 (F)
I.把若干个模块连接起来成为可执行文件的系统程序。
(10) 汇编语言 (H)
J.保存各逻辑段的起始地址的寄存器,8086/8088 机有四个:CS、DS、
SS、ES。
(11) 机器语言 (G)
K.控制操作的标志,如 DF 位。
(12) 汇编程序 (E)
L.记录指令操作结果的标志,共 6 位:OF、SF、ZF、AF、PF、CF。
(4) 1111 1111B=FFH=255
1.3 将下列十六进制数转换为二进制数和
答:(1) FAH=1111 1010B=250
(3) FFFE
(2) 5BH=101 1011B=91
(3) FFFEH=1111 1111 1111 1110B=65534
(4) 1234H=1 0010 0011 0100B=4660
3.3 写出把首地址为 BLOCK 的字数组的第 6 个字送到 DX 寄存器的指令。要求使用以下几种寻址方 式: (1) 寄存器间接寻址 (2) 寄存器相对寻址
IBM _PC 汇编语言程序设计习题参考答案.doc
-3-
作者:喻其山
(3) 基址变址寻址 答:(1) MOV BX, OFFSET BLOCK
(4) 保存段地址 (5) 表示运算结果为 0 (6) 将要执行的指令地址 (7) 将要从堆栈取出数据的地址 答:答案见题目的右边。
数据寄存器等
CX AX、DX,乘数和除数用其他寄 存器或存储器 段寄存器
ZF=1
CS:IP SS:SP
31FF0 41FF0
代码段
2.6 题的存储器分段示意图
2.8 那些寄存器可以用来指示存储器地址? 答:BX、BP、SI、DI、堆栈操作时的 SP、对应的段地址、386 及其后继机型的 Exx。

IBM-PC汇编语言程序设计课后习题答案第二版doc

第一章1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3 将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6)-85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+01001100B=11110111B=0F7H;CF=0;OF=01.6 下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为 -40,D8H表示的无符号数为216;(2) FFH表示的带符号数为 -1, FFH表示的无符号数为255。

汇编语言程序设计(第二版)课后题答案

4.1、判断下列标识符的合法性。

1)、code 合法2)、Data 合法3)、ABCDH 合法4)、1abcH 不5)、eax 不6)、01 合法7)、A?@ 合法8)、www@zsu 合法9)、***********.cn不10)、AX$DX 合法11)、_BX 合法12)、CX 不4.2、按下面要求写出相应的数据定义语句(未指定变量名的,可任意指定或省缺)。

1)、定义一个字节区域,第一个字节的值为20,其后跟20个初值为0的连续字节;DB 20,20 DUP(0)2)、定义一个以0为结束符的字符串,其初值为:The course is easy;DB “The course is easy”,03)、定义一个以'$'为结束符的字符串,该串中含有换行符和回车符;DB 0D,0A,”$”4)、定义100个字,其初值为0;DW 100 DUP(0)5)、从一个偶地址开始定义一个字变量word;EVENWORD DW ?6)、先定义一个字符串String,其偏移量指定为10,其初值为"ABCDEF",然后再定义3个字类型的数组Data,要求String和Data的偏移量相同;ORG 10STRING DB "ABCDEF"ORG 10DATA DW 3 DUP(?)7)、定义一个字符串String,其初值为"12345678",再定义4个字类型的数组Data,要求String和Data共享同一片内存单元;STRING DB "12345678"ORG $-8DATA DW 4 DUP (?)4.3、把下列C语言的变量定义语句改写成与之等价的汇编语言语句。

1)、char ch1, ch2[3], ch3[]="Are you ready?", ch4='Q';CH1 DB ?CH2 DB 3 DUP (?)CH3 DB "Are you ready?",0CH4 DB “Q”2)、int w1, w2[5], w3=0x1234, w4[]={90, 89, 432, 344};W1 DW ?W2 DW 5 DUP (?)W3 DW 1234HW4 DW 90,89,432,3443)、long int d1=1234, d2, d3[10], d4[]={1, 2, 3, 4, 5, 6};D1 DD 1234D2 DD ?D3 DD 10 DUP(?)D3 DD 1,2,3,4,5,64.4、假设4.3题中三组变量在内存中是连续存放的,且变量ch1的偏移量是20H,试求出其它每个变量的偏移量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⑴=1 0111 0001B=171H⑵=10 0111 0001 0000B=2710H⑶=1111 1111 1111B=0FFFH1.2⑴=2DH=45D⑶=0FFFFH=65535D1.3⑴=1111 1010B=250D⑵=0101 1011B=91D⑶=1111 1111 1111 1110B=65534D1.4⑴=0F1H⑶=0AACFH1.5⑴=0F7H1.6⑴=-40D or 216D⑵=-1D or 255D1.7⑴=+79D or “O”1.846H6FH…32H2EH2562.3(30022H)=0ABH (30024H)=0EFH (30021H)=0AB34H (30022H)=0CDABH 2.4PA1=3017AHPA2=3017AHPA3=3017AH2.5PA=0AAA40H2.62.71、AX,BX,CX,DX2、CX3、AX,BX,DX4、CS,DS,SS,ES5、PSW6、CS,IP7、SS.SP2.8CS,DS,SS,ES,BX,BP,SI,DI,SP,IP 2.91)M2)C3)D4)B5)A6)C7)K8)J9)F10)H11)G12) E13)I14)015)N第三章习题答案(IBM PC 第二版)3.11、无EA2、EA=7237H3、无EA4、EA=637DH5、EA=0D5B4H6、EA=8E18H7、EA=EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。

3.21、ADD DX,BX2、ADD AL,[BX][SI]3、ADD [BX+0B2H],CX4、ADD [0524H],2A59H5、ADD AL,0B5H3.31、LEA BX,BLOCK+10MOV DX,[BX]2、LEA BX,BLOCKMOV DX,10[BX]3、LEA BX,BLOCKMOV DI,10MOV DX,[BX][DI]3.41、(AX)=1200H2、(AX)=0100H3、(AX)=4C2AH4、(AX)=3412H5、(AX)=4C2AH6、(AX)=7856H7、(AX)=65B7H3.51、(IP)=7CD9H2、(IP)=0600H3、(IP)=098AH3.6LDS SI,[2000]MOV AX,[SI]3.71、064DH2、0691H3、05ECH(0624H+02H-3AH)3.81、立即数寻址:无EA,PA不确定2、寄存器寻址:无PA3、直接寻址:PA=20100H4、直接寻址:PA=20050H5、寄存器间接:PA=20100H6、寄存器间接寻址:PA=21100H7、寄存器间接寻址:PA=15010H8、寄存器间接寻址:PA=200A0H9、寄存器相对寻址:PA=20110H10、寄存器相对寻址:PA=20150H11、基址变址寻址:PA=201A0H12、相对基址变址寻址:PA=201F0H 3.91、MOV AX,12[BX]MOV ZERO,AX2、MOV AX,ARRAY[BX]MOV ZERO,AX3.10 (略)3.11(AX)=1E00H3.12MOV DL,CSTRING+0MOV DH,CSTRING+63.13 (略)3.14LDS SI,[2000H]MOV AX,[SI]3.152、SF=1 ZF=0 CF=0 OF=14、SF=0 ZF=1 CF=1 OF=03.16 (略)3.171、MOV AX,ZSUB AX,XADD AX,WMOV Z,AX2、ADD X,6ADD R,9MOV BX,XADD BX,RMOV AX,WSUB AX,BXMOV Z,AX3、ADD Y,6MOV AX,WIMUL XIDIV YMOV Z,AXMOV R,DX4、MOV AX,WSUB AX,XCWDIMUL BX,Y,5IDIV BXMOV BX,2IMUL AX,BXMOV Z ,AX3.181、(AX)=1234H 对CF、SF、ZF无影响2、(AX)=1234H 对CF、SF、ZF无影响3、(AX)=2341H CF=1、对SF、ZF无影响4、(AX)=2340H 对CF无影响、SF=0、ZF=05、(AX)=2340H 对CF、SF、ZF无影响6、(AX)=8D00H CF=0、对SF、ZF无定义最后(DX)=0000H,(AX)=8D00H3.19 (略)3.201、MOV AX,DATAXADD AX,DA TAYMOV DATAY,AX2、MOV AX,DATAXMOV DX,DATAX+2ADD AX,DA TAYADC DX,DATAY+2MOV DATAY,AXMOV DATAY,DX3、DA TX 和DATAY两个字数据之和加14、MOV AX,DATAXMUL DATAY5、MOV EAX,DA TAXMOV EBX,DA TAYMUL EBX6、MOV AX,DATAXMOV BL,23DIV BL7、MOV DX,DATAX+2MOV AX,DATAXDIV DATAY3.21NEG DXNEG AXSBB DX,0 ;带借位的减法3.22MOV AX,AMOV DX,A+2CMP DX,0JS FUSHUJMP CUNSHUFUSHU:NEG DXNEG AX;NEG对PSW的影响,AX为0时,CF=0,否则CF=1 SBB DX,0CUNSHU:MOV B,AXMOV B+2,DX3.231、(BX)=009AH2、(BX)=0061H3、(BX)=00FBH4、(BX)=001CH5、(BX)=0000H6、(BX)=00E3H3.24(BX)=00DAH3.25 (略)3.26(DX)(AX)中的双字左移4位3.271、(DX)=005CH3、(DX)=05C8H5、(DX)=2017H7、(DX)=00B9H9、(DX)=00DCH3.280C02DH3.291、LEA SI,CONAMELEA DI,PRLINEMOV CX,20CLDREP MOVSB2、LEA SI,CONAME+19LEA DI,PRLINE+19MOV CX,20STDREP MOVSB3、LEA SI,CONAME+2CLDLODSW4、LEA DI,PRLINE+5CLDSTOSB5、LEA DI,CONAMEMOV AL,20HMOV CX,20CLDREPNE SCASBJNZ NEXTDEC DIMOV BH,ES:[DI]3.30LEA DI,STRINGMOV AL,26HMOV CX,18CLDREPNE SCASBDEC DIMOV ES:[DI],20H3.311、LEA DI,PRINT_LINEMOV CX,132MOV AL,20HCLDREP STOSB2、LEA DI,STUDENT_ADDRMOV CX,9MOV AL,‟_‟CLDREPNE SCASB3、LEA DI,STUDENT_ADDR+8MOV CX,9MOV AL,‟_‟STDREPNE SCASB4、LEA DI,STUDENT_NAMEMOV CX,30MOV AL,20HCLDREPE SCASBJNZ NEXTDEC DIMOV CX,30MOV AL,‟*‟STDREP STOSB…NEXT:5、LEA SI,STUDENT_NAMELEA DI,PRINT_LINEMOV CX,30CLDREP MOVSBLEA SI,STUDENT_ADDR+8LEA DI,PRINT_LINE+131MOV CX,9STDREP MOVSB3.32LEA SI,OLDSLEA DI,NEWSMOV CX,5CLDREPE CMPSBJNZ NEW_LESS…NEW_LESS:3.331、CMP DX ,CXJA EXCEED…EXCEED:2、CMP BX ,AXJG EXCEED…EXCESS:3、CMP CX,0JCXZ ZERO…ZERO4、CMP BX,AXJO OVERFLOW…OVERFLOW5、CMP BX,AXJLE EQ_SMA…EQ_SMA6、CMP DX,CXJBE EQ_SMA…EQ_SMA3.341、L12、L13、L24、L3?5、L53.351、JNB/JBE/JNL/JLE2、JNB/JBE/JNL/JLE3、JNB/JNBE/JL/JLE4、JNB/JNBE/JNL/JNLE5、JNB/JNBE/JNL/JNLE6、JB/JBE/JL/JLE7、JB/JBE/JNL/JNLE8、JNB/JNBE/JL/JLE3.36如果2×P≤Q ,则2 →(AX);否则1 →(AX)3.37TEST STATUS,15HJZ ROUTINE_4 ;全0JP ROUTINE_2 ;两个1TEST STATUS,1HJZ ROUTINE_3 ;一个1TEST STATUS,4HJZ ROUTINE_3 ;一个1TEST STATUS,10HJZ ROUTINE_3 ;一个1ROUTINE_1: ;三个1…ROUTINE_2:…ROUTINE_3:…ROUTINE4:…3.381、(AX)=0005H,(BX)=0010H,(CX)=0000H,(DX)=0000H2、(AX)=0002H,(BX)=0004H,(CX)=0003H,(DX)=0001H3、(AX)=0003H,(BX)=0007H,(CX)=0002H,(DX)=0000H3.39 (略)3.42 (略)3.48(BX)←(DX)×100H3.49方法1、MOV AL,BLCBWDIV CLSHL AL,1CBWMOV DX,AX 方法2、MOV AL,BLCBWDIV CLCBWMUL DX,AX,2 3.50(略)3.51MOV AX,0MOV BX,AXLEA SI,STRINGMOV CX,100H NEXT:CMP [SI],42HJA DAYJB XIAOYJMP DENGYU DAY:INC AXJMP DENGY XIAOY:INC BX DENGY:INC SILOOP NEXTMOV UP,AXMOV DOWN第三章习题答案(80X86) 3.231、MOV AL,SSUB AL,6DASMOV AL,VDAAMOV U,AL3.31MOV CL,4SHR AX,CLMOV BL,DLSHR DX,CLSHL BL,CLOR AH,BL3.43CMP AX,-1JLE XDCMPAX,1JL XYMOV AX,1JMP OUTXD:MOV AX,-1JMP OUTXY:MOV AX,0OUT:3.45MOV CX,100MOB BX,-1NEXT:INC BXADD ARRAY[BX],1LOOP NEXT第四章习题答案(IBM PC 第二版)4.1、(略)4.2、(略)4.3、(略)Array 4.4、(略)4.5、如又图所示4.6、DW 5150HDB 50H,51HDB 'PQ'4.7、DA TA SEGMENTFLD1B DB 'per~ter'FLD2B DB 32FLD3B DB 20HFLD4B DB 01011001BFLD5B DB '32654'FLD6B DB 10 DUP (0)FLD7B DB 'PART1',20,'PART2',50,'PART3',14FLD1W DW 0FFF0HFLD2W DW 01011001BFLD3W DW FLD7BFLD4W DW 5,6,7,8,9FLD5W DW 5 DUP (0)FLD6W DW FLD1W-FLD1B4.9、L的值为64.10、1、MOV AX,OFFSET LNAME2、MOV SI,WORD PTR LODE_LIST3、CODE_LENGTH EQU $-CODE_LIST4.11、TITLE QIUZUIDAZHI;********************************************** DA TA SEGMENTDB 5DA TA_LIST DW -1,0,2,5,4,5 DUP (?)MAX DW ?MIN DW ?DA TA ENDS;******************************************* CODE SEGMENTASSUME CS:CODE,DS:DATA MAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DA TAMOV DS,AXLEA SI,DA TA_LISTMOV CX,4MOV AX,[SI]LOP1: ADD SI,2CMP AX,[SI]JGE BIGER1MOV AX,[SI]BIGER1: LOOP LOP1MOV MAX,AXLEA SI,DA TA_LISTMOV CX,4MOV AX,[SI]LOP2: ADD SI,2CMP AX,[SI]JLE BIGER2MOV AX,[SI]BIGER2: LOOP LOP2MOV MIN,AXRETMAIN ENDPCODE ENDSEND START4.12、(略)4.13、1、MOV AX,102、MOV BL,103、MOV CL,14.14、1、(AX)=12、(AX)=23、(AX)=204、(AX)=405、(AX)=14.15、(略)4.16、DA TA SEGMENT AT 0E000HA EQU THIS WORDB 100 DUP (?)DA TA ENDS;***********************************STACK SEGMENT STACK 'STACK'64 DUP (?)STACK ENDS;***********************************CDOE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKORG 1000HSTART:MOV AX,DA TAMOV DS,AX…CODE ENDSEND START4.17、D_SEG SEGMENTAUGEND DD 99251SUN DD ?D_SEG ENDS;*****************************E_SEG SEGMENTADDEND DD -15962E_SEG SEGMENT;*****************************C_SEG SEGMENTASSUME CS:C_SEG,DS:D_SEG,ES:E_SEG START:MOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXMOV AX,WORD PTR AUGENDADD AX,WORD PTR ADDENDMOV DX,WORD PTR AUGEND+2ADC DX,WORD PTR ADDEND+2MOV WORD PTR SUM,AXMOV WORD PTR SUM+2,DXMOV AH,4CHINT 21HC_SEG ENDSEND START4.18、1、结束汇编END START2、结束用户程序执行MOV AH,4CHINT 21H 4.19、(略)第四章习题答案(80X86)4.17、X_SEG SEGMENTX DW ?X_SEG ENDS;*********************Y_SEG SEGMENTY DW ?Y_SEG ENDS;*********************Z_SEG SEGMENTY DW ?Z_SEG ENDS;*********************CODE SEGMENTASSUME CS:CODE,DS:X_SEG,ES:Y_SEG,SS:Z_SEG START:MOV AX,X_SEGMOV DS,AXMOV AX,Y_SEGMOV ES,AXMOV AX,XADD AX,YADD AX,ZMOV X,AXMOV AH,4CHINT 21HCODE ENDSEND START第五章习题答案(IBM PC 第二版) 5.1、NEXT:MOV AH,07H ;不带回显INT 21HCMP AL,‟a‟JB STOPCMP AL,‟z‟JA STOPSUB AL,20HMOV DL,ALMOV AH,02HINT 21HJMP NEXTSTOP:MOV AH,4CHINT 21H5.2、NEXT:MOV AH,07H ;不带回显INT 21HCMP AL,‟a‟JB STOPCMP AL,‟z‟JA STOPDEC ALMOV DL,ALMOV CX,3DISPLAY:MOV AH,02HINT 21HINC DLLOOP DISPLAY STOP:MOV AH,4CHINT 21H5.3、DA TA SEGMENTSTORE DB 4 DUP(?) DA TA ENDS…NEXT:MOV CL,4MOV CH,4LEA BX,STOREA:MOV DX,AXAND DX,0FHMOV BYTE PTR [BX],DLINC BXSHR AX,CLDEC CHJNZ AB:MOV DL,STOREMOV CL,STORE+1MOV BL,STORE+2MOV AL,STORE+3MOV AH,4CHINT 21H5.4、DA TA SEGMENTSTRING1 DB …I am a student‟STRING2 DB …I am a student‟YES DB …MATCH‟,0DH,0AH,‟$‟NO DB …NO MA TH‟, 0DH,0AH,‟$‟DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DATA START:MOV AX,DA TAMOV DS,AXMOV ES,AXNEXT:LEA SI,STRING1LEA DI,STRING2MOV CX,STRING2-STRING1REPE CMPSBJNE DISPNOMOV AH,09HLEA DX,YESINT 21HJMP EXITDISPNO:MOV AH,09HLEA DX,NOINT 21HEXIT:MOV AH,4CHINT 21HCODE ENDSEND START5.5、START:MOV AH,07HINT 21HAND AL,0FHCBWMOV CX,AXBELL:MOV DL,07HMOV AH,02HINT 21HLOOP BELLEXIT:MOV AH,4CHINT 21H5.7、;********************************************DA TAS SEGMENTDA TA DW 100 DUP (?)DA TAS ENDS;--------------------------------CODES SEGMENTASSUME CS:CODES,DS:DA TASSTART:MOV AX,DATASMOV DS,AXBEGIN:MOV BX,0MOV CX,100COMPARE:MOV AX,DATA[BX] ;取数组的第一个偶数ADD BX,2TEST AX,01H ;是偶数吗?LOOPNZ COMPARE ;不是,比较下一个数JNZ STOP ;没有偶数,退出JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出COMPARE1:MOV DX,DATA[BX] ;取数组的下一个偶数ADD BX,2TEST DX,01H ;是偶数吗?JNZ NEXT ;不是,比较下一个数CMP AX,DX ;(AX)<(DX)吗?JLE NEXTMOV AX,DX ;(AX)<(DX),则置换(AX)为最小偶数NEXT:LOOP COMPARE1STOP:MOV AH,4CHINT 21HCODES ENDS;-------------------------------------------------END START;**************************************************** 5.9、MOV BX,0 ;用来存放4位16进制数MOV CH,4MOV CL,4INPUT:SHL BX,CLMOV AH,01HINT 21HCMP AL,39HJA AFAND AL,0FHJMP BINARYAF:AND AL,0FHADD AL,9BINARY:OR BL,ALDEC CHJNE INPUTDISPN:MOV CX,16DISP:MOV DL,0ROR BX,1RCL DL,1OR DL,30HMOV AH,02HINT 21HLOOP DISPEXIT:MOV AH,4CHINT 21H5.11、DA TA SEGMENTBUFF DB 50 DUP(?)COUNT DB 0DA TA ENDS…BIGIN:LEA BX,BUFFMOV COUNT,0INPUT:MOV AH,07HINT 21HMOV [BX],ALINC BXCMP AL,$JNZ INPUTLEA BX,BUFFNEXT:MUV CL,[BX]INC BXCMP CL,'$'JZ DISPCMP CL,30HJB NEXTCMP CL,39HJA NEXTCONT:INC COUNTJMP NEXTDISP:MOV DL, COUNTADD DL,30HMOV AH,02HINT 21H5.13、DA TA SEGMENTSTRING DB 100 DUP(?)DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DSTA START:…BEGIN:MOV CX,100MOV SI,0REPEAT:MOV AL,STRING[SI]CMP AL,30HJB GOONCMP AL,39HJA GOONOR CL,10HJMP EXITGOON:INC SILOOP REPEATAND CL,0DFHEXIT:MOV AH,4CHINT 21HCODE ENDSEND START5.15、DA TA SEGMENTM DW 4,3,2,1,0,-1,-2,-3,-4,-5 DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DA TAMOV DS,AXMOV CX,9LEA DI,MMOV AX,[DI]MOV SI,DI ;SI指向最大数CMP AX,0JGE ANEG AXA:ADD DI,2MOV DX,[DI]CMP DX,0JGE BNEG DXB:CMP AX,DXJGE CXCHG AX,DXMOV SI,DIC:LOOP AMOV AX,[SI]MOV M+2*10,AXMOV M+2*(10+1)MOV AH,4CHINT 21HCODE ENDSEND START3.17、DA TA SEGMENTMEM DB 4 DUP(?)DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DA TAMOV DS,AXMOV BX,0MOV CL,4MOV CH,4MOV DX,AXNEXT:AND AL,0FHADD AL,30HCMP AL,3AHJL S1ADD AL,07HS1:MOV MEM[BX],ALINC BXMOV AX,DXSHR AX,CLDEC CHJNZ NEXTMOV AH,4CHINT 21HCODE ENDSEND START5.19、DA TA SEGMENT ;双重循环A DW 15 DUP(?)B DW 20 DUP(?)C DW 20 DUP(?)DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DA TAMOV DS,AXBEGIN:MOV SI,0 ;A的指针MOV BX,0 ;C的指针MOV CX,15LOP1:PUSH CXMOV DI,0 ;B的指针MOV CX,20MOV AX,A[SI]LOP2:CMP B[DI],AXJNE NOMOV C[BX],AXADD BX,2NO:ADD DI,2LOOP LOP2ADD SI,2POP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START5.21、;************************************************ DA TA SEGMENTARRAY DW 3 DUP(?)DA TA ENDS;******************************************** CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV CX,3MOV BX,0NEXT:MOV AH,01HINT 21HMOV AH,0MOV ARRAY[BX],AXADD BX,2LOOP NEXTMOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21HMOV AX, ARRAYCMP AX,ARRAY+2JZ S1MOV AX,ARRAY+2CMP AX,ARRAY+4JZ S2MOV AX,ARRAYCMP AX,ARRAY+4JZ S2JMP S3S1:MOV AX,ARRAY+2CMP AX,ARRAY+4JNZ S2MOV DL,'2'JMP DISPS2:MOV DL,'1'JMP DISPS3:MOV DL,'0'DISP:MOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDS;*************************************************** END START5.23、DA TA SEGMENTA DW ?B DW ?DA TA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXBEGIN:MOV AX,AMOV BX,BXOR AX,BXTEST AX,0001HJZ CLASS ;两数均为奇数或偶数时转移TEST BX,0001HJZ EXITXCHG BX,AMOV B,BXJMP EXITCLASS:TEST BX,0001HJZ EXIT ;两数均为偶数时转移INC BINC AEXIT:MOV AH,4CHINT 21HCODE ENDSEND START5.25、(略)5.27、(略)第六章习题答案(IBM PC 第二版) 6.1、CRAY PROC FARPUSH DSXOR AX,AXPUSH AXADD AX,BXRETCRAY ENDP6.3、6.5、;*********************************TITLE 统计各分数段的学生人数;***********************************DA TA SEGMENTCHENGJ DB 76,69,84,90,73,88,99,63,100,80 S6 DB 0S7 DB 0S8 DB 0S9 DB 0S10 DB 0DA TA ENDS;-----------------------------------STACK SEGMENT STACKDW 20 DUP (?)STACK ENDS;-----------------------------------CODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK ;-----------------------------------MAIN PROC FARSTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,10CALL COUNTCALL DISPRETMAIN ENDP;-----------------------------------COUNT PROC NEARPUSH SIPUSH CXPUSH AXPUSH BXMOV SI,0MOV CX,10NEXT1:MOV AL,[CHENGJ+SI]MOV AH,0MOV BL,10DIV BLMOV BH,0MOV BL,ALSUB BX,6INC [S6+BX]INC SILOOP NEXT1POP BXPOP AXPOP CXPOP SIRETCOUNT ENDP;-----------------------------------DISP PROC NEARPUSH BXPUSH CXPUSH DXPUSH AXMOV BX,0MOV CX,5NEXT2:MOV DL,[S6+BX]ADD DL,30HMOV AH,02HINT 21HINC BXLOOP NEXT2POP AXPOP DXPOP CXPOP BXRETDISP ENDPCODE ENDS;**********************************END START;**********************************6.9、(上机);******************************************************DSEG SEGMENTINBUF DB 12 DUP (' ') ;输入缓冲区,初始值为空格OUTNAME DB 16 DUP (' ') ;姓名输出行,初始值为空格OUTPHONE DB 12 DUP (' '),0DH,0AH,'$' ;号码输出行,初始值为空格MESG1 DB 'INPUT NAME:','$'MESG2 DB 'INPUT A TELEPHONE NUMBER:','$'MESG3 DB 'NAME',12 DUP (' '),'TEL.',0DH,0AH,'$'CRLF DB 0DH,0AH,'$'DSEG ENDS ;以上定义数据段;----------------------------------------------------STACK SEGMENT STACKDW 100 DUP (?)TOS LABEL WORDSTACK ENDS ;以上定义堆栈段;----------------------------------------------------CSEG SEGMENTTELIST PROC FAR ;主程序TELISTASSUME CS:CSEG,DS:DSEG,ES:DSEG,SS:STACKSTART:MOV AX,STACKMOV SS,AX ;给SS赋值MOV SP,OFFSET TOS ;给SP赋值PUSH DS ;设置返回DOSSUB AX,AXPUSH AXMOV AX,DSEGMOV DS, AX ;给DS赋值MOV ES, AX ;给ES赋值BEGIN:LEA DX,MESG1MOV AH,09H ;显示字符串功能调用INT 21HCALL INPUT_NAME ;输入姓名LEA DX,MESG2MOV AH,09H ;显示字符串功能调用INT 21HCALL INPHONE ;输入电话号码CALL PRINTLINE ;显示姓名及电话号码RETTELIST ENDP;----------------------------------------------------INPUT_NAME PROC NEAR ;输入姓名子程序CALL GETCHAR ;调输入字符子程序输入姓名LEA SI,INBUF ;把INBUF中的姓名移入输出行OUTNAMELEA DI,OUTNAMEMOV CX,12CLDREP MOVSBRETINPUT_NAME ENDP ;INPUT_NAME子程序结束;----------------------------------------------------INPHONE PROC NEAR ;输入电话号码子程序CALL GETCHAR ;调输入字符子程序输入电话号码LEA SI,INBUF ;把INBUF中的电话号码移入输出行OUTPHONE LEA DI,OUTPHONEMOV CX, 12CLDREP MOVSBRETINPHONE ENDP ;INPHONE子程序结束;-----------------------------------------------GETCHAR PROC NEAR ;键盘输入子程序MOV AL,20H ;先将INBUF中填满空格字符MOV CX,12LEA DI,INBUFCLDREP STOSBMOV CX,12 ;向INBUF输入字符MOV DI,0INPUT:MOV AH,1 ;从键盘接收一个字符并回显的DOS功能调用INT 21HCMP AL,0DH ;输入回车符返回JZ QUITMOV [INBUF+DI], ALINC DILOOP INPUTQUIT:CALL DISP_CRLFRETGETCHAR ENDP ;GETCHAR子程序结束;----------------------------------------------------PRINTLINE PROC NEAR ;显示姓名及电话号码子程序LEA DX,MESG3MOV AH, 09H ;显示字符串功能调用INT 21HLEA DX,OUTNAME ;显示姓名及电话号码MOV AH,09H ;显示字符串功能调用INT 21HRETPRINTLINE ENDP ;PRINTLINE子程序结束;-----------------------------------------------DISP_CRLF PROC NEAR ;显示回车换行符子程序LEA DX,CRLFMOV AH,09HINT 21HRETDISP_CRLF ENDP ;DISP_CRLF子程序结束;----------------------------------------CSEG ENDS ;以上定义代码段;--------------------------------END START;***********************************6.11、1、CALL指令,CALL指令具有FAR属性2、根SUPBPRO的入口地址,入口地址为SUPBPRO本身6.13、(略)6.15、1、D_SEG SEGMENTX DW ?Y DW ?D_SEG ENDS;**********************E_SEG SEGMENTR DW ?E_SEG ENDS;***********************S_SEG SEGMENT STACKDW 20 DUP (0)S_SEG ENDS;*************************C_SEG SEGMENTASSUME CS:C_SEG,SS:S_SEG,ES:E_SEG,DS:D_SEG MAIN PROC FARSTART:PUSH DSXOR AX,AXPUSH AXMOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXCALL COMPUTERETMAIN ENDP;****************************COMPUTE PROC NEARMOV AX,XADD AX,YSUB AX,3MOV R,AXRETCOMPUTE ENDP;*****************************C_SEG ENDSEND MAIN ;或START2、D_SEG SEGMENTX DW ?Y DW ?D_SEG ENDS;**********************E_SEG SEGMENTR DW ?E_SEG ENDS;***********************S_SEG SEGMENT STACKDW 20 DUP (0)S_SEG ENDS;*************************C_SEG SEGMENTASSUME CS:C_SEG,SS:S_SEG,ES:E_SEG,DS:D_SEG MAIN PROC FARSTART:PUSH DSXOR AX,AXPUSH AXMOV AX,D_SEGMOV DS,AXMOV AX,E_SEGMOV ES,AXCALL FAR PTR COMPUTERETMAIN ENDP;****************************C_SEG ENDS;*************************************C_SEG1 SEGMENTCOMPUTE PROC FARMOV AX,XADD AX,YSUB AX,3MOV R,AXRETCOMPUTE ENDP;*****************************C_SEG1 ENDS;**************************END MAIN ;或START ;********************************** 3、(略)第六章习题答案(80X86)6.9、TITLE 显示不及格学生情况;*********************************** STUDENT STRUC ;定义结构BIANJ DB ' 'XINGM DB ' 'CHENGJ DB ?STUDENT ENDS;***********************************DA TA SEGMENTS1 STUDENT <'(1)',' ZHANG',20>S2 STUDENT <'(2)',' LI',30>S3 STUDENT <'(3)',' WANG',40>S4 STUDENT <'(4)',' CHEN',30>S5 STUDENT <'(5)',' YANG',20>DA TA ENDS;*********************************** STACK SEGMENT STACKDW 20 DUP (?)STACK ENDS;***********************************CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FARSTART: PUSH DSSUB AX,AXPUSH AXMOV AX,DA TAMOV DS,AXMOV CX,5MOV SI,OFFSET S1LOP: CMP [SI].CHENGJ,60JAE JIGEMOV BL,9MOV DI,SIBUJIGE: MOV DL,[DI]MOV AH,02HINT 21HINC DIDEC BLJNE BUJIGEJIGE: CALL CRLFADD SI,TYPE S1LOOP LOPMOV AH,4CHINT 21HMAIN ENDP;CRLF PROC NEARMOV DL,10MOV AH,02HINT 21HMOV DL,13MOV AH,02HINT 21HRETCRLF ENDP;CODE ENDSEND START ;*****************************第七章习题答案(IBM PC 第二版)7.1、CLRB MACRO DIZH CHANGDMOV CX,CHANGDMOV AL,' 'LEA DI,DIZHCLDREP STOSBENDM7.3、1、是2、是3、否4、否7.5、RESULT,OPERAND,COUNT应都为字节变量BIN_SUB MACRO RESULT,OPERAND,COUNTLOCAL NEXTPUSH CXPUSH BXPUSH AX?MOV CX,COUNTMOV AX,ALAE BX,OPERANDCLCNEXT:SBB AX,[BX]INC BXLOOP NEXTMOV RESULT,AXPOP AXPOP BXPOP CXENDM7.7、+ CNT DA TA,0+ CNT DA TA,1+ DATA0 DW ?+ DATA1 DW ?7.9、+ MOV TAB+0,0+ MOV TAB+1,1+ MOV TAB+2,2…+ MOV TAB+6,6第七章习题答案(80X86)TITLE 用宏指令定义显示字符串;******************************************* DINGY MACRO X,NAMEGOOD DB 'GOOD STUDENTS:CLASS&X &NAME' ENDM;******************************************** DA TA SEGMENTDINGY 1,ZHANGDB '0'DA TA ENDS;******************************************** STACK SEGMENT STACKDB 20 DUP(?)STACK ENDS;******************************************** CODE SEGMENTASSUME DS:DA TA,CS:CODE,SS:STACK MAIN PROC FARPUSH DSSUB AX,AXPUSH AXMOV AX,DA TAMOV DS,AXMOV DI,OFFSET GOODENXT:MOV DL,[DI]CMP DL,'0'JZ EXITMOV AH,02HINT 21HINC DIJMP NEXTEXIT:MAIN ENDP;****************************CODE ENDS;****************************END MAIN第八章习题答案(IBM PC 第二版)8.1、1、PA=00048H2、PA=00020H8.2、MOV DL,'T' MOV DL,'T'MOV AH,02H MOV AH,02HINT 21H CALL 86H×16D+84H 8.3、OUT 25H,1000H8.4、MOV DX,1000HIN AX,DX8.5、MOV DI,0MOV CX,80HNEXT:IN AL,51HTEST AL,02HJZ NEXTIN AL,50HMOV BUFF[DI],ALINC DIIN AL,51HTEST AL,00111000BJNZ ERR_ROUTLOOP NEXTJMP EXITERR_ROUT:…EXIT:…8.8、(SP)=00FAH(SS)=0300H(IP)=0040H(FLAGS)=0240H00A0H0900H0240H8.9、00050H,00051H,00052H,00053H四个字节8.10、PUSH DSMOV AX,SEG IN_ROUTMOV DS,AXMOV DX,OFFSET IN_ROUTMOV AL,09MOV AH,25H ;设置中断向量:DS:DX为中断向量;AL为中断类型号INT 21HPOP DS第九章习题答案(IBM PC 第二版)9.1、能否回显。

相关文档
最新文档