《80x86汇编语言程序设计》(第2版)习题答案
- 格式:doc
- 大小:261.00 KB
- 文档页数:43
《汇编语言程序设计》教案附:习题参考答案《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汇编语言程序设计》习题参考答案第一章.习题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。
第三章8088汇编语⾔程序设计微机原理第2版课后答案第三章 8088汇编语⾔程序设计本章的主要内容是汇编语⾔语句⾏的构成,源程序的结构,汇编语⾔程序设计⽅法。
3.1 重点与难点本章的学习重点是结构化程序设计思想,顺序、分⽀、循环结构的程序设计,⼦程序结构的设计与调⽤,中断指令的应⽤。
另外,汇编语⾔伪指令的使⽤、源程序的结构等也是必须掌握的。
3.1.1 汇编语⾔语句⾏的构成1.标记(1)标识符:由数字、字母和下划线组成,且不能以数字开头,最⼤长度不超过31个字符。
(2)保留字:汇编语⾔中保留下来的具有特殊⽤途的字串,如指令、伪指令、寄存器名等都是保留字。
保留字不可⽤作标识符。
(3)界符:程序或指令中两个部分的分隔符号。
汇编语⾔源程序中可⽤的界符:′〈〉;,:? $ () + - = &[] * / ·(4)常量:数字常量,可以使⽤不同的进制D、B、H、Q;字符串常量,由引号引起来的字符串,相当给出字符所对应的ASCII码串。
2.符号及其属性(1)寄存器:8086/8088 CPU的寄存器可以作为指令的操作数。
(2)变量:即内存单元的符号地址。
变量不能与保留字、段名重名。
它有三个属性:段属性,指变量所在段的段地址;偏移量,指变量所在段的起始地址到变量地址之间的字节数,即偏移(有效、逻辑)地址。
类型,指指变量具有的字节数,包括BYTE、WORD、DWORD、QWORD和TBYTE等。
(3)标号:即代码段中某条指令的符号地址,由编程者根据需要确定的。
标号不能与保留字重名,可使⽤字母、数字及下划线,但不允许⽤数字开头,字符个数不超过31个。
标号作为符号地址也有三个属性:段、偏移量和类型(NEAR、FAR)。
3.表达式表达式是作为语句的⼀个操作数,在汇编时⼀个表达式得到⼀个值。
(1)操作数数据——常数、符号常量;存储单元地址——常⽤符号地址表⽰。
(2)运算符算术运算符:+、-、*、/、MOD。
对地址的运算仅有+(加)、-(减)运算符。
汇编语⾔第⼆版王爽完整答案第1章基础知识检测点1.1(1)1个的寻址能⼒为8,那么它的地址总线的宽度为13。
(2)1的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1的存储器可以存储1024*8个,1024个。
(4)1、1、1分别是2^30、2^20、2^10。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能⼒分别为:64()、1()、16()、4()。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们⼀次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086⾄少要读512次、80386⾄少要读256次。
(8)在存储器中,数据和程序以⼆进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执⾏后相关寄存器中的值。
,62627 4A3H,31H 31A3H,23H 3123H6246H,826 8266246H82604D8H0482H6C82H882H,6 888H810H6246H(2) 只能使⽤⽬前学过的汇编指令,最多使⽤4条指令,编程计算2的4次⽅。
解:,2检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,的寻址范围为00010H到1000。
(2) 有⼀数据存放在内存 20000H 单元中,先给定段地址为,若想⽤偏移地址寻到此单元。
则应满⾜的条件是:最⼩为1001H,最⼤为2000H。
检测点2.3下⾯的3条指令执⾏后,⼏次修改?都是在什么时候?最后中的值是多少?解:修改4次;第⼀次在读取“ ”后,第⼆次在读取“ ”后,第三次在读取“ ”后,第四次在执⾏完“ ”后;最后中的值为0。
实验1 查看和内存,⽤机器指令和汇编指令编程1.略2.(1)略(2)略(3)查看内存中的内容。
第二章答案Tarzan 版题2.1 8086/8088通用存放器的通用性表现在何处?8个通用存放器各自有何专门用途?哪些存放器可作为存储器寻址方式的指针存放器?答:8086/8088通用存放器的通用性表现在:这些存放器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;8个通用存放器的专门用途如下:AX字乘法,字除法,字I/OBX存储器指针CX串操作或循环限制中的计数器DX字乘法,字除法,间接I/OSI存储器指针〔串操作中的源指针〕DI存储器指针〔串操作中的目的指针〕BP存储器指针〔存取堆栈的指针〕SP堆栈指针其中BX, SI, DI , BP可作为存储器寻址方式的指针存放器题2.2 从程序员的角度看,8086/8088有多少个可访问的16位存放器?有多少个可访问的8位存放器?答:从程序员的角度看,8086/8088有14个可访问的16位存放器;有8个可访问的8位存放器;题2.3 存放器AX与存放器AH和AL的关系如何?请写出如下程序片段中每条指令执行后存放器AX的内容:MOV AX,1234HMOV AL,98HMOV AH,76HADD AL,81HSUB AL,35HADD AL,AHADC AH,ALADD AX,0D2HSUB AX,0FFH答:MOV AX,1234H AX=1234HMOV AL,98H AX=1298HMOV AH,76H AX=7698HADD AL,81H AX=7619HSUB AL,35H AX=76E4HADD AL,AH AX=765AHADC AH,AL AX=D15AHADD AX,0D2H AX=D22CHSUB AX,0FFH AX=D12DH题2.4 8086/8088标志存放器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答:8086/8088标志存放器中定义了9个标志,如下:CF: Carry FlagZF: Zero FlagSF: Sign FlagOF: Overflow FlagPF: Parity FlagAF: Auxiliary Carry FlagDF: Direction FlagIF: Interrupt-enable FlagTF: Trap Flag这些标志可分为两类,分别为:1、运算结果标志;2、状态限制标志;采用指令SAHF可把AH中的指定位送至标志存放器低8位SF、ZF、AF、PF、CF;采用CLC可去除CF,置CF至IJ 0采用STC可置CF到1采用CLD可置DF到0采用sTD可置DF到1采用CLI可置IF到0采用STI可置IF到1 另外,在某些指令执行过程中会改变局部标志的状态;题2.5 请说说标志CF和标志OF的差异.答:如果把指令中处理的数据根据无符号数看待, 那么处理结果到达进位是, 置CF为1;如果把该处理中的数据根据有符号数看待,那么处理结果超过有符号数表达范围的,置OF为1 ;两个标志同步进行, CPU^不知道该数的类型;题2.6 8086/8088如何寻址1M字节的存储器物理地址空间?在划分段时必须满足的两个条件是什么?最多可把1M字节空间划分成几个段?最少可把1M字节地址空间划分成几个段?答:8086/8088通过对存储器分段和使用段存放器的方式寻址1M字节的存储器物理地址空间;在划分段时必须满足的两个条件是:1、逻辑段的开始地址必须是16的倍数;2、逻辑段的嘴道长度是64K;1M的字节空间划分为64K个逻辑段;最少可把1M字节地址划分成16个逻辑段;题2.7 在8086/8088上运行的程序某一时刻最多可访问几个段?程序最多可具有多少个段?程序至少几个段?答:在8086/8088上运行的程序某一日刻最多可访问4个当前段:代码段,数据段,堆栈段和附加段;程序最多可具有4种类型的段,最少要有一个代码段;题2.8 存储单元的逻辑地址如何表示?存储单元的20位物理地址如何构成?答:存储单元的逻辑地址由段值和偏移两局部组成:段值:偏移;存储单元的20位物理地址可以表示为:物理地址=段值X 16 +偏移;题2.9 当段重叠时,一个存储单元的地址可表示成多个逻辑地址.请问物理地址12345H 可表不多少个不同的逻辑地址?偏移最大的逻辑地址是什么?偏移最小的逻辑地址是什么?答:12345H可表示1000H(4096)个不同的逻辑地址,偏移最大的逻辑地址是235:0FFF5H 偏移最小的逻辑地址是1234:0005H题2.10为什么称CS为代码段存放器?为什么称SS为堆栈存放器?答:由于在取指令的时候,规定的段存放器就是CS所以CS为代码段存放器;而堆栈操作时规定的存放器是SS,所以SS为堆栈存放器;题2.11请举例说明何为段前缀超越.什么场合下要使用段前缀超越?答:在存取一般存储器操作数时,段存放器可以不是DS;当偏移设计BP存放器时,段存放器也可以不必是SS;如MovAX,[si] 默认段地址在DS中,也可以改变:MovAX, ES:[si]当数据并不在默认的DS指定段时,可以采用段前缀超越;题2.12 8086/8088 的根本寻址方式可分为哪三类?他们说明了什么?答:8086/8088的根本寻址方式可分为以下三类:1、存储器寻址;2、立即寻址;3、存放器寻址;他们说明了cpu有三类合计七种方式进行根本寻址;题2.13存储器寻址方式分为哪几种?何为存储器的有效地址?答:存储器寻址方式分为以下几种:1、立即寻址;2、直接寻址;3、存放器寻址;4、存放器间接寻址;5、存放器相对寻址;6、基址加变址寻址;7、相对基址加变址寻址;存储器的有效地址是一个 16bit 的无符号数;题2.14什么场合下缺省的段存放器是 SS?为什么这样安排?答:当使用堆栈时,缺省的段存放器是SS;由于SS 定义为堆栈段存放器,配合SP 堆栈指针,用来指向堆栈的栈顶;题2.15请说明如下指令中源操作数的寻址方式, MOV BX,[1234H] MOV BX,1234H MOV DX,BX MOV DX,[BX]MOV DX,[BX+1234H] MOV DX,[BX+DI] MOV DX,[BX+DI+1234H]答: MOV BX,[1234H]MOV BX,1234H MOV DX,BX MOV DX,[BX] MOV DX,[BX+1234H] MOV DX,[BX+DI]MOV DX,[BX+DI+1234H]题2.16 8086/8088提供了灵活多样的寻址方式,如何适当的选择寻址方式? 答:每种寻址方式都有其特点,首先应该掌握不同寻址方式之间的区别,以及适用的范围,结合程序中的需要进行灵活选择.题2.17设想一下这些寻址方式如何支持高级语言的多种数据结构? 答: 自己设想!题2.18为什么目标操作数不能采用立即寻址方式? 答:立即寻址表示是一个操作数,并非一个存储空间,作为目标操作数是不适宜的;题2.19处理器的通用存放器是否越多越好?通用存放器不够用怎么办? 答: 处理器的通用存放器并非越多越好,由于如果处理器的通用存放器数量太多,势必并作相互比拟;直接寻址:立即寻址:存放器寻址 :存放器间接寻址:存放器相对寻址 :基址加变址寻址 :相对基址加变址寻址造成处理器的本钱增加,同时也增加了处理器设计的复杂度;如果通用存放器不够用,应该采用内存中的存储单元代替,不过速度上要有所牺牲;题2.20哪些存储器寻址方式可能导致有效地址超出64K的范围?8086/8088如何处理这种情况?答:存放器相对寻址,基址加变址寻址,相对基址加变址寻址这三种寻址方式有可能导致有效地址超出64K的范围,8086/8088将取其64K的模进行访问;题2.21什么情况下根据段值和偏移确定的存储单元地址会超出1MP 8086/8088如何处理这种情况?答:当物理地址的计算超过FFFFFH时,存储单元地址会超出1M, 8086/8088将取其1M的模覆盖存取;题2.22 8086/8088 的指令集可分为哪6个子集?答:8086/8088的指令集可分为以下6个子集:1、数据传输2、算术运算3、逻辑运算4、串操作5、程序限制6、处理器限制题2.23 8086/8088的指令集合中,最长的指令有几个字节?最短的指令有几个字节?答:8086/8088的指令集合中,最长的指令4个字节,最短的指令2个字节;MOV AX,[BX+SI+1234H]题2.24 8086/8088 的算术逻辑运算指令最多一次处理多少二进制位?当欲处理的数据长度超出该范围怎么办?答:8086/8088的算术逻辑运算指令最多一次处理16bit的二进制位;如果处理的数据长度超出那么分成假设干局部进行逻辑运算,最后进行整合;题2.25如何时序数据段和代码段相同?答:将数据段的内容写入代码段中,并将代码段的段值赋给DS即可;题2.26通常情况下源操作数和目的操作数不能同时是存储器操作数. 请给出把存储器操作数甲送到存储器操作数乙的两种方法.答:法一:MOV AX, [BX]MOV [SI],AX DS:[BX]=甲,DS:[SI]=乙法二:MOV AX,[BX] XCHG AX,[SI] 法三:PUSH WORD PTR [BX] POP WORDPTR [SI]题2.27请用一条指令实现把BX的内容加上123并把和送到存放器AX答:LEA AX, [BX+123H]题2.28堆栈有哪些用途?请举例说明.答:堆栈的用途主要有:1、现场和返回地址的保护;MOV AX, OFFSET ADDRESSPUSH AXJMP XXXRET2、存放器内容的保护;PUSH AXPUSH BXPOP BX POP AX3、传递参数;PUSH [BX]CALL XXX ...XXX:POP AX ...4、存储局部变量;PUSH DSPUSH CS POP DS ...POP DS题2.29在本章介绍的8086/8088指令中,哪些指令把存放器SP作为指针使用? 指令8086/8088 集中,哪些指令把存放器SP作为指针使用?答:以下指令把存放器SP作为指针使用:1 、PUSH2、POP3、PUSHF4、POPF5、PUSHA6、POPA7、RET8、CALL9、RETF题2.30请说说标志CF的用途.请至少给出使标志CF清0的三种方法.答:CF的用途主要有:1、配合条件转移语句进行条件转移;2、配合移位指令实现操作数之间的位转移;3、常作为子程序的出口参数;如DOSB盘文件治理功能调用等;CF清.的方法:法一:CLC法二:ADD AX,0FFFFH 法三:CMP AX,0题 2.31 请写出如下程序片段中每条算术运算指令执行后标志CFZF、SF、OF PF和AF的状态.MOV AL,89HADD AL,ALADD AL,9DHCMP AL,0BCHSUB AL,ALDEC ALINC AL答:INSTRUCTION CF ZF AF MOVAL,89H 0 0 0ADDAL,AL 1 0 0 1ADDAL,9DH 0 0 1CMP SF1OF11PFAL,0BCHAL,AL 0AL1 0 1SUB 0 1 0DEC 0 0 1111INCAL 0 10 0 1 1题2.32什么是除法溢出?如何解决16位被除数8位除数可能产生的溢出?答:除法溢出是指除数如果是0,或者在8位除数时商超过8位,或者在16位除时商超过16位,那么认为是除法溢出,引起0中断;首先要确定8位除数不能为0,其次要确定商的最大值不能超过8位,如果超过8位,那么可采用16位的除法;题2.33请写出如下程序片段中每条逻辑运算指令执行后标志ZF、SF、PF的状态: MOV AL,45HAND AL,0FHOR AL,0C3HXOR AL,AL答:INSTRUCTION ZF SF PFMOV AL,45H 0 0 0AND AL,0FH 0 0 1OR AL,0C3H 0 1 0XOR AL,AL 1 0 1 题2.34 “MOV AX0可存放器AX清0.另外再写出三条可使存放器AX清0的指令. 答:法一:XOR AX,AX法二:AND AX,0法三:SUB AX,AX题 2.35 请写出如下程序片段中每条移位指令执行后标志CR ZF、SF和PF的状态.MOV AL,84HSAR AL,1SHR AL,1ROR AL,1SHL AL,1ROL AL,1CF ZF SF PF答:INSTRUCTIONMOVAL,84H0 0 0 0SAR0 0 1 0AL,1SHRAL,10 0 0 0RORAL,11 0 0 0 〔该命令不影响SF位〕RCL1 0 0 0AL,1SHL0 0 1 0AL,1ROLAL,1 1 0 1 0题2.36 8086/8088中,哪些指令把存放器CX作为计数器使用?哪些指令把存放器BX作为基指针存放器使用?答:8086/8088中,以下指令把存放器CX作为计数器使用:1、LOOP2、LOOPE3、LOOPZ4、LOOPNZ5、LOOPNE6、JCXZ以下指令把存放器BX作为基指针存放器使用:1、MOV2、XCHG3、LEA4、LDS题2.37请不用条件转移指令 JG JGE JL 和JLE 等指令实现如下程序片段的功能:CMP AL,BLJGE OK XCHG AL,BLOK:……答: 如下命令可实现同样功能:PUSH CX XOR CX,CX MOV CH,02H MOV CL,AL MOV BH,0H SUB CX,BX SHR CX,8 LOOP OKAL,BLXCHG AL,BLOK:POP CX题2.38段间转移和段内转移的本质区别是什么? 8086/8088哪些指令可实现段间转移?答:段间转移和段内转移的本质区别是有没有对CS 进行设置,如果设置了新的CS 代码存放器,程序将转移到另一个段中,即实现了段间转移; 否那么CS 和原来一致,那么在同一代码段中继续进行,只是IP 指针进行了调整,即为段内转移; 8086/8088中如下指令可以实现段间转移: 1 .JMP FAR PTR LEAEL 2 .JMP OPRD3.CALL4.RET/RETF;Reserve CX ;CX=0 ;CH=02H ;CL=AL ;BH=0;If CH=2, AL>=BL; If CH=1, AL<BL ;CX=2 or 1;If CX=2 jmp to OK; If CX=1 Exchange;Revert CXA'题2.39 8086/8088的条件转移指令的转移范围有多大?如何实现超出范围的条件转移?答:8086/8088的条件转移指令的转移范围只能从—126到+129之间,如果出现超出范围的条件转移,要借助无条件转移命令JMP题2.40相对转移和绝对转移的区别是什么?相对转移的有何优点?答:相对转移和绝对转移的区别是相对转移记录了目标地址与当前地址的差值,而绝对转移在转移命令中直接包含了目标地址;相对转移有利于程序的浮动,比方说增加了命令语句等;题2.41请指出以下指令的错误所在: MOV CX,DL XCHG [SI],3 POP CS MOV IP,AX SUB [SI],[DI] PUSH DH OR BL,DX AND AX,DS MUL 16AND 7FFFH,AX DIV 256 ROL CX,BL MOV ES,1234H MOV CS,AX SUB DL,CF ADCAX,AL MOV AL,300 JDXZ NEXT答:MOV CX,DL XCHG [SI],3 POP CS可以MOV IP,AX SUB [SI],[DI];存放器大小不一;不能与立即数进行交换;POP旨令的对象不能是CS, PUSH;IP不能是源也不能是目的;如果参与的操作数有两个,只能有一个;PUSK 口 POP 只能处理16位的操;存放器大小不一 ;段存放器不可以是操作数 ;不可以使用立即数 ;立即数不能是目的操作数;不可以使用立即数 ;BL 不可以作为操作数;段存放器为目的时,源不能是立即数,;代码段存放器 CS 不能为目的 ;CF 是Flag 中的一个bit ,不能如此 ;存放器大小不一 ;300 超过 0FFh,Over 8bit ;JCXZ是存储器操作数PUSH DH作数(8086/8088 )OR BL,DX AND AX,DS MUL 16AND 7FFFH,AX DIV 256 ROL CX,BL MOV ES,1234H需由通用存放器转MOV CS,AX SUB DL,CF ADC AX,AL MOV AL,300 JDXZ NEXT题2.42请指出如下指令哪些是错误的,并说明原因:MOV [SP],AX PUSH CS JMP BX+100H JMP CX ADD AL,[SI+DI] SUB [BP+DI-1000],AL ADD BH,[BL-3] ADD [BX],BX MOV AX,BX+DI LEA AX,[BX+DI] XCHG ES:[BP],AL XCHG [BP],ES答:MOV [SP],AXPUSH CS JMP BX+100H JMP CX ADD AL,[SI+DI];SP 非有效存放器间接寻址之存放器;对 ;对;对;SI 和DI 只能出现一个,与 BX, BPSUB [BP+DI-1000],AL;BL 只是一个 8bit 存放器;对;对 ;对;对;段存放器不能是操作数题2.43以下程序片段完成什么功能,可否有更简单的方法实现同样的功能:XCHG AX,[SI] XCHG AX,[DI] XCHG AX,[SI]答: 程序实现[SI]和[DI]中的内容交换;AX 中内容不变;有,如下: PUSH [SI] PUSH [DI] POP [SI] POP [DI]题2.44请比拟如下指令片段:LDS SI,[BX]MOV SI,[BX] MOV DS,[BX+2]MOV DS,[BX+2] MOV BX,[BX]答: LDS SI,[BX]MOV SI,[BX] MOV DS,[BX+2]MOV DS,[BX+2] MOV BX,[BX]第一组和第二组功能一致;第三章: Tarzan 版题3.1伪指令语句与指令语句的本质区别是什么?伪指令的主要作用是什么?ADD BH,[BL-3] ADD [BX],BX MOV AX,BX+DI LEA AX,[BX+DI] XCHG ES:[BP],AL XCHG [BP],ES;DS=[BX+2],SI=[BX];DS=[BX+2],SI=[BX];DS=[BX+2],BX=[BX]答:伪指令语句与指令语句的本质区别是指令语句有其对应的机器指令,而伪指令没有;伪指令的主要作用是指示汇编程序如何汇编源程序;题3.2汇编语言中的表达式与高级语言中的表达式有何相同点和不同点?答:汇编语言中的表达式与高级语言中的表达式的相同点是都采用运算符、操作符以及括号把常数和符合连起来;不同点是汇编语言的表达式除了数值表达式外还有地址表达式;题3.3汇编语言中数值表达式与地址表达式有何区别?答:汇编语言中数值表达式在汇编过程中由汇编程序计算出数值, 而地址表达式中局部相对地址的地方,在汇编时无法确定其确定地址;题3.4汇编语言中的变量和标号有何异同之处?答:汇编语言中的变量和标号的相同之处是都代表着一个地址;不同之处是变量表示的地址中存放的是数据,而标号表示的地址中存放的是代码;题3.5请计算如下各数值表达式的值:23H AND 45H OR 67H1234H/16+10HNOT(65535 XOR 1234H)1024 MOD 7+3LOW 1234 OR HIGH 5678H23H SHL 4"Eb" GE 4562H XOR -11234H SHR 6'a' AND (NOT ('a'-'A')'H' OR 00100000B76543Q LT 32768 XOR 765433645H AND 0FF00H答:23H AND 45H OR 67H ;67H1234H/16+10H ;133HNOT(65535 XOR 1234H) ;1234H1024 MOD 7+3 ;5LOW 1234 OR HIGH 5678H ;D6H 注意1234 不是1234H23H SHL 4 ;30H"Eb" GE 4562H XOR -1 ;01234H SHR 6 ;0048H'a' AND (NOT ('a'-'A') ;41H or 'A''H' OR 00100000B ;68H or'h'76543Q LT 32768 XOR 76543 ;题目最后的76543 有错,根据76543Q 处理:829cH 3645H AND 0FF00H ;3600H题3.6请计算如下程序片段中各地址表达式的值, 设BX= 1000H, SI= 2000H, DI = 3000H,BP= 4000H[BX+100H][DI][BP]2000H[SI]10H[BX][SI][BP-128][BX][DI-2]答:[BX+100H] ;[1100H][DI][BP] ;[7000H]2000H[SI] ;[4000H]10H[BX][SI] ;[3010H][BP-128] ;[3F80H][BX][DI-2] ;[3FFEH]题3.7设在某个程序中有如下片段,请写出每条传送指令执行后存放器AX的内容:ORG 100HVARW DW 1234H,5678HVARB DB 3,4VARD DD 12345678HBUFF DB 10 DUP⑺MESS DB 'HELLO'BEGIN: MOV AX,OFFSET VARB + OFFSET MESSMOV AX,TYPE BUFF + TYPE MESS + TYPE VARDMOV AX,SIZE VARW + SIZE BUFF + SIZE MESSMOV AX,LENGTH VARW + LENGTH VARDMOV AX,LENGTH BUFF + SIZE VARWMOV AX,TYPE BEGINMOV AX,OFFSET BEGIN答:ORG 100HVARW DW 1234H,5678HVARB DB 3,4VARD DD 12345678HBUFF DB 10 DUP(?)MESS DB 'HELLO'BEGIN: MOV AX,OFFSET VARB + OFFSET MESS ;AX=0218HMOV AX,TYPE BUFF + TYPE MESS + TYPE VARDAX=0006HMOV AX,SIZE VARW + SIZE BUFF + SIZE MESS;AX=000DH MOV AX,LENGTH VARW + LENGTH VARD ;AX=0002H MOV AX,LENGTH BUFF + SIZE VARW ;AX=000CH MOV AX,TYPE BEGIN ;AX=FFFFH MOV AX,OFFSET BEGIN;AX=0119H题3.8设如下两条指令中的符号 ABCD 是变量名,请说明这两条指令的异同.MOV AX,OFFSET ABCD LEA AX,ABCD答: 两条指令都是将 ABCD 的偏移地址放入 AX 存放器中;不同之处是OFFSETS 能取得用数据定义伪指令的变量的有效地址,而不能取得一般操 作 数的有效地址; 题3.9请指出如下指令的不明确之处,并使其明确: MOV ES:[BP],5 ADD CS:[1000H],10H DEC SS:[BX-8] JMP CS:[SI+1000H] MUL [BX+DI+2] DIV [BP-4] ;未指定存储单元属性 M OV WORD PTR ES:[BP],5 ;同上 ADD WORD PTR CS:[1000H],10H ;同上 DEC WORD PTR SS:[BX-8];无法确定段间还是段内转移 JMP WORD PTR CS:[SI+1000H]MUL [BX+DI+2] ;无法确定是 8位乘法还是16位乘法MUL WORD PTR [BX+DI+2]DIV [BP-4];同上 DIV WORD PTR [BP-4] 题3.10设在某个程序中有如下片段,请改正其中有错误的指令语句:VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678HMOV AX,VARB MOV VARD,BX MOV VARD+2,ESMOV CL,VARW+3 LES DI,VARW答: MOV ES:[BP],5ADD CS:[1000H],10H DEC SS:[BX-8] JMP CS:[SI+1000H] 答: MOV AX,VARB ;VARB 是8bit 量,应该修改 AX 至U AL or AHMOV VARD,BX ; VARD是32bit量,要分两次传MOV VARD+2,ES ;同上MOV CL,VARW+3 ;同上,CL改为CXLES DI,VARW ; VARW非32 位量,应改为VARD题3.11请举例说明伪指令ASSUME的作用.答:ASSUME的作用是声明现在开始CS存放器对应于哪个段, DS对应于哪个段,SS和ES分别对应哪个段,可以相同也可以不同;如:ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG可以根据需要重新建立对应关系;题3.12设在某个程序片段中有如下语句,请说明各符号的属性:SYMB1LABEL BYTESYMB2 EQU THIS BYTESYMB3 DW ?SYMB4 EQU BYTE PTR SYMB3答:SYMB1: BYTESYMB2: BYTESYMB3: WORDSYMB4: BYTE题3.13为什么说汇编语言中的等价语句EQU可理解为简单的宏定义?请举例说明.答:EQU可以用符号定义常数,表达式,指令助记符,字符串等;而宏定义是指定一个宏指令名,宏指令可表示相对应的程序片段.如:HELLO EQU "How are you !"与:HELLO MACRO'How are you !'ENDM题3.14设在某个程序片段中有如下语句,请说明各符号所表示的值:SYMB1 = 10SYMB2 = SYMB1*2SYMB1 = SYMB1 + SYMB2 + 4SYMB3 EQU SYMB1答:SYMB1 = 22HSYMB2 = 14HSYMB3 = 22H 题3.15请改写3.3.3的程序T3-1.ASM,使其只有一个段.答:;程序名:T3-1.ASM;功能:显示信息“ HELLO"cseg segmentassume cs:csegmess db 'HELLO',0dh,0ah,'$'start:mov ax,csegmov ds,axmov dx,offset messmov ah,9int 21hmov ah,4chint 21hcseg ends end start题3.16请说明指令“ JMP $+2 "指令的机器码中的地址差值是多少?答:2H题3.17源程序是否一定要以END语句结束?程序是否一定从代码段的偏移0开始执行?如果不是,那么如何指定?答:源程序可以不以END语句结束,不过END之后的内容汇编程序将忽略.程序不一定要从代码的偏移0开始执行,一个比拟简单的方法是利用END语句, 如END XXX程序将从XXX标号处开始执行;题3.18利用查表的方法实现代码转换有何特点?利用查表的方法求函数值有何特点?答:利用查表的方法实现代码转换的特点是:1、转换代码间不需要直接的算术或逻辑关系,只需要安排好表的组织即可;2、对于局部代码,其转换效率比拟高,主要时间用在寻址上;利用查表的方法求函数值的特点是:1、对于大局部的数学函数值的求值,直接计算困难较大,采用查表法可祢补缺乏;2、程序比拟简单;3、能够得到十进制或者十六进制格式的高精度函数值.4、函数值必须事先计算好;5、精度无法由程序限制;题3.19利用地址表实现多向分支有何特点?请举例说明.答:利用地址表实现多向分支的特点有:1、对于实现5路以上的多向分支,使用地址表既方便又高效;2、对于如何确定地址的位置,需要采用不同的方法实现;例子看书.题3.20请举例说明如何防止条件转移超出转移范围.答:如果出现条件转移超出了范围,那么可以利用无条件转移指令帮助跳转;如:cmp ax,'A' jb out_program如果超出范围:cmp ax,'A' jb out_com...out_com:jmp far ptr out_program题3.21请写一个程序片段统计存放器AX中置1的个数.答:count db ??0dh,0ah,'$'......call countAXcmp bl,9 ja sub10 jmp gosub10:sub bl,10mov count,31hgo:add bl,30h mov count+1,bl mov dx,offset count mov ah,9 int 21h mov ah,4ch int 21h 尸============================= ;入口:AX;出口:BL= AX中1的个数countAX proc mov cx,16 mov bl,0count1:shl ax,1jnc ADDAX1 add bl,1ADDAX1:loop countlretcountAX endp尸===========================题3.22设一个32位有符号数存放在DX AX中,请写一个求其补码的程序片段.答:Invert procmov bx,dxand bx,8000hcmp bx,0jz out_1 not dx not ax add ax,1 adc dx,0 or dx,8000h out_1:nop ret Invert endp题3.23写一个程序片段实现如下功能:依次重复存放器AL中的每一位,得到存放到DX存放器中.答:Expand procmov cx,7 xor dx,dxS0:shl dx,1shl dx,1shl al,1jnc CF0add dx,3hCF0:noploop S0 retExpand endp题3.24写一个程序片段实现如下功能:依次重复四次存放器结果存放到DX: AX存放器中.答:Expand procmov cx,3xor dx,dxxor bx,bxS0:shl al,1jnc CF0 16位的结果AL中的每一位,得到32位的CF0:shl dx,1shl dx,1shl dx,1shl dx,1loop S0mov cx,4S1:shl al,1jnc CF0_1add bx,0FhCF0_1:shl bx,1shl bx,1shl bx,1shl bx,1loop S1mov ax,bxretExpand endp题3.25写一个程序片段实现如下功能:把存放器AL和BL中的位依次交叉,得到的16位结果存放到DX存放器中.答:Expand procmov cx,8xor dx,dxS0:shl dx,1 shl al,1 jnc CF0add dx,1hCF0:shl dx,1shl bl,1jnc CF0_1add dx,1hCF0_1:loop S0 retExpand endp题3.26写一个优化的程序片段,实现把字符串中的小写子母变换为对应的大写子母.设字符串以0结尾.答:InvertC proc begin:mov al,mess[si]cmp al,61h jb next cmp al,7AH ja next and al,11011111b mov mess[si],al next:inc sijmp begin exit_1:nop retInvertC endp题3.27写一个优化的程序片段,统计字符串的长度.设字符串以0结尾.答:count procmov al,mess[si]cmp al,'0'jz exit_2 inc si jmp count exit_2:nopretcount endp ;si=数量题3.28写一个程序片段,滤去某个字符串中的空格符号〔ASCII码20H〕,设字符串以0结尾.答:DeleteSpace proc ;设$1=0, bx=0, Mess 为字符串首地址mov al,mess[si]cmp al,'0'jz exit_2 cmp al,'' jz next3 xchg al,mess[bx] xchg al,mess[si] inc bxnext3:inc sijmp DeleteSpaceexit_2:nopretDeleteSpace endp题3.29请写一个把两个字符串合并的例如程序.答:dseg segmentstring1 db 'Welcome to $'string2 db 'Beijing !$'dseg endscseg segmentassume cs:cseg,ds:dsegstart:mov ax,dseg mov ds,axxor bx,bx xor si,sikeepfind:mov al,string1[bx]mov al,string2[si]mov string1[bx],alcmp al,'$' jz exit inc si inc bx jmp combine exit:mov dx,offset stringlmov ah,09h int 21hmov ah,4chint 21hcseg ends end start80X86汇编语言程序设计教程(杨季文)习题答案三下(2021-12-01 09:53:32)标签:mov ascii码bl杨季文杂谈Tarzan 版题3.30请写一个可把某个字变量的值传唤为对应二进制数ASCII码串的例如程序.答:;Name : Show_hex_ascii;input : ah=Hex;output: dx='Hex'show_hex_ascii procmov dh,ahand dh,0f0h ;reserve high 4bitshr dh,4add dh,30h ;change 0-9 to '0-9'cmp dh,39hja add_dh_7dh_ok:mov dl,ahand dl,0fh ;reserve low 4bitadd dl,30h cmp dl,39h ja add_dl_7dl_ok:nop retadd_dl_7:add dl,7h ;revert A-F to 'A-F' jmp dl_okadd_dh_7:add dh,7hjmp dh_okshow_hex_ascii endp题3.31请写一个可把某个十进制数ASCII码串转换成对应非压缩BCD何压缩BCD的例如程序.答:;非压缩BCD码;Output al=非压缩BCD码TEST1 proccmp ah,'0'jb exitcmp ah,'9'ja exitsub ah,30hmov al,ahexit:nop ret TEST1 endp;压缩BCD码;Input ax=两个十进制数ASCII码;Output bl=压缩BCD码TEST2 proccmp ah,'0' jb exit cmp ah,'9' ja exit sub ah,30h mov bl,ah shl bl,4cmp al,'0'jb exitcmp al,'9'ja exit1sub al,30hadd bl,al exit1:nop retTEST2 endp题3.32请写一个可把某个十进制数ASCII码转换为对应的二进制的例如程序.答:table db '0000','0001','0010','001.,'0100','0101','0110','011.db '1000','1001’;Input bl=一个十进制数ASCII码;Output dx:ax=二进制ASCII码 ;程序未检验该十进制数是否在范围以内TEST3 proc sub bl,30h xor bh,bh shl bx,1 shl bx,1 mov dh,table[bx] mov dl,table[bx+1] mov ah,table[bx+2] mov al,table[bx+3]retTEST3endp题3.33请写出一个可把某个十六进制数ASCII码转换为对应的二进制的例如程序.答:table db '0000','0001','0010','001.,'0100','0101','0110','011.db '1000','1001','1010','1011','1100','1101','1110','1111' ......;Input bl= 一个十六进制数ASCII码;Output dx:ax=二进制ASCII码TEST3 proc cmp bl,30h jb exit1 ;小于30H的不在范围内sub bl,30hcmp bl,0Ah ;如果在9以内,开始转换0-9jb change1sub bl,0Ah cmp bl,6h ;如果在‘9' — 'A'之间,不在范围内jb exit1sub bl,6h ; 'A' =0 cmp bl,7h ;如果在‘A' — ' F'之间,开始转换jb change2cmp bl,21h ;如果大于'F',看是否在‘F'和‘a'之间jb exit1 ;如果在,那么不在范围内sub bl,20h ;'a'=0cmp bl,6h ;如果大于'f',那么不在范围内ja exitlchange2:add bl,9h ;根据table表,如果A= 0还需要加9才可以changel:xor bh,bhshl bx,1shl bx,1mov dh,table[bx]mov dl,table[bx+1]mov ah,table[bx+2]mov al,table[bx+3]exit1:retTEST3 endp题3.34请写一个实现数据块移动的例如程序.答:data segmentdata1 db 'Hello!!!..…$'....data2 db 128 dup⑺data endsxor ax,axxor bx,bxmov1:mov al,data1[bx]cmp al,'$'jz out1mov data2[bx],alinc bxjmp mov1out1:题3.35请编一个程序求从地址F000: 0000H开始的64K字节内存区域的检验和, 并转换为十六进制的数的ASCII码串.;Output: BX二字检验和TEST5 procmov ax,0F000Hmov es,axmov cx,0ffffhxor si,si xor bx,bxADD0:add bx,es:[si] inc siinc siloop add0retTEST5 endptablel db '0','1',2,'3','4',5,'6',7,'8','9' db 'A','B','C','D','E','F';Input bx=字检验和;Output dx:ax二字检验和ASCII码TEST4 proc push cxmov cx,bxpush cx mov cl,12 shr bx,cl pop cx mov dh,table1[bx]mov bx,cxand bx,0F00hpush cx mov cl,8 shr bx,cl pop cx mov dl,table1[bx]mov bx,cxand bx,00f0hpush cx mov cl,4 shr bx,clpop cxmov ah,table1[bx]mov bx,cxand bx,000fhmov al,table1[bx]mov bx,cxpop cxretTEST4 endp题3.36设已在地址F000:0000H开始的内存区域安排了100个字节的无符号8位二进制数.请编写一个程序求它们的和,并转换为对应十进制数的ASCII码串.答:;从F000:0000H开始100个byte无符号数相加TEST6 procpush cxpush axpush simov ax,0f000hmov es,axxor bx,bxxor si,sixor ax,axmov cx,100ADD2:mov al,es:[si]add bx,axinc siloop ADD2pop sipop axpop cxretTEST6endp......Dec_ASC db ' $';在数据区;Name:Convert1function: Hex convert to Dec ;Input: BX=a word of Hex ;Output: DS:Dec_ASCConvert1 procpush axpush cxpush dx mov ax,bx xor dx,dx; DX=负数的个数TEST7 procpush cx push ax push si mov ax,0f000h mov es,ax xor bx,bx xor si,si xor ax,ax xor di,di xor dx,dxmov cx,1024mov cx,2710hdiv cx 2710H=10000 add ax,30hmov dec_asc[0],almov ax,dx xordx,dx movcx,3E8h div cx;[0]二万位 ;3E8H=1000 add ax,30hmov dec_asc[1],almov ax,dxmov cl,64hdiv cl;[1]二千位 ;64H=100 add al,30hmov dec_asc[2],almov al,ahmov ah,0mov cl,0ah;[2]二百位;0A=10 div cladd ax,3030hmov dec_asc[3],almov dec_asc[4],ahpop dx;[3]二十位 ;[4]=个位 pop cxpop axretConvert1 endp题3.37设已在地址F000: 0000H 开始的内存区域安排了1024个16位有符号数.请编写 个程序统计其中的正数、负数和零的个数,并分别转换为对应的十进制数的ASCII 码串. 答: ;从F000:0000H 开始1024个 Word 有符号数统计;output Di=0 的个数 ; Bx=正数的个数Nextl:mov ax,es:[si]cmp ax,0jnz check_P inc di jmp next2 check_p:shl ax,1jnc ADD_P inc dx jmp next2 ADD_P:inc bx nex⑵inc si inc si loop Next1pop si pop ax pop cx retTEST7 endp分别call convert1,并保存到不同的地方即可;题3.38设从地址F000: 0000H开始的内存区域是缓冲区, 存放了一组单字节的正数或负数, 以0结尾.请编写一个程序确定其中最大的正数和最小的负数.答:;从F000:0000H开始以0结尾的单字节正数负数统计;output bh=最大的正数; bl=最小的负数TEST8 proc xor bx,bx xor si,si mov ax,0F000h mov es,axnext9:mov al,es:[si]cmp al,0jz exit9test al,80hjnz Neg_1 cmp al,bh jb next7 xchg al,bh next7:inc sijmp next9Neg_1:cmp al,bljg next8xchg al,bl next8:inc sijmp next9 exit9:retTEST8 endp题3.39设从地址F000: 0000H开始的1K字节内存区域是缓冲区.请写一个可收集该区域内所有子串“ OK〞开始地址的程序答:;从F000:0000H开始1K字节内存区域,统计子串“OK〞开始地址;output 开始地址=ADDRESSTEST9 proc。
《汇编语言程序设计》教案附:习题参考答案《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 章基础知识41.1进位计数制与不同基数的数之间的转换41.2二进制数和十六进制数的运算61.3计算机中数和字符的表示61.4几种基本的逻辑运算7第 2 章80X86计算机组织72.180X86微处理器72.2基于微处理器的计算机系统构成82.3中央处理机82.4存储器102.5外部设备11第 3 章80X86的指令系统和寻址方式113.180X86的寻址方式113.2程序占有的空间和执行时间133.380X86的指令系统13第 4 章汇编语言程序格式294.1汇编程序功能294.2伪操作304.3汇编语言程序格式334.4汇编语言程序的上机过程36第 5 章循环与分支程序设计385.1循环程序设计385.2分支程序设计395.3如何在实模式下发挥80386及其后继机型的优势39第 6 章子程序结构406.1子程序的设计方法406.2子程序的嵌套426.3子程序举例42第7 章高级汇编语言技术427.1宏汇编427.2重复汇编447.3条件汇编44第8 章输入/输出程序设计458.1I/O设备的数据传送方式458.2程序直接控制I/O方式468.3中断传送方式46第9 章BIOS和DOS中断499.1键盘I/O499.2显示器I/O519.3打印机I/O529.4串行通信口I/O53第10 章图形与发声系统的程序设计5410.1显示方式5410.2视频显示存储器5410.3 EGA/VGA 图形程序设计5510.4 通用发声程序5610.5 乐曲程序57第 11 章 磁盘文件存取技术5711.1 磁盘的记录方式5811.2 文件代号式磁盘存取5911.3 字符设备的文件代号式I/O6011.4 BIOS 磁盘存取功能61附录:《IBM —PC 汇编语言程序设计》习题参考答案61第 一 章.习题61第 二 章.习题62第 三 章.习题63第 四 章.习题77第 五 章.习题82第 六 章.习题100第 七 章.习题113第 八 章.习题119第 九 章.习题125第 十 章.习题128第 十一 章.习题138第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
汇编语言程序设计(第二版)课后习题答案第二章1.解答:有256个2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元E51E3C2A3.解答:30022H字节单元内容:ABH30024H字节单元内容:EFH30021H字单元内容:AB34H30022H字单元内容:CDABH4.解答:这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址5.解答:CS+IP第一个字的物理地址为:0AAA40H6.解答:条件标志OF,SF,ZF,CF,的值依次为:0,0,0,07.下列操作可使用那些寄存器?(1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH,AL等(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS,DS,ES,SS(5)表示运算结果为O FLAGS(6)将要执行的指令地址IP(7)将要从堆栈取出数据的地址BP,SP,SS8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9.一一对应;5--A4--B2--C3--D12--E9--F11--G10--H13--I8--J7--K6---L1--M15--N14--O第三章1.(1)立即寻址没有(2)直接寻址7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5B4H(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,(2 1200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。
80x86汇编语言程序设计教程答案【篇一:《80x86汇编语言程序设计》教案及答案(第二版)】汇编语言程序设计》(第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 章基础知识 ....................................................................................................... .. (1)1.1 进位计数制与不同基数的数之间的转换 (1)1.2 二进制数和十六进制数的运算 ....................................................................................................... .. (2)1.3 计算机中数和字符的表示 ....................................................................................................... . (3)1.4 几种基本的逻辑运算 ....................................................................................................... (3)第 2 章 80x86计算机组织 ....................................................................................................... . (4)2.1 80x86微处理器 ....................................................................................................... . (4)2.2 基于微处理器的计算机系统构成 ....................................................................................................... . (4)2.3 中央处理机 ....................................................................................................... . (5)2.4 存储器 ....................................................................................................... (6)2.5 外部设备 ....................................................................................................... .. (7)第 3 章 80x86的指令系统和寻址方式 ....................................................................................................... .. (8)3.1 80x86的寻址方式 ....................................................................................................... (8)3.2 程序占有的空间和执行时间 ....................................................................................................... . (10)3.3 80x86的指令系统 .......................................................................................... .. (10)第 4 章汇编语言程序格式 ....................................................................................................... .. (26)4.1 汇编程序功能 ....................................................................................................... . (26)4.2 伪操作 ....................................................................................................... . (26)4.3 汇编语言程序格式 ....................................................................................................... .. (30)4.4 汇编语言程序的上机过程 ....................................................................................................... .. (33)第 5 章循环与分支程序设计 ....................................................................................................... . (35)5.1 循环程序设计 ....................................................................................................... . (35)5.2 分支程序设计 ....................................................................................................... . (36)5.3 如何在实模式下发挥80386及其后继机型的优势 (36)第 6 章子程序结构 ....................................................................................................... .. (37)6.1 子程序的设计方法 ....................................................................................................... .. (37)6.2 子程序的嵌套 ....................................................................................................... . (38)6.3 子程序举例 ....................................................................................................... .. (38)第 7 章高级汇编语言技术 ....................................................................................................... .. (39)7.1 宏汇编 ....................................................................................................... . (39)7.2 重复汇编 ....................................................................................................... . (40)7.3 条件汇编 ....................................................................................................... . (41)第 8 章输入/输出程序设计 ....................................................................................................... . (42)8.1 i/o设备的数据传送方式 ....................................................................................................... .. (42)8.2 程序直接控制i/o方式 ....................................................................................................... . (43)8.3 中断传送方式 ....................................................................................................... . (43)第 9 章 bios和dos中断 ....................................................................................................... . (46)9.1 键盘i/o ....................................................................................................... .. (46)9.2 显示器i/o ....................................................................................................... . (48)9.3 打印机i/o ....................................................................................................... . (49)9.4 串行通信口i/o ....................................................................................................... .. (50)第 10 章图形与发声系统的程序设计 ....................................................................................................... ........... 51 10.1 显示方 (51)10.2 视频显示存储器 ....................................................................................................... .................................. 51 10.3 ega/vga图形程序设计 ....................................................................................................... .................... 52 10.4 通用发声程序 ....................................................................................................... ...................................... 53 10.5 乐曲程序 ....................................................................................................... . (54)第 11 章磁盘文件存取技术 ....................................................................................................... ........................... 55 11.1 磁盘的记录方式 ....................................................................................................... .................................. 55 11.2 文件代号式磁盘存取 ....................................................................................................... .......................... 56 11.3 字符设备的文件代号式i/o ....................................................................................................... ................ 57 11.4 bios磁盘存取功能 ....................................................................................................... .. (58)附录:《ibm—pc汇编语言程序设计》习题参考答案 ............................................................................... 59 第一章.第二章.第三章.第四章.第五章.第六章.第七章.第八章.第九章.第十章.第十一章. 习题 ....................................................................................................... ................. 59 习................. 60 习题 ....................................................................................................... ................. 61 习题 ....................................................................................................... ................. 74 习题 ....................................................................................................... ................. 79 习题 ....................................................................................................... ................. 97 习题 ....................................................................................................... ............... 110 习题 ....................................................................................................... ............... 117 习题 ....................................................................................................... ............... 122 习题 ....................................................................................................... ............... 125 习题 ....................................................................................................... (136)错误!未指定书签。
汇编语言程序设计(第二版)课后习题答案第二章1.解答:有256个2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元E51E3C2A3.解答:30022H字节单元内容:ABH30024H字节单元内容:EFH30021H字单元内容:AB34H30022H字单元内容:CDABH4.解答:这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址5.解答:CS+IP第一个字的物理地址为:0AAA40H6.解答:条件标志OF,SF,ZF,CF,的值依次为:0,0,0,07.下列操作可使用那些寄存器?(1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH,AL等(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS,DS,ES,SS(5)表示运算结果为O FLAGS(6)将要执行的指令地址IP(7)将要从堆栈取出数据的地址BP,SP,SS8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9.一一对应;5--A4--B2--C3--D12--E9--F11--G10--H13--I8--J7--K6---L1--M15--N14--O第三章1.(1)立即寻址没有(2)直接寻址7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5B4H(6)基址变址寻址8E18H(7)相对基址变址004FH2.根据下列要求,写出相应的汇编指令。
(1)ADD DX,BX(2)ADDAL,[BX][SI](3)ADD[BX][0B2H],CX(4)MOV AX,2A59H ADD[0524H],AX(5)ADDAL,0B5H3.(1)寄存器间接寻址MOVBX,OFFSET[BLOCK][0AH]MOV DX,[BX](2)寄存器相对寻址MOV SI,OAHMOVDX,[BLOCK][SI](3)基址变址寻址MOVBX,BLOCKMOVSI,OAHMOVDX,[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寄存器的内容。
第2章80x86编程的硬件基础本章要点:80x86的寄存器的分类、作用以及有关寄存器的特定用法,内存及其分段,逻辑地址和物理地址,I/0端口地址。
一、单项选择题2.1.1 80x86的寄存器中,8位的寄存器共有(C)个。
A. 4B. 6C. 8D. 102.1.2 总是指向下一条要执行的指令,由此实现程序的自动执行的寄存器是(B)。
A. BPB. IPC. SPD. IR2.1.3 标志寄存器用来保存算术逻辑运算的结果状态,其中用于表示当前运算结果是否为0的标志位是(D)。
A. CFB. OFC. SFD. ZF2.1.4 80x86CPU执行算术运算时,FLAGS共有(B)个标志位受影响。
A. 5B. 6C. 7D. 92.1.5 一个16位相对位移的范围是(C)。
A. -128~127B. 0~65535C. 8000H~7FFFHD. 8000H~FFFFH2.1.6 如果某一存储单元的物理地址为12345H,则它的逻辑地址为(D):0345H。
A. 12000HB. 0012HC. 0120HD. 1200H2.1.7 通常我们所说的32位机,是指这种计算机的CPU(C)。
A. 由32个运算器组成B. 包含32个寄存器C. 能够同时处理32位二进制数D. 一共有32个运算器和控制器2.1.8 下列寄存器组中,用于提供段内偏移地址的寄存器组是(B)。
A. AX,BX,CX,DXB. BX,BP,SI,DIC. SP,BP,IP,DXD. CS,DS,ES,SS2.1.9 在80x86系统中,约定用于形成堆栈段数据物理地址的寄存器有(B)。
A. DS,DX,BXB. SS,BP,SPC. SS,BX,BPD. DS,BP,SP2.1.10在程序的运行过程中,确定下一个指令的物理地址的计算表达式是(C)。
A. D S×16+SIB. E S×16+DIC. CS×16+IPD. S S×16+SP二、填空题2.2.1 在80x86的16位寄存器中,可以用来指示存储器地址的有_10__个,它们分别是__BX BP SI DI IP SP DS CS ES SS____________________;既可以用来指示存储器地址又可以用来存放操作数的有__5__个,它们分别是__BX BP SI DI SP____________。
习题参考答案1第1章1-1汇编的主要功能:输入:汇编语言源文件输出:目标文件处理:对源文件进行语法检查;将符号指令翻译为机器指令。
连接的主要功能:输入:1个或多个目标文件与库文件输出:可执行文件处理:浮动地址的重定位;多模块的连接。
1-2 (1)2EH (2)0D2H (3)0FFH(4)80H (5)7FH (6)0FEH1-3 (1)7FH (2)0FF80H (3)0FFFFH285286(4)0FFD2H (5)8000H (6)0FFH1-4 无符号数范围:0~2n-1;带符号数范围:-2n−1~2n−1-11-5 (1)压缩BCD码:58H;非压缩BCD码:x5x8H。
(2)压缩BCD码:1624H;非压缩BCD码:x1x6x2x4H。
1-6 (1)字符'1'的ASCII码;十进制数31的压缩BCD码;十进制数1的非压缩BCD码;十进制数49的十六进制表示。
(2)十进制数-1的8位二进制补码表示;带符号数255的16位二进制补码表示;无符号数255的8位二进制形式。
(3)十进制数-1的16位二进制补码表示;带符号数65535的32位二进制补码表示;无符号数65535的16位二进制形式。
1-7 (1)作为无符号数为159,等值的16位和32位形式均为9FH;作为带符号数为-97,等值的16位和32位形式分别为0FF9FH与0FFFFFF9FH。
(2)作为无符号数和带符号数均为104,等值的16位和32位形式均为68H。
(3)作为无符号数为192,等值的16位和32位形式均为0C0H;作为带符号数为-64,等值的16位和32位形式分别为0FFC0H与0FFFFFFC0H。
1-8 (1)AND 0FH (2)OR 30H(3)右移4位可得高位的值;将原值AND 0FH可得低位的值。
(4)XOR 00101010B(5)AND 8000H,若结果为0,则是正数,否则为负数。
第2章2-1 系统总线是CPU与内存和I/O子系统之间进行数据交换的通道,包括数据总线、地址总线和控制总线,分别负责在CPU与内存和I/O子系统之间传送数据、地址和控制信息。
其中,数据总线决定了CPU每次存取数据的最大位数;地址总线决定了系统的最大可编址空间;控制总线用来控制CPU与内存和I/O设备之间的数据传送方式。
2-2 8位通用寄存器8个:AH,AL,BH,BL,CH,CL,DH和DL。
16位通用寄存器8个:AX,BX,CX,DX,SI,DI,BP和SP。
32位通用寄存器8个:EAX,EBX,ECX,EDX,ESI,EDI,EBP和ESP。
段寄存器6个:CS,DS,SS,ES,FS和GS。
2-3 IP包含要执行的下一条指令的偏移地址;SP包含堆栈段栈顶的偏移地址;段寄存器用来存放16位段地址。
通常,CS存放当前代码段的段地址,SS存放当前堆栈段的段地址,DS、ES、FS和GS用来存放数据段的段地址。
2-4 因为段内偏移地址是16位,故每个段最大只能216B,即64KB。
2-5 物理地址= 段地址×16 + 偏移地址。
给定逻辑地址,可得到唯一的物理地址;每个物理地址可由不同的逻辑地址描述。
例如,逻辑地址0200:1200H对应唯一的物理地址03200H,但该物理地址又可由逻辑地址0320:0000H,0210:1100H和0000:3200H等来描述。
2872882-6 实模式的主要特点如下。
●与8086兼容,只有低20条地址线有效,只能寻址第一个1MB的内存空间。
●采用内存分段方式,程序所使用的逻辑地址为16位段地址:16位偏移地址,每段≤64KB。
20位物理地址由段地址左移4位加偏移地址得到。
●CPU总是从地址CS:IP处取指令,EIP的高16位为0。
●SS:SP表示堆栈段的栈顶地址,ESP的高16位为0。
●对于32位80x86 CPU,程序可以使用32位寄存器和32位操作数,但采用32位寄存器表示偏移地址时,只使用低16位,高16位为0。
2-7 首字单元地址:23A10H;末字单元地址:23A1EH2-8 这些数在内存的存放情况如下:10006H10005H10004H10003H10002H10001H10000H2-9 (1)CF = 1 OF = 0 SF = 0 ZF = 1 (2)CF = 0 OF = 1 SF = 1 ZF = 0 (3)CF = 1 OF = 1 SF = 0 ZF = 1 (4)CF = 0 OF = 0 SF = 1 ZF = 02-10 (1)CF = 0 OF = 0 SF = 0 ZF = 0 (2)CF = 0 OF = 1 SF = 0 ZF = 0 (3)CF = 1 OF = 0 SF = 1 ZF = 0 (4)CF = 1 OF = 1 SF = 1 ZF = 0第3章3-1 (1)SS (2)CS (3)DS (4)FS(5)SS (6)DS (7)DS (8)ES3-2 (1)正确(2)类型不匹配(3)两个操作数不能同时是内存操作数(4)没有[esp][eax*3]这种操作数形式(5)正确(6)CS不能作为目的操作数(7)类型不确定(8)没有[sp]这种操作数形式(9)条件转移指令的操作数只能是标号(10)正确(11)不能将立即数送段寄存器(12)没有bx+2这种操作数形式3-3 (1)27feh (2)2a00h (3)2802h (4)2801h(5)27feh(段内调用)或27fch(段间调用)(6)2802h(段内返回)或2804h(段间返回)(7)27fch (8)2804h3-4 DEC不影响CF。
3-5 不能。
转移类指令(如JMP,Jcc,LOOP,CALL及RET等)的执行会改变IP的值。
3-6 无符号数比较:(1)ZF = 1 (2)ZF = 0 (3)CF = 1 (4)CF = 1 或ZF = 1289290 (5)CF = 0 且ZF = 0 (6)CF = 0带符号数比较:(1)ZF = 1 (2)ZF = 0 (3)SF <> OF (4)SF <> OF 或ZF = 1 (5)SF = OF 且ZF = 0 (6)SF= OF3-7 CALL指令执行的操作:(1)返回地址进栈。
段间调用:CS与IP(下一条指令的地址)依次进栈。
段内调用:IP(下一条指令的16位偏移地址)进栈。
(2)转移到过程的第1条指令去执行。
段间调用:根据操作数,将32位分段地址送CS:IP。
段内调用:根据操作数,将16位偏移地址送IP。
RET指令执行的操作:返回地址出栈,从而实现转移到返回地址处。
段间返回:POP 1个双字到CS:IP。
段内返回:POP 1个字到IP。
3-8 AX的值将是返回地址的16位偏移地址。
3-9 (1)除数为0。
(2)除数太小,被除数太大,导致商溢出。
3-10 (1)cbw (2)cwd (3)cdq (4)bt ax, 03-11(1)mov ah, 0add ax, bx(2)cbwadd ax, bx(3)movsx eax, aladd eax, ebx3-12 将DX:AX中的双字数右移4位。
3-13 指令AL CF OF SF ZFxor al, al 0 0 0 0 1mov al, 255 0ffh 0 0 0 1inc al 0 0 0 0 1not al 0ffh 0 0 0 1shl al, 1 0feh 1 0 1 0cmp al, 10 0feh 0 0 1 0sub al, 7fh 7fh 0 1 0 0shl al, 1 0feh 0 1 1 03-14(1)jcxz donenext: mov bl, [si]mov es:[di], blinc siinc diloop nextdone:(2)jcxz donenext: mov es:[di], eaxsub di, 4loop nextdone:(3)jcxz donenext: mov ax, [si]cmp ax, es:[di]pushfadd si, 2add di, 2popfloope nextdone:3-15 将AX与DX中的4位十进制数对应的压缩BCD码相加,结果存入AX。
例如,若AX = 1234H,DX = 5678H,则结果AX = 6912H。
3-16291292 (1)mov bl, aland bl, 0fhmov bh, alshr bh, 4 (2)shl ax, 1rcl bx, 1rcl cx, 1 (3)cmp al, 10jge setcfcmp al, -10jle setcfclcjmp exit setcf: stcexit:(4)cmp eax, ebxjbe nextxchg eax, ebx next: cmp eax, ecxjbe donexchg eax, ecx done:(5)mov cx, axxor cx, bxtest cx, 1jz exittest bx, 1jz exitxchg ax, bx exit:(6)mov dx, 0shl ax, 1rcl dx, 1mov bx, axmov cx, dxshl ax, 1rcl dx, 1shl ax, 1rcl dx, 1add ax, bxadc dx, cx (7)mov al, xcbwshl ax, 2sub ax, 5mov bx, axmov al, xsar al, 1cbwadd ax, bx (8)mov ax, 0mov cx, 100 next: add ax, cxloop next第4章4-1 指令是程序运行时由CPU执行的,在汇编后由对应的机器代码所取代;而伪指令是不可执行的,只是由汇编器处理的命令。
指令与机器密切相关,指令系统是由CPU本身确定的;而伪指令与机器无关,只与汇编器有关。
4-2 标号表示指令的起始地址,可作为转移类指令的操作数,表示转向地址;变量是用来定义数据的,可作为指令的内存操作数。
JMP L ; 直接转移,转移到标号L所在地址JMP X ; 段内间接转移,目标的偏移地址为X的值(字)4-3(1)源程序的编辑。
输出文件:源程序文件.asm。
(2)源程序的汇编。
输入文件:源程序文件。
输出文件:●无错:目标文件.obj,列表文件等。
●有错:错误信息,列表文件。
(3)目标文件的连接。
输入文件:目标文件与库文件。
输出文件:293294●无错:可执行文件.exe,映像文件等。
●有错:错误信息。
(4)可执行文件的试运行。
(5)可执行文件的调试。
4-4 (1)AX的值为地址WVar + 1处的1个字。