寻址方式和指令系统

更新时间:2023-05-09 21:17:01 阅读: 评论:0

《微机原理》复习思考题 3 8086的寻址方式和指令系统 
                                                                           
3.1 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?
 
3.2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应如何表示?
 
3.3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?
 
3.4 用寄存器间接寻址方式时,BXBPSIDI分别针对什么情况来使用?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进行说明。
 
3.5 DS=2100HSS=5200HBX=1400HBP=6200H,说明下面两条指令所进行的具体操作:
        MOV    BYTE PTR [BP], 2000
        MOV    WORD PTR [BX], 2000
 
3.6 使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?
 
3.7 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
        XCHG    CS, AX
        MOV    [BX], [1000] 
        XCHG    BX, IP
        PUSH    CS
        POP    CS
        IN      BX, DX
        MOV    BYTE[BX], 1000
        MOV    CS, [1000]       
 
3.8 8086系统中,当对SSSP寄存器的值进行修改时,有什么特殊规定?这样做的原因是什么?
[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行之后,又自动恢复对SS寄存器赋值前的中断开放情况。这样做是为了允许程序员连续用两条指令分别对SSSP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。
 
3.9 以下是格雷码的编码表
0——0000 1——0001 2——0011 3——0010 4——0110
5——0111 6——0101 7——0100 8——1100 9——1101
请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。
 
3.10 用加法指令设计一个简单程序,实现两个16位十进制数的加法,结果放在被加数单元。
 
3.11 为什么用增量指令或减量指令设计程序时,在这类指令后面不用进位标志CF作为判断依据?
 
3.12 用乘法指令时,特别要注意先判断用有符号数乘法指令还是用无符号数乘法指令,这是为什么?
3.13 字节扩展指令和字扩展指令用在什么场合?举例说明。
[解答] 遇到两个字节相除时,要预先执行CBW指令,以便产生一个双倍长度的被除数。否则就不能正确的执行除法操作。CWD同理。
例如:CBW MOV AL a; CWD MOV AX, X;MOV CL , b; MOV CX, Y;CBW AL; CWD AX;DIV AX, CL; DIV AX, CX;
3.14 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086 汇编语言在对BCD码进行加、减、乘、除运算时,采用什么方法?
[解答] 在计算机中,可用4位二进制码表示一个十进制码,这种代码叫BCD码;用一个字节表示2BCD码就是BCD码;计算机对BCD码进行加、减、乘、除运算,通常采用两种办法:一种是在指令系统中设置一套转专用于BCD码的指令;另一种方法是利用对普通二进制数的运算指令算出结果,然后用专门的指令对结果进行调整,或者反过来,先对数据进行调整,再用二进制数指令进行运算。(以上7题由陈军解答)
3.15 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD
码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
[解答] BCD码中,只允许0?/FONT>910个数字出现,但有时候的运算结果会超过此范围,因此要进行十进制调整。进行加、件或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
 
3.16 普通移位指令(带CF的和不带CF的两类)在执行操作时,有什么差别?在编制乘法程序时,为什么常用移位指令来代替乘除法指令?试编写一个程序段,实现将BX中的数除以10,结果仍放在BX中。 
 
3.17串操作指令使用时特别要注意和SI,DI这两个寄存器及方向标志DF密切相关。请具体就指令MOVSB/MOVSWCMPSB/CMPSWSCASB/SCASWLODSB/LODSWSTOSB/STOSW列表说明和SIDIDF 的关系。
[解答
 
SI
DI
DF
MOVSB/
MOVSW
指出源地址
指出目的地址
不带REP重复前缀时,DF=0,每传送一次,SIDI1或加2DF=1SIDI则减1或减2
CMPSB/
CMPSW
存放源字符
串首地址
存放目的字符串
首地址
DF=0,每次比较后,SIDI1或加2CX1DF=1SIDI1或减2CX1
SCASB/
SCASW
指出字符串首址
偏移量
LODSB/
LODSW
作为地址指针
存放处理结果
DF=1时,地址作增量修改,DF=0时,地址作减量修改
STOSB/
STOSW
存放目的地址
 
3.18 用串操作指令设计实现以下功能的程序段:首先将100H个数从2170H处搬到1000H处,然后,从中检索相等于AL中字符的单元,并将此单元值换成空格符。
[解答]  BUFF1 EQU1000H
        BUFF2 EQU2170H
START MOV SIOFFSET BUFF2
        LEA DIBUFF1
        MOV CX100H
CYCLE MOV AL[SI]
        MOV [DI]AL
        INC SI
        INC DI
        LOOP CYCLE
ANOTHERMOV DIOFFSET BUFF1
        MOV CX100
        CLD
AGE  SCASB
        DEC CX
        JZ  FIN
        JNZ AGE
        JMP OVER
FIN  MOV [DI]20H
        CMP CX0
        JNZ AGE
OVER  RET
 
3.19 在使用条件转移指令时,特别要注意它们均为相对转移指令,请解释相对转移的含义。如果要往较远的地方进行条件转移,那么,程序中应该怎样设置?
[解答] 只能在从本指令为中心的-128+127字节范围内转移的称为相对转移。如果要往较远的地方进行条件转移时,可以先用条件转移指令转到附近一个单元,然后,从此单元起放一条无条件转移指令,再通过这条无条件转移指令转到较远的目的地址。
 
3.20 带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006 后,SP的值为多少?
[解答] 带参数的返回指令可用在这样的情况:主程序为某个子程序提供一定的参数或者参数地址先送到堆栈中,通过堆栈传递给子程序。当栈顶指针SP=3000H,执行RET 0006时,弹出3000H3001H处的返回地址,腾出3002H?/FONT>3007H的空间,所以SP=3008H。(以上6题由张丽解答)
 
3.21 用循环控制指令设计程序段,从60H 个元素中寻找一个最大值,结果放在AL中。
    [答案]    MOV  SI, OFFSET DATA1 ; 将数据起始地址送SI
        MOV  CX, 5FH          ; 60H-1次循环
        MOV  AL, [SI]        ; 将第一个元素放AL
COMPARE: INC  SI
        CMP  AL, [SI]
        JL  XCHMAX
        JMP  NEXT 
XCHMAX:  MOV  AL, [SI]
NEXT:    LOOP COMPARE

本文发布于:2023-05-09 21:17:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/875986.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   地址   进行   转移   寄存器   调整   运算
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图