您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 80X86汇编语言程序设计教程+课后习题答案(清华大学版)
第二章答案Tarzan版题2.18086/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的内容:MOVAX,1234HMOVAL,98HMOVAH,76HADDAL,81HSUBAL,35HADDAL,AHADCAH,ALADDAX,0D2HSUBAX,0FFH答:MOVAX,1234HAX=1234HMOVAL,98HAX=1298HMOVAH,76HAX=7698HADDAL,81HAX=7619HSUBAL,35HAX=76E4HADDAL,AHAX=765AHADCAH,ALAX=D15AHADDAX,0D2HAX=D22CHSUBAX,0FFHAX=D12DH题2.48086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答:8086/8088标志寄存器中定义了9个标志,如下:CF:CarryFlagZF:ZeroFlagSF:SignFlagOF:OverflowFlagPF:ParityFlagAF:AuxiliaryCarryFlagDF:DirectionFlagIF:Interrupt-enableFlagTF:TrapFlag这些标志可分为两类,分别为:1、运算结果标志;2、状态控制标志;采用指令SAHF可把AH中的指定位送至标志寄存器低8位SF、ZF、AF、PF、CF;采用CLC可清除CF,置CF到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.68086/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位物理地址可以表示为:物理地址=段值×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.128086/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请说明如下指令中源操作数的寻址方式,并作相互比较:MOVBX,[1234H]MOVBX,1234HMOVDX,BXMOVDX,[BX]MOVDX,[BX+1234H]MOVDX,[BX+DI]MOVDX,[BX+DI+1234H]答:MOVBX,[1234H];直接寻址MOVBX,1234H:立即寻址MOVDX,BX:寄存器寻址MOVDX,[BX]:寄存器间接寻址MOVDX,[BX+1234H]:寄存器相对寻址MOVDX,[BX+DI]:基址加变址寻址MOVDX,[BX+DI+1234H]:相对基址加变址寻址题2.168086/8088提供了灵活多样的寻址方式,如何适当的选择寻址方式?答:每种寻址方式都有其特点,首先应该掌握不同寻址方式之间的区别,以及适用的范围,结合程序中的需要进行灵活选择。题2.17设想一下这些寻址方式如何支持高级语言的多种数据结构?答:自己设想!题2.18为什么目标操作数不能采用立即寻址方式?答:立即寻址表示是一个操作数,并非一个存储空间,作为目标操作数是不合适的;题2.19处理器的通用寄存器是否越多越好?通用寄存器不够用怎么办?答:处理器的通用寄存器并非越多越好,因为如果处理器的通用寄存器数量太多,势必造成处理器的成本增加,同时也增加了处理器设计的复杂度;如果通用寄存器不够用,应该采用内存中的存储单元代替,不过速度上要有所牺牲;题2.20哪些存储器寻址方式可能导致有效地址超出64K的范围?8086/8088如何处理这种情况?答:寄存器相对寻址,基址加变址寻址,相对基址加变址寻址这三种寻址方式有可能导致有效地址超出64K的范围,8086/8088将取其64K的模进行访问;题2.21什么情况下根据段值和偏移确定的存储单元地址会超出1M?8086/8088如何处理这种情况?答:当物理地址的计算超过FFFFFH时,存储单元地址会超出1M,8086/8088将取其1M的模覆盖存取;题2.228086/8088的指令集可分为哪6个子集?答:8086/8088的指令集可分为以下6个子集:1、数据传输2、算术运算3、逻辑运算4、串操作5、程序控制6、处理器控制题2.238086/8088的指令集合中,最长的指令有几个字节?最短的指令有几个字节?答:8086/8088的指令集合中,最长的指令4个字节,最短的指令2个字节;MOVAX,[BX+SI+1234H]题2.248086/8088的算术逻辑运算指令最多一次处理多少二进制位?当欲处理的数据长度超出该范围怎么办?答:8086/8088的算术逻辑运算指令最多一次处理16bit的二进制位;如果处理的数据长度超出则分成若干部分进行逻辑运算,最后进行整合;题2.25如何时序数据段和代码段相同?答:将数据段的内容写入代码段中,并将代码段的段值赋给DS即可;题2.26通常情况下源操作数和目的操作数不能同时是存储器操作数。请给出把存储器操作数甲送到存储器操作数乙的两种方法。答:法一:MOVAX,[BX]MOV[SI],AXDS:[BX]=甲,DS:[SI]=乙法二:MOVAX,[BX]XCHGAX,[SI]法三:PUSHWORDPTR[BX]POPWORDPTR[SI]题2.27请用一条指令实现把BX的内容加上123并把和送到寄存器AX。答:LEAAX,[BX+123H]题2.28堆栈有哪些用途?请举例说明。答:堆栈的用途主要有:1、现场和返回地址的保护;MOVAX,OFFSETADDRESSPUSHAXJMPXXX...RET2、寄存器内容的保护;PUSHAXPUSHBX...POPBXPOPAX3、传递参数;PUSH[BX]CALLXXX...XXX:POPAX...4、存储局部变量;PUSHDSPUSHCSPOPDS...POPDS题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、常作为子程序的出口参数;如DOS磁盘文件管理功能调用等;CF清0的方法:法一:CLC法二:ADDAX,0FFFFH法三:CMPAX,0题2.31请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态。MOVAL,89HADDAL,ALADDAL,9DHCMPAL,0BCHSUBAL,ALDECALINCAL答:INSTRUCTIONCFZFSFOFPFAFMOVAL,89H000000ADDAL,AL100111ADDAL,9DH001010CMPAL,0BCH101010SUBAL,AL010010DECAL001011INCAL010011题2.32什么是除法溢出?如何解决16位被除数8位除数可能产生的溢出?答:除法溢出是指除数如果是0,或者在8位除数时商超过8位,或者在16位除时商超过16位,则认为是除法溢出,引起0中断;首先要确定8位除数不能为0,其次要确定商的最大值不能超过8位,如果超过8位,则可采用16位的除法;题2.33请写出如下程序片段中每条逻辑运算指令执行后标志ZF、SF、PF的状态:MOVAL,45HANDAL,0FHORAL,0C3HXORAL,AL答:INSTRUCTIONZFSFPFMOVAL,45H000ANDAL,0FH001ORAL,0C3H010XORAL,AL101题2.34“MOVAX,0”可寄存器AX清0。另外再写出三条可使寄存器AX清0的指令。答:法一:XORAX,AX法二:ANDAX,0法三:SUBAX,AX题2.35请写出如下程序片段中每条移位指令执行后标志CF、ZF、SF和PF的状态。MOVAL,84HSARAL,1SHRAL,1RORAL,1RCLAL,1SHLAL,1ROLAL,1答:INSTRUCTIONCFZFSFPFMOVAL,84H0000SARAL,10010SHRAL,10000RORAL,11000(该命令不影响SF位)RCLAL,11000SHL
本文标题:80X86汇编语言程序设计教程+课后习题答案(清华大学版)
链接地址:https://www.777doc.com/doc-3165741 .html