汇编语言(沈美明,温冬婵)课后答案
《汇编语言程序设计》教案及答案第二版-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汇编语言程序设计课后习题答案(第二版 沈美明))
第五章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’。
汇编语言沈美明答案汇编语言第3章答案沈美明
汇编语言沈美明答案汇编语言第3章答案沈美明第三章 80X86的指令系统和寻址方式 1、给定(BX )=637DH,(SI )=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么答案:(1)立即寻址没有(2)直接寻址 7237H(3)使用BX 的寄存器寻址没有(4)使用BX 的间接寻址 637DH(5)使用BX 的寄存器相对寻址 0D5F0H(6)基址变址寻址 8E18H(7)相对基址变址 004FH2、根据下列要求,写出相应的汇编指令(1)把BX 寄存器和DX 寄存器的内容相加,结果存入DX 寄存器中。
(2)用寄存器BX 和SI 基地址变址寻址方式把存储器中的一个字节与AL 寄存器的内容相加,并把结果送到AL 寄存器中。
(3)用寄存器BX 和位移量0B2H 的寄存器相对寻址方式把存储器中的一个字和(CX )相加,并把结果送回存储器中。
(4)用位移量为0524H 的直接寻址方式把存储器中的一个字与数2A59H 相加,并把结果送回该存储单元中。
(5)把数0B5H 与(AL )相加,并把结果送回AL 中。
答案:(1)ADD DX,BX(2)ADD AL,[BX][SI](3)ADD [BX][0B2H], CX(4)MOV AX,2A59HADD [0524H] ,AX(5)ADD AL ,0B5H3、写出把首地址为BLOCK 的字数组的第6个字送回到DX 寄存器的指令。
要求使用以下几种寻址方式:(1)寄存器间接寻址(2)寄存器相对寻址(3)基址变址寻址答案:(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,(xx0)=12H,(xx1)=34H,(xx2)=56H, (xx3)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。
8086汇编语言(沈美明 温冬娟版)复习资料(附答案)
汇编语言复习资料第1、2章微处理器的结构和存储器组成1、程序设计语言分哪三类?【机器语言、汇编语言和高级语言】2、二进制数转十进制、十六制数、十进制数转二进制数、十六制数转十进数。
3、十进制数的压缩和非压缩BCD码表示方法。
4、计算机显示、打印字符的编码一般采用什么码。
【ASCⅡ码】5、8086微处理器的功能结构分哪两大部件。
【总线接口单元BIU和执行单元EU;BIU负责与存储器接口,EU部分负责指令的执行。
】6、8086有哪些通用寄存器和段寄存器?哪些可即做8位又可以作16位通用寄存器?哪些在指令中可以装偏移地址?【通用寄存器:八位:AL、AH、BL、BH、CL、CH、DL、DH十六位:AX、BX、CX、DX、DI、SI、SP、BP三十二位:EAX、EBX、ECX、EDX、EDI、ESI、ESP、EBP既可做八位又可作十六位:AX、BX、CX、DX 段寄存器:SS、CS、DS、ES、FS 】7、掌握实模式下的内存分段管理方法。
8、堆栈的基本操作有哪两种,操作原则是什么。
对堆栈完成进出栈操作后,堆栈栈顶指针SP如何改变。
9、微机的总线按功能分为哪三大总线。
【地址总线AB、数据总线DB、控制总线CB 】10、8086微机内存是分段管理的,这样存储器单元的逻辑地址分为哪两个两部分,计算为物理地址公式是什么?【逻辑地址分为段基址和偏移量。
物理地址=10H*段基址+偏移量】11、标志寄存器中有哪些状态标志位和控制标志位,中文名称和符号分别为什么?有什么作用?【状态标志位:(1)辅助进位标志AF 这个标志用于十进制算术运算指令中。
( 2) 进位标志CF 这个标志主要用于多字节数的加、减法运算。
(3)溢出标志OF 多用于算术运算中。
(4) 符号标志SF 它的值与运算结果的最高位相同。
(5) 奇偶标志PF 这个标志可用于检查在数据传送过程中是否发生错误。
(6) 零标志ZF 若运算的结果为0,则ZF=1,否则ZF=0。
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位二进制补码计算下列各题,并用十六进制数表示其运算结果。
《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学出版社)
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、答:该程序的第一个字的物理地址是0AAA40H 。
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 、BP8、答:可以用来指示存储器地址的寄存器有BX 、SP 、BP 、DI 、SI 、IP 、CS 、DS 、ES 、SS 。
9、答:唯一正确的是D 。
第三章1。
.(1)立即寻址 没有(2)直接寻址 7237H(3)使用BX 的寄存器寻址 没有(4)使用BX 的间接寻址 637DH(5)使用BX 的寄存器相对寻址 0D5F0H(6) 基址变址寻址 8E18H(7)相对基址变址 004FH2 2。
根据下列要求,写出相应的汇编指令。
(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 寄存器的内容。
汇编语言第8章答案 沈美明
第八章输入输出程序设计1、写出分配给下列中断类型号在中断向量表中的物理地址。
(1)INT 12H (2)INT 8答:(1)00048H (2)00020H2、用CALL指令来模拟实现INT 12H显示字符T的功能。
答:MOV AH, 02MOV DL, ‘T’MOV BX, 0MOV DS,BXMOV BX, 21H * 4CALL FAR PTR [BX]3、写出指令将一个字符数据输出到端口25H。
答:MOV AL, 12HOUT 25H, AL4、写出指令将一个字数据从端口1000H输入。
答:MOV DX, 1000HIN AX, DX8、给定(SP)=1000,(SS)=0300,(FLAGS)0240,以下存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT 8指令后,SP,SS,IP,FLAGS的内容是什么?答:(SP) = 00FA(SS) = 0300(IP) = 0040(FLAGS) = 00409、类型14的中断向量在存储器的哪些单元里?答:14H*4 = 50H ,∴ (00050H)= 偏移地址,(00052H)= 段地址10、假设中断类型的中断处理程序的首地址为INT_ROUT,试写出主程序中为建立这一中断相量而编制的程序段。
答:PUSH DSMOV AX, SEG INT_ROUTMOV DS, AXMOV DX, OFFSET INT_ROUTMOV AL, 09MOV AH, 25HINT 21HPOP DS13、在8.12题中假设所有的中断处理程序中都没有STI指令,而他们的IRET指令都可以由于FLAGS出栈而使IF置1,则各设备的中断处理程序的运行次序应是怎样的?答:D3→D2→D4→D5→D1→D3→D5。
汇编课后题答案(清华大学出版社沈美明版)
汇编课后题答案(清华大学出版社沈美明版)第一章.+习题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=00001001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=01010101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=01010101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=10101011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=10101011B+0100 1100B=11110111B=0F7H;CF=0;OF=01.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。
IBM_PC汇编语言程序设计第二版(沈美明)习题参考答案
(4) 1111 1111B=FFH=255
1.3 将下列十六进制数转换为二进制数和十进制数:
(1) FA
(2) 5B
答:(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
3.2 试根据以下要求写出相应的汇编语言指令 (1) 把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器中。 (2) 用寄存器 BX 和 SI 的基址变址寻址方式把存储器中的一个字节与 AL 寄存器的内容相加,并 把结果送到 AL 寄存器中。 (3) 用寄存器 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结 果送回存储器中。 (4) 用位移量为 0524H 的直接寻址方式把存储器中的一个字与数 2A59H 相加,并把结果送回存储 单元中。 (5) 把数 0B5H 与(AL)相加,并把结果送回 AL 中。 答:(1) ADD DX, BX (2) ADD AL, [BX][SI] (3) ADD [BX+0B2H], CX (4) ADD WORD PTR [0524H], 2A59H (5) ADD AL, 0B5H
ibm-pc汇编语言程序设计课后习题答案(第二版沈美明))
第五章试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
答:程序段如下: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: RET编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
答:程序段如下:BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用INT 21HCMP AL, ‘a’ ;输入字符<‘a’吗JB STOPCMP AL, ‘z’ ;输入字符>‘z’吗JA STOPDEC AL ;得到前导字符MOV DL, AL ;准备显示三个字符MOV CX, 3DISPLAY: MOV AH, 2 ;显示一个字符的DOS调用INT 21HINC DLLOOP DISPLAYSTOP: RET将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 ;右移四次DEC CHJNZ A10 ;循环四次完了码B10: MOV DL, STORE ;四组数分别放在AL、BL、CL和DL中MOV CL, STORE+1MOV BL, STORE+2MOV AL, STORE+3STOP: RET试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。
汇编语言第3章答案 沈美明
第三章80X86的指令系统和寻址方式1、给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么答案:(1)立即寻址没有(2)直接寻址 7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址 637DH(5)使用BX的寄存器相对寻址 0D5F0H(6)基址变址寻址 8E18H(7)相对基址变址 004FH2、根据下列要求,写出相应的汇编指令(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2)用寄存器BX和SI基地址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
(5)把数0B5H与(AL)相加,并把结果送回AL中。
答案:(1)ADD DX,BX(2)ADD AL,[BX][SI](3)ADD [BX][0B2H], CX(4)MOV AX,2A59HADD [0524H] ,AX(5)ADD AL ,0B5H3、写出把首地址为BLOCK的字数组的第6个字送回到DX寄存器的指令。
要求使用以下几种寻址方式:(1)寄存器间接寻址(2)寄存器相对寻址(3)基址变址寻址答案:(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寄存器的内容。
IBMPC汇编语言程序设计课后习题答案(第二版沈美明)
(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=7FFFH将以下二进制数转换为十六进制数和十进制数:(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=255将以下十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(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=7FFFH将以下二进制数转换为十六进制数和十进制数:(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=255将以下十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=4660完成以下十六进制数的运算,并转换为十进制数进行校核:(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=217893以下各数均为十进制数,请用8位二进制补码计算以下各题,并用十六进制数表示其运算结果。
IBM-PC汇编语言程序设计(第2版)课后参考答案沈美明 温冬婵
2.9 请将下列左边的项和右边的解释联系起来(把所选字母放在括号中):
(1) CPU
(M) A.保存当前栈顶地址的寄存器。
(2) 存储器
(C)
B.指示下一条要执行的指令的地址。
(3) 堆栈
(D)
C.存储程序、数据等信息的记忆装置,微机有 RAM 和 ROM 两种。
(4) IP
(B)
D.以后进先出方式工作的存储空间。
1.7 下列各数均为用十六进制表示的 8 位二进制数,请说明当它们分别被看作是用补码表示的数或字 符的 ASCII 码时,它们所表示的十进制数及字符是什么?
(1) 4F 答:(1)
(2) (3) (4)
(2) 2B
(3) 73
4FH 表示的十进制数为 79,4FH 表示的字符为 O;
2BH 表示的十进制数为 43,2BH 表示的字符为 +;
1.6 下列各数为十六进制表示的 8 位二进制数,请说明当它们分别被看作是用补码表示的带符号数或 无符号数时,它们所表示的十进制数是什么?
(1) D8
(2) FF
答:(1) D8H 表示的带符号数为 -40,D8H 表示的无符号数为 216;
(2) FFH 表示的带符号数为 -1, FFH 表示的无符号数为 255。
(4) 7AB×6F
1.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
汇编语言第4章答案 沈美明
第四章汇编语言程序格式1、指令下列指令的错误(1)MOV AH,BX(2)MOV [BX],[SI](3) MOV AX,[SI][DI](4)MOV MYDAT[BX][SI],ES:AX)(5)MOV BYTE PTR[BX],1000(6)MOV BX,OFFSET MYDAT[SI](7)MOV CS,AX(8)MOV ECX,AX答案(1)MOV AH,BX 源操作数与目的操作数长度不相同(2)MOV [BX],[SI] 这是两个内存单元在传递数据,而这在汇编语言中是不允许的(3) MOV AX,[SI][DI]不能用两个变址连用,其中一个应为基址(4)MOV MYDAT[BX][SI],ES:AX 同(2)(5)MOV BYTE PTR[BX],1000必须有一个为寄存器(6)MOV BX,OFFSET MYDAT[SI] OFFSET 不能与复杂操作数相连(7)MOV CS,AX 不能对CS赋值(8)MOV ECX,AX 操作数类型不同2、下面哪些指令是非法的?(假设OP1,OP2是已经用DB定义的变量)(1)CMP 15,BX(2)CMP OP1,25(3)CMP OP1,OP2(4)CMP AX,OP1答案(1)合法(2)非法(3)非法(4)非法3、假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?(1)MOV BP,AL(2)MOV WORD_OP[BX+4*3][DI],SP(3)MOV WORD_OP1,WORD_OP2(4)MOV AX,WORD_OP1[DX](5)MOV SAVE_WORD,DS(6)MOV SP,SS:DATA_WORD[BX][SI](7)MOV [BX][SI],2(8)MOV AX,WORD_OP1+WORD_OP2(9)MOV AX,WORD_OP1-WORD_OP2+100(10)MOV WORD_OP1,WORD_OP1-WORD_OP2答案:(1)非法,操作数类型不同(2)合法(3)非法,不允许两个内存单元直接传递数据。
清华大学汇编语言(沈美明,温冬婵)课后答案
汇编语言程序设计(第二版)(清华大学IBM-PC 汇编语言程序设计(第二版)沈美明温冬婵编著)第二章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、答:该程序的第一个字的物理地址是0AAA40H。
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、BP8、答:可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、ES、SS。
9、答:唯一正确的是D。
.第三章2、答:(1)ADD DX, BX(2)ADD AL, [BX][SI](3)ADD [BX+0B2H], CX(4)ADD [0524H], 2A59H(5)ADD AL, 0B5H3、答:(1)MOV BX, OFFSET BLOCK + 0AHMOV DX, [BX](2)MOV BX, 0AHMOV DX, BLOCK[BX](3)MOV BX, OFFSET BLOCKMOV SI, 0AHMOV DX, [BX][SI]4、答:(1)1200H(2)0100H(3)4C2AH(4)3412H(5)4C2AH(6)7856H(7)65B7H6、答:MOV BX, 2000HLES DI, [BX]MOV AX, ES : [DI]7、答:(1)064DH(2)0691H(3)05ECH9、答:(1)MOV AX, [ BX+0CH ]MOV ZERO, AX(2)MOV AX, ARRAY[BX]MOV ZERO, AX10、答:(1)(AX)= 1234H(2)(AX)= 0032H11、答:(AX)= 1E00H12、答:LEA BX, CSTRINGMOV DL, [BX]MOV DH, [BX+6]13、答:14、答:LES BX, [2000]MOV AX, ES:[BX]16、答:(1)74D4H SF=0 ZF=0 CF=0 OF=0 (2)A5C1H SF=1 ZF=0 CF=0 OF=1 (3)3240H SF=0 ZF=0 CF=1 OF=0 (4)0000H SF=0 ZF=1 CF=1 OF=0 17、答:(1)0C754H SF=1 ZF=0 CF=1 OF=0 (2)12B0H SF=0 ZF=0 CF=0 OF=0 (3)45B0H SF=0 ZF=0 CF=0 OF=1 (4)9F24H SF=1 ZF=0 CF=0 OF=0 21、答:(1)MOV AX, ZSUB AX, XADD AX, WMOV Z, AX(2)MOV BX, XADD BX, 6MOV CX, RADD CX, 9MOV AX, WSUB AX, BXSUB AX, CXMOV Z, AX(3)MOV AX, W IMUL XMOV BX, YADD BX, 6IDIV BXMOV Z, AXMOV R, DX22、答:NEG DXNEG AXSBB DX, 016、答:MOV AX, AMOV DX, A+2 TEST DX, 8000H JZ STORE ; 为正NEG DXNEG AXSBB DX, 0STORE : MOV B, AX MOV B+2, DX17、答:(1)MOV AL, SSUB AL, 6DASADD AL, VDAAMOV U, AL(2)MOV AL, ZSUB AL, UDASMOV U, ALMOV AL, XADD AL, WDAASUB AL, UDASMOV U, AL23、答:(1)(BX)= 9AH (2)(BX)= 61H (3)(BX)= 0FBH (4)(BX)= 1CH (5)(BX)= 0 (6)(BX)= 0E3H 26、答:把(DX)(AX)中的双字左移四位(乘以16)。
汇编语言第9章答案 沈美明
第九章BIOS和DOS中断1、INT 21H的键盘输入功能1和功能8有什么区别?答:二者不同点是功能1输入字符可回显,功能8输入字符不回显。
2、编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。
加密表为:输入数字:0,1,2,3,4,5,6,7,8,9密码数字:7,5,9,1,3,6,8,0,2,4答:DSEG SEGMENTSCODE DB 7,5,9,1,3,6,8,0,2,4BUFFER DB 10 DUP (?)DSEG ENDS;--------------------------------------------------------------------CSEG SEGMENTMAIN PROC FARMOV AX,DSEGMOV DS,AXMOV SI,0MOV CX,10LEA BX,SCODEINPUT: MOV AH,01 ; 键盘输入INT 21HAND AL,0FH ; ASCII→数字XLAT ; 换码MOV BUFFER[SI],AL ; 存入缓冲区INC SI ; 修改地址指针LOOP INPUT ; 输入下一个数字MOV AX,4C00H ; 返回DOSINT 21HMAIN ENDPCSEG ENDSEND MAIN3、对应黑白显示器屏幕上40列最下边一个像素的存储单元地址是什么?答:((24行×80)+40列)×2 = 3920 = 0F50H4、写出把光标置在第12行,第8列的指令。
答:MOV DH, 0CH ; 第12行MOV DL, 08H ; 第8列MOV BH, 0 ; 0页MOV AH, 2 ; 置光标INT 10H ; BIOS调用5、编写指令把12行0列到22行79列的屏幕清除。
答:MOV AH, 7 ; 屏幕初始化MOV AL, 0 ; 全屏为空格MOV BH, 07H ; 正常属性MOV CH,12 ; 左上行MOV CL, 0 ; 左上列MOV DH, 22 ; 右下行MOV DL, 39 ; 右下列INT 10H ; BIOS调用6、编写指令使其完成下列要求:(1)读当前光标位置;(2)把光标移至屏底一行的开始;(3)在屏幕的左上角以正常属性显示一个字母M。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计(第二版)(清华大学IBM-PC 汇编语言程序设计(第二版)沈美明温冬婵编著)第二章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、答:该程序的第一个字的物理地址是0AAA40H。
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、BP8、答:可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、ES、SS。
9、答:唯一正确的是D。
第三章2、答:(1)ADD DX, BX(2)ADD AL, [BX][SI](3)ADD [BX+0B2H], CX(4)ADD [0524H], 2A59H(5)ADD AL, 0B5H3、答:(1)MOV BX, OFFSET BLOCK + 0AHMOV DX, [BX](2)MOV BX, 0AHMOV DX, BLOCK[BX](3)MOV BX, OFFSET BLOCKMOV SI, 0AHMOV DX, [BX][SI]4、答:(1)1200H(2)0100H(3)4C2AH(4)3412H(5)4C2AH(6)7856H(7)65B7H6、答:MOV BX, 2000HLES DI, [BX]MOV AX, ES : [DI]7、答:(1)064DH(2)0691H(3)05ECH9、答:(1)MOV AX, [ BX+0CH ]MOV ZERO, AX(2)MOV AX, ARRAY[BX]MOV ZERO, AX10、答:(1)(AX)= 1234H(2)(AX)= 0032H11、答:(AX)= 1E00H12、答:LEA BX, CSTRINGMOV DL, [BX]MOV DH, [BX+6]13、答:14、答:LES BX, [2000]MOV AX, ES:[BX]16、答:(1)74D4H SF=0 ZF=0 CF=0 OF=0 (2)A5C1H SF=1 ZF=0 CF=0 OF=1 (3)3240H SF=0 ZF=0 CF=1 OF=0 (4)0000H SF=0 ZF=1 CF=1 OF=017、答:(1)0C754H SF=1 ZF=0 CF=1 OF=0 (2)12B0H SF=0 ZF=0 CF=0 OF=0 (3)45B0H SF=0 ZF=0 CF=0 OF=1 (4)9F24H SF=1 ZF=0 CF=0 OF=021、答:(1)MOV AX, ZSUB AX, XADD AX, WMOV Z, AX(2)MOV BX, XADD BX, 6MOV CX, RADD CX, 9MOV AX, WSUB AX, BXSUB AX, CXMOV Z, AX(3)MOV AX, W IMUL XMOV BX, YADD BX, 6IDIV BXMOV Z, AXMOV R, DX22、答:NEG DXNEG AXSBB DX, 016、答:MOV AX, AMOV DX, A+2 TEST DX, 8000H JZ STORE ; 为正NEG DXNEG AXSBB DX, 0STORE : MOV B, AX MOV B+2, DX17、答:(1)MOV AL, SSUB AL, 6DASADD AL, VDAAMOV U, AL(2)MOV AL, ZSUB AL, UDASMOV U, ALMOV AL, XADD AL, WDAASUB AL, UDASMOV U, AL23、答:(1)(BX)= 9AH (2)(BX)= 61H (3)(BX)= 0FBH (4)(BX)= 1CH (5)(BX)= 0 (6)(BX)= 0E3H把(DX)(AX)中的双字左移四位(乘以16)。
20、答:MOV CL, 4SHR AX, CLMOV BL, DLSHR DX, CLSHL BL, CLOR AH, BL31、答:(1)CLDMOV CX, 132MOV AL, 20HLEA DI, ARRAYREP STOSB(2)CLDMOV CX, 9MOV AL, ‘*’LEA DI, ADDRREPNE SCASBJNE L1L2 : …… ; 找到L1 : …… ; 未找到(3)CLDMOV CX, 30MOV AL, 20HLEA DI, NAMEREPE SCASBJNE DO_NOTMOV CX, 30MOV AL, ‘$’LEA DI, NAMEREP STOSB…DO_NOT: …(4)CLDMOV CX, 30LEA SI, NAMELEA DI, ARRAYREP MOVSBSTDMOV CX, 9LEA SI, ADDR+8LEA DI, ARRAY+131REP MOVSB34、答:(1)转L1(2)转L1(3)转L2(4)转L5(5)转L536、答:2 p £q 时,(AX)22 p > q 时,(AX)1(1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0(2)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1(3)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 039、答:第四章1、答:(2)源*作数和目的*作数同为存储器寻址方式。
(3)SI、DI同为变址寄存器。
(7)目的*作数不能是代码段段寄存器CS。
(5)缺少PTR5、答:BYTE_VAR 42 59 54 45 0C EE 00 ?? - 01 02 01 02 ?? 00 ?? 01 02 01 02 ?? 00 ?? 01 02 - 01 02 ??WORD_VAR 00 00 01 00 02 00 00 00 - 01 00 02 00 00 00 01 00 02 00 00 00 01 00 02 00 - 00 00 01 00 02 00 ?? ??FB FF 59 42 45 54 56 02 -8、答:PLENTH的值为22(16H)。
12、答:(1)10025(2)25(3)2548(4)3(5)103(6)0FFFFH(7)1(8)35假设数据段中数据定义如下:VAR DW '34'VAR1 DB 100, 'ABCD'VAR2 DD 1COUNT EQU $-VAR1X DW 5 DUP (COUNT DUP (0))Y LABEL WORDZ DB '123456'V DW 2, $-VAR执行下面程序段并回答问题。
MOV AX, COUNT ; (AX) = ?MOV BX, Z-X ; (BX) = ?MOV CX, V+2 ; (CX) = ?MOV DX, VAR ; (DX) = ?MOV Y+3, 2MOV SI, Y+4 ; (SI) = ?ADD Z+5, 1MOV DI, WORD PTR Z+4 ; (DI) = ?、答:(AX)= 9(BX)= 90(CX)= 109(DX)= 3334H(SI)= 3600H(DI)= 3700H14、答:(1)(AX)= 1(2)(AX)= 2(3)(CX)= 20(4)(DX)= 40(5)(CX)= 117、答:D_SEG SEGMENTD_WORD LABEL WORDAUGEND DD 99251S_WORD LABEL WORDSUM DD ?D_SEG ENDSE_SEG SEGMENTE_WORD LABEL WORDADDEND DD -15962E_SEG ENDSC_SEG SEGMENTASSUME CS:C_SEG, DS:D_SEG, ES:E_SEGMAIN PROC FARSTART: PUSH DSMOV AX, 0PUSH AXMOV AX, D_SEGMOV DS, AXMOV AX, E_SEGMOV ES, AXMOV AX, D_WORDMOV BX, D_WORD+2ADD AX, ES:E_WORDADC BX, ES:E_WORD+2MOV S_WORD, AXMOV S_WORD+2, BXRETMAIN ENDPC_SEG ENDSEND START16、答:DATASG SEGMENT AT 0E000HWORD_ARRAY LABEL WORDBYTE_ARRAY DB 100 DUP (?)DATASG ENDSSTACKSG SEGMENT PARA STACK 'STACK'DW 32 DUP (?)TOS LABEL WORDSTACKSG ENDSCODESG SEGMENTORG 1000HMAIN PROC FARASSUME CS:CODESG, DS:DATASG, ES:DATASG, SS:STACKSG START:MOV AX, STACKSGMOV SS, AXMOV SP, OFFSET TOSPUSH DSSUB AX, AXMOV AX, DATASGMOV DS, AXMOV ES, AX……RETMAIN ENDPCODESG ENDSEND START9编写一个完整的程序,要求把含有23H,24H,25H,26H四个字符数据的数据区复制20次。
、答:DSEG SEGMENTVAR1 DB 23H,24H,25H,26HDSEG ENDSESEG SEGMENTVAR2 DB 80 DUP ('?')ESEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG, ES:ESEGMAIN PROC FARSTART:PUSH DSMOV AX, 0PUSH AXMOV AX, DSEGMOV DS, AXMOV AX, ESEGMOV ES, AXMOV DX, 20CLDLEA DI, VAR2AGAIN:LEA SI, VAR1MOV CX, 4REP MOVSBDEC DXJNZ AGAINRETMAIN ENDPCSEG ENDSEND START第五章1、答:……mov cx, countlea si, string1lea di, string2again:mov al, [si]mov [di], alinc siinc di2、答:code segment assume cs: code main proc farstart:push dsmov ax, 0push axmov ah, 1int 21hsub al, 30hcmp al, 0jz exitmov cl, almov ch, 0again:mov ah, 2mov dl, 7int 21hloop againexit:retmain endpcode endsend start……8、答:MOV CX,8MOV DL,0NEXT3:ROR AX,1 JNC NEXT1ROR AX,1JNC NEXT2INC DLNEXT2:LOOP NEXT3 ADD DL, 30HMOV AH, 2INT 21HMOV AH, 4CHINT 21HNEXT1:ROR AX, 1 JMP NEXT212、答:……mov cx, 100lea di, memmov ax, 0cldcomp:repne scaswjcxz exitpush cxmov si, disub di, 2mov bx, direp movswmov word ptr [di], 0mov di, bxpop cxjmp compexit:……13、答:……mov dx, 100mov si, 0repeat:mov al, string[si]cmp al, 30hjb gooncmp al, 39hja goonor cl, 20h ; (cl)51jmp exitgoon:inc sidec dxjnz repeatand cl, 0dfh ; (cl)50exit:……14、答:……table dw 100h dup (?)mdata dw ? ; 存放出现次数最多的数count dw 0 ; 存放出现次数……mov bx, 100hmov di, 0 ; di为数组TABLE的指针next:mov dx, 0mov si, 0mov ax, table[di]mov cx, 100hcomp:cmp table[si], axjne addrinc dxaddr:add si, 2loop compcmp dx, countjle changmov count, dxmov mdata, axchang:add di, 2dec bxjnz nextmov cx, countmov ax, mdata……19、答:……a dw 15 dup (?)b dw 20 dup (?)c dw 15 dup (?)……mov si, 0 ; si为数组A的指针mov bx, 0 ; bx为数组C的指针mov cx, 15loop1:mov di, 0 ; di为数组B的指针push cxmov cx, 20mov ax, a[si]loop2:cmp b[di], axjne nomov c[bx], axadd bx, 2jmp nextno:add di, 2loop loop2next:add si, 2pop cxloop loop121、答:……mov dx, 0lea si, arraymov ax, [si]mov bx, [si+2]cmp ax, bxjne next1inc dxnext1:cmp [si+4], axjne next2inc dxnext2:cmp [si+4], bxjne numinc dxnum:cmp dx, 3jl dispdec dxdisp:mov ah, 2add dl, 30hint 21h……第六章2、答:2、答:(1) NAME1 NAMELIST < >(2) MOV AX,DATA ;假设结构变量NAME1定义在数据段DATA中MOV DS,AXMOV ES,AX;MOV AH,10LEA DX,NAME1INT 21H;MOV CL,NAME1.ACTLENMOV CH,0LEA SI,INLEA DI,DISPFILECLDREP MOVSB6、答:SKIPLINES PROC NEARPUSH CXPUSH DXMOV CX,AXNEXT:MOV AH,2MOV DL,0AHINT 21HMOV AH,2MOV DL,0DHINT 21HLOOP NEXTPOP DXPOP CXRETSKIPLINES ENDP7、答:dseg segmentnum dw 76,69,84,90,73,88,99,63,100,80 n dw 10s6 dw 0s7 dw 0s8 dw 0s9 dw 0s10 dw 0dseg endscode segmentmain proc farassume cs:code, ds:dsegstart:push dssub ax, axpush axmov ax, dsegmov ds, axcall sub1retmain endpsub1 proc nearpush axpush bxpush cxpush simov si, 0mov cx, nnext:mov ax, num[si]mov bx, 10div blmov bl, alcbwsub bx, 6sal bx, 1inc s6[bx]add si,2loop nextpop sipop cxpop bxpop axretsub1 endpcode endsend start8、答:data segmentmaxlen db 40n db ?table db 40 dup (?)char db 'a' ; 查找字符’a’evenaddr dw 3 dup (?)data endscode segmentassume cs:code, ds:datamain proc farstart:push dsmov ax, 0push axmov ax, datamov ds, axlea dx, maxlenmov ah, 0ahint 21h ; 从键盘接收字符串mov addr, offset tablemov addr+2, offset nmov addr+4, offset charmov bx, offset addr ; 通过地址表传送变量地址call count ; 计算CHAR的出现次数call display ; 显示retmain endpcount proc near ; count子程序push sipush dipush axpush cxmov di, [bx]mov si, [bx+2]mov cl, byte ptr[si]mov si, [bx+4]mov al, byte ptr[si]mov bx, 0again:cmp al, byte ptr[di]jne l1inc bxl1: inc diloop againpop cxpop axpop dipop siretcount endpdisplay proc near ; display子程序call crlf ; 显示回车和换行mov dl, charmov ah, 2int 21hmov dl, 20hmov ah, 2int 21hmov al, bland al, 0fhadd al, 30hcmp al, 3ahjl printadd al, 7print:mov dl, alint 21hcall crlfretdisplay endpcrlf proc near ; crlf子程序mov dl, 0dhmov ah, 2int 21hmov dl, 0ahmov ah, 2int 21hretcrlf endpcode endsend start第七章1、答:CLRB MACRO N, ARRAYCLDMOV CX, NMOV AL, 20HLEA DI, ARRAYENDM2、答:WAGES MACRO RATE,HOUR MOV AL,RATEMOV BL,HOURMUL BL ;计算周工资;ADD AX,AXADD AX,AX ;一个月有4周MOV WAG,AX ;暂存中间结果ADD BL,BLADD BL,BL ;计算月出工小时数MOV AL,BLMOV AH,0MOV BL,10DIV BLMOV BL,3MUL BL ;计算奖金ADD WAG,AX ;计算工资总数ENDM宏展开:1 MOV AL,R11 MOV BL,421 MUL BL1 ADD AX,AX1 ADD AX,AX1 MOV WAG,AX1 ADD BL,BL1 ADD BL,BL1 MOV AL,BL1 MOV AH,01 MOV BL,101 DIV BL1 MOV BL,31 MUL BL1 ADD WAG,AX3、答:(1) 调用有效1 PUSH AX2 MOV AX, P12 SUB AX, P21 CMP AX, 01 JGE ??00001 NEG AX1 ??0000: MOV DISTANCE, AX1 POP AX(2) 调用有效1 PUSH AX2 MOV AX, [BX]2 SUB AX, [SI]1 CMP AX, 01 JGE ??00011 NEG AX1 ??0001: MOV X[DI], AX1 POP AX(3) 调用无效,有错误指令1 ??0002: MOV 240H, AX(4) 调用有效,但无意义宏展开略。