题2.1 8086/8088 通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门的用途?哪些寄存器可作为存储器寻址方式的指针寄存器?
答:8086、8088通用寄存器既可用存储数据,也可用于存放运算的中间值、运算结果。8个通用寄存器的专门用途如下:
AX:字乘法、字除法、字I/O、累加器
AL:字节乘法、字节除法、字节I/0、十进制算术运算
AH:字节乘法、字节除法
BX: 存储器指针
CX:串操作、循环控制中的计数器
CL: 移位计数器
DX:字乘法、字除法、间接I/0
SI: 存储器指针(串操作源指针)
DI:存储器指针(串操作目的指针)
BP:存储器指针(默认为堆栈段)
SP:指令指针
可作为存储器寻址方式指针寄存器为:BX、SI、DI、BP
题2.2 从程序员的角度看,8086/8088有多少个可访问的16位寄存器?有多少个可访问的8位寄存器?
答:AX,BX,CX,DX,SI,DI,BP,SP,DS,CS,ES,SS,IP,FLAG。共14个16位寄存器。AH,AL,BH,BL,CH,CL,DH,DL共8个8位寄存器。
题2.3 寄存器AX与寄存器AH和AL的关系如何?请写出如下程序片段中每条指令执行后寄存器AX的内容:
MOV AX,1234H AX=1234H
MOV AL,98H AX=1298H
MOV AH,76H AX=7698H
ADD AL,81H AX=7619H
SUB AL,35H AX=76E4H
ADD AL,AH AX=765AH
ADC AH,AL AX=D15AH
ADD AX,0D2H AX=D22CH
SUB AX,0FFH AX=D12DH
题:2.4 8086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志状态?
答:1:运算结果标志:
OF,SF,ZF,AF,PF,CF
2:状态控制标志:
DF,IF,TF
改变标志状态:SAHF,STC,CLC,STD,CLD,STI,CLI
题:2.5请说说标志CF和标志OF的差异。
答:CF指无符号数运算结果最高位有进位或借位CF置1,OF是指有符号数运算超出有效范围即OF置1
题:2.6 8086/8088如何寻址1M字节的存储器物理地址空间?在划分段时必须满足的两个条件是什么?最多可把1M字节空间划分成几个段?最少可把1M字节地址空间划分成几个段?
答:8086/8088通过存储器分段方式寻址1M字节地址空间,在划分段时必须满足一、段的起始地址必须是16的倍数 二、段最大可划分64K个逻辑段,最少也可划分16个逻辑段。
题:2.7 在8086/8088上运行的程序某一时刻最多可访问几个段?程序最多可具有多少个段?程序至少有几个段?
答:某一时刻最多可访问四个段,程序最多可具有四个段,至少有1个代码段
题:2.8 存储单元的逻辑地址如何表示?存储单元的20位物理地址如何构成?
答:存储单元的逻辑地址用段地址+偏移地址构成。20位的物理地址由16位段地址左移四位再加上偏移地址构成。
题2.9 当段重叠时,一个存储单元的地址可表示成多个逻辑地址。请问物理地址12345可表示多少个不同的逻辑地址?偏移最大的逻辑地址是什么?偏移最小的逻辑地址是什么?
答:12345H可表示成1000H个不同的逻辑段地址,偏移最大的逻辑地址是235:0FFF5H,偏移最小的逻辑地址是1234:5H
题:2.10 为什么称CS为代码段寄存器?为什么称SS为堆栈段寄存器?
答:CS用于存放代码段的段地址配合指令指针用于执行指令,SS用于存放堆栈段段地址,配合堆栈指针SP用于对堆栈段进行操作。
题:2.11 请举例说明何为段前缀超越。什么场合下要使用段前缀超越?
答:段前缀超越为寄存器或存储器寻址操作指定段寄存器,从而实现段与段之间的切换,在进行寄存器或存储器方式寻址是要使用除默认段之外的其它段都应使用段前缀超越。
题:2.12 8086/8088的基本寻址方式可分为哪三类?它们说明了什么?
答:8086/8088的基本寻址方式可分为立即寻址、寄存器寻址、存储器寻址三类,立即寻址:即操作数位于代码段操作指令之后,寄存器寻址:即操作数的地址或有效地址,偏移地址位于CPU的寄存器中;存储器寻址:即操作数的有效地址位于存储器中,须使用存储器寻址方式获得操作数的物理地址。
题:2.13 存储器地址方式可分为哪几种?何为存储单元的有效地址?
答:寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址。存储单元的有效地址为16位无符号数,由段地址:偏移地址组成。
题:2.14 什么场合下缺省的段寄存器是SS?为什么要这样安排?
答:在使用寄存器BP寻址操作时或进行堆栈操作时使用堆栈指针SP默认使用堆栈段配合进行堆栈操作。
题:2.15 请说明如下指令中源操作数的寻址方式,并作相互比较:
MOV BX,[1234H] 直接寻址,默认段为DS,偏移位于存储器中,逻辑地址为DS:1234H
MOV BX,1234H 立即寻址,操作数位于代码段中的指令后
MOV DX,BX 寄存器寻址,操作数位于BX寄存器中
MOV DX,[BX] 寄存器间址,操作数的有效地址位于BX寄存器中,默认DS,逻辑地址:DS:[BX]
MOV DX,[BX+1234H] 寄存器相对寻址,操作数的有效地址由BX的内容和偏移组成,逻辑地址:DS:[BX+1234H]
MOV DX,[BX+DI] 基址加变址寻址
MOV DX,[BX+DI+1234H]
题 2.16 8086/8088提供了灵活多样的寻址方式。如何恰当的选择寻址方式?
答:根据实际情况,针对各种寻址方式的使和范围,和根据程序的要求合适的选择寻址方式。
题 2.17 设想一下这些寻址方式如何支持高级语的多种数据结构。
答:比如C语言的二维数组对应基址变址对址方式。
题:2.18 为什么目标操作数不能采用立即寻址方式?
答:因为立即寻址的操作数位于代码段,规定代码段CS不能为目的操作数。立即寻址为一个数,并非存储空间,目标操作数要求是一个存储空间。
题:2.19 处理器内的通用寄存器是否越多越好?通用寄存器不够用怎么办?
答:错,通用寄存器越多CPU的复杂度越高,成本越高,但通用寄存器位于CPU内部,存取速度最快,通用寄存器不够用就使用内存中的存储单元替代。
题:2.20 哪些存储器寻址方式可能导致有效地址超出64K的范围?8086/8088如何处理这种情况?
答:寄存器相对寻址、基址加变址寻址、相对基址加变址寻址,8086/8088对有效地址超出64K范围的,就取64K的模。
题:2.21 什么情况下根据段值和偏移确定的存储单元地址会超出1M?8086/8088如何处理这种情况?
答:当根据段值和偏移地址所得的存储单元的地址大于FFFFFH时存储单元的地址超出1M,8086/8088会取1M字节的模。、
题:2.22 8086/8088的指令集可分为哪6个子集?
答:分为数据传送指令、算术运算、逻辑运算、串操作、程序控制、处理器控制。
题:2.23 8086/8088指令集合中,最长的指令有几个字节?最短的指令有几个字节?
答:8086/8088指令集合中,最长的指令有4个字节,最短的指令有2个字节。
题:2.24 8086/8088的算术逻辑运算指令最多一次处理多少2进制位?当欲处理的数据长度超出该范围怎么办?
答:8086/8088的算术逻辑运算指令最多一次处理16个2进制位。当处理的数据长度超出该范围则分开运算,最后合并。
题:2.25 如何实现使数据段与代码段相同?
答:在代码段中写入数据段的内容,再将代码段的段值赋给数据段。
题:2.26 通常情况下源操作数和目的操作数不能同时是存储器操作数。请给出把存储器操作数甲送到存储器操作数乙的两种方法。
答:1、MOV AX,J;MOV Y,AX; 2,MOV AX,J, XCHG AX,Y;3、PUSH J,POP Y;[设J=DS:[BX],Y=DS:[SI] ]
题:2.27 请用一条指令实现把BX的内容加上123并把和送到寄存器AX。
答:LEA AX,[BX+123]。
题 2.28 堆栈有哪些用途?请举例说明。
答:1、现场和返回地址的保护、寄存器内容的保护、传递数据、存储局部变理。
题:2.29 在本章介绍的8086/8088指令中,哪些指令把寄存器SP作为指针使用?
答:PUSH、POP、PUSHF、POPF、PUSHA、POPA、RET、CALL、RETF。
题:2.30 请说说标志CF的用途。请至少给出使标志CF清0的三种方法。
答:条件转移、移位操作中的辅助移位、子程序的出口参数。
题:2.31 请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态:
MOV AL,89H CF=0,ZF=0,SF=0,OF=0,PF=0,AF=0;
ADD AL,AL AL=12H;CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1;
ADD AL,9DH AL=AFH;CF=0,ZF=0,SF=1,OF=0,PF=1,AF=0;
CMP AL,0BCH CF=1,ZF=0,SF=1,OF=0,PF=1,AF=0;
SUB AL,AL AL=0 CF=0,ZF=1,SF=0,OF=0,PF=1,AF=0;
DEC AL AL=0FFH CF=0,ZF=0,SF=1,0F=0,PF=1,AF=1; "DEC 指令不影响标志CF“
INC AL AL=0 CF=0,ZF=1,SF=0,OF=0,PF=1,AF=1; "INC指令同样不影响标志CF“
题:2.32 什么是除法溢出?如何解决16位被除数8位除数可能产生的溢出?
答:除法溢出就是当除数为0,8位除数的商超过8位,16位除数商超出16位;除法溢出会引起0号中断。
首先要确定除数不能为0,其次要观察8位除数的商是否超出8位,如超出8位,则采用16位除法
题:2.33 请写出如下程序片段中每条逻辑运算指令执行后标志ZF、SF、PF的状态:
MOV AL,45H
AND AL,0FH ZF=0,SF=0,PF=1
OR AL,0C3H ZF=0,SF=1,PF=0
XOR AL,AL ZF=1,SF=0,PF=1
题:2.34 ”MOV AX,0“可使寄存器AX清0。另外再请写出三条可使寄存器AX清0的指令。
答:SUB AX,AX
XOR AX,AX
AND AX,0
题:2.35 请写出如下程序片段中每条移位反指令执行后标志CF、ZF、SF和PF的状态:
MOV AL,84H CF=0,ZF=0,SF=0,PF=0;
SAR AL,1 CF=0,ZF=0,SF=1,PF=0;”算术右最高位不变,最低位进入CF“
SHR AL,1 CF=0,ZF=0,SF=0,PF=0;”逻辑右移最高位0补齐,最低位过入CF“
ROR AL,1 CF=1,ZF=0,SF=0,PF=0;
RCL AL,1 CF=1,ZF=0,SF=0,PF=0;
SHL AL,1 CF=0,ZF=0,SF=1,PF=0;
ROL AL,1 CF=1,ZF=0,SF=1,PF=0;
题2.36 8086/8088中,哪些指令把寄存器CX作为计数器使用?哪些指令把寄存器BX作为指针寄存器使用?
答:LOOP LOOPZ LOOPE LOOPNE LOOPNZ JCXZ ,
题2.37 请不用条件转移指令JG、JGE、JL和JLE等指令实现如下程序片段的功能:
CMP AL,BL
JGE OK
XCHG AL,BL
OK:..............
题:2.38 段间转移和段内转移的本质区别是什么?8086/8088哪些指令可实现段间转移;
答:段间转移是在不同段之间进行转移,段内转移是在同一段之内转移,JMP FAR PTR ,JMP OPRT,CALL /RET RETF
题:2.39 8086/8088的条件转移指令的转移范围有多大?如何实现超出范围的条件转移。
答:8086/8088的条件转移指令的转移围为0—FFFFH
来源:http://www.cnblogs.com/AsmLearner/p/3686156.html