第 4 章 80x86 指令系统 一 练习题 ㈠选择题 1.MOV AX,[BX+SI] 的源操作数的物理地址是 ( ) A.(DS) 16+(BX)+(SI) B. (ES) 16+(BX)+(SI) C.(SS) 10H+(BX)+(SI) D.(CS) 10H+(BX)+(SI) 2.MOV AX,[BP+Sl] 的源操作数的物理地址是 ( ) A.(DS) 10H+(BP)+(SI) A. (ES) 16+(BP)+(SI) C.(SS) 16+(BP)+(SI) D.(CS) 10H+(BP)+(SI) 3.MOV AX,ES:[BX+SI] 的源操作数的物理地址是 ( ) A.(DS) 16+(BX)+SI) B.(ES) 10H+(BX)+(SI) C.(SS) 10H+(BX)+SI) D.(CS) 16+(BX)+(SI) 4.JMP WORD PTR[DI] 是 ( ) A. 段内间接转移 B. 段间间接转移 C. 段内直接转移 D. 段间直接转移 5.JMP FAR PTR BlOCK(BLOCK 是符号地址 ) 是 ( ) A. 段内间接转移 B. 段间间接转移 C.. 段内直接转移 D. 段间直接转移 6.INC 指令不影响 ( ) 标志 A.OF B.CF C.SF D.ZF 7. 条件转移指令 JNE 的测试条件是 ( ) A.ZF=1 B.CF=0 C.ZF=0 D.CF=1 8. 下列指令中, 有语法错误的是 ( ) A.MOV [SI],[DI] B.IN AL,DX C.JMP WORD PTR[BX+8] D.PUSH WORD PTR 20[BX+S1] 9. 假定 (SS)=2000H,(SP)=0100H,(AX)=2107H, 执行指令 PUSH AX 后, 存放数据 21H 的物理地址是 ( ) A.20102H B.20101H C.200FEH D.200FFH 10. 对于下列程序段 : AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用指令 ( ) 完成同样的功能 A.REP MOVSB B.REP LODSB C.REP STOSB D.REPE SCASB 11. 对于下列程序段 : AGAIN:MOV ES:[DI],AL INC DI LOOP AGAIN 可用指令 ( ) 完成
A.REP MOVSB B.LODSB C.REP STOSB D.REP SCASB 12. 交换寄存器 SI,DI 的内容, 正确的程序段是 ( ) A.PUSH SI B.PUSH SI PUSH DI PUSH DI POP SI POP DI POP DI POP SI C.MOV AX,SI D.MOV AX,SI MOV SI,DI MOV BX,DI MOV DI,AX XCHG BX,AX 13. 在 ADD 指令中, 两个操作数的物理位置可以安排在 ( ) 中 A. 两个存储单元 B. 一个存储单元和一个数据寄存器 C. 两个数据寄存器 D. 一个堆栈单元和一个数据寄存器 14. 将字变量 ARRAY 的偏移地址送寄存器 BX 的正确结果是 ( ) A.LEA BX,ARRAY B.MOV BX,ARRAY C.MOV BX,OFFSET ARRAY D.MOV BX,SEG ARRAY 15. 将累加器 AX 的内容清零的正确指令是 ( ) A.AND AX,0 B.XOR AX,AX C.SUB AX,AX D.CMP AX,AX 16. 下列指令中, 正确的是 ( ) A.MOV [D1],[S1] B.MOV DS,SS C.MOV AL,[EAX+EBX*2] D.OUT BX,AX 17. 实现将 AL 寄存器中的低 4 位置 1 的指令为 ( ) A.AND AL,0FH B.OR AL,0FH C.TEST AL,0FH D.XOR AL,0FH 18. 指令 LOOPE Xl,( ) A. 当 CX 0 或者 ZF=0 时转移到 X1 B. 当 CX 0 或者 ZF=1 时转移到 X1 C. 当 CX=0 而且 ZF=1 时转移到 X1 D. 当 CX 0 而且 ZF=0 时转移到 X1 E. 当 CX 0 而且 ZF=1 时转移到 X1 F. 当 CX=0 而且 ZF=0 时转移到 X1 19.80486 在实地址方式下, 内存管理中段基址 段首地址 偏移地址 物理 地址依次是 ( ) A.16 位,20 位,16 位,20 位 B. 均为 16 位 C. 均为 20 位 D.20 位,16 位,20 位,16 位 20.80486 在保护方式下, 内存管理中段基址 段首地址 偏移地址 物理地 址依次是 ( ) A.20 位,32 位,20 位,32 位 B. 均为 32 位 C. 均为 20 位 D.16 位,32 位,16 位,32 位
21. 采用 BCD 码表示的十进制数计算时, 先调整后运算的有 ( ) A. 加法 B. 减法 C. 乘法 D. 除法 22. 十进制调整指令 AAA( ) A. 跟在 SUB 或 SBB 之后 B. 跟在 ADD 之后 C. 跟在 MUL 或 ADC 之后 D. 跟在 ADD 或 ADC 之后 ㈡填空题 1. 计算机中的指令由 和 组成. 2. 指出下列指令源操作数的寻址方式 : (1) MOV AX,BLOCK[SI] ; (2) MOV AX,[SI] ; (3) MOV AX,[6000H] ; (4) MOV AK,[BX+SI] ; (5) MOV AX,BX ; (6) MOV AX,1500H ; (7) MOV AX,80[BX+D] ; (8) MOV AX,[DI+60] ; 3. 现有 (DS)=2000H,(BX)=0100H,(Sl)=0002H,(20100)=12H,(20101)=34H,(20102) =56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H, 填入下列指令执行后 AX 寄存器的内容 : (1) MOV AX,1200H ;AX= (2) MOV AX,BX ;AX= (3 )MOV AX,[1200] ;AX= (4 )MOV AX,[BX] ;AX= (5) MOV AX,1100H[BX] ;AX= (6) MOV AX,[BX][SI] ;AX= (7) MOV AX,1100H[BX][SI] ;AX= 4. 对于指令 XCHGBX,[BP+SI], 如果指令执行前,(BX)=6F30H,(BF)=0200H,(SI) =0046H,(SS)=2F00H,(2F246H)=4154H, 则执行指令后 :(BX)=,(2F246H) = 5. 指令 LOOPZ/LOOPE 是结果 或 发生转移的指令 ; 而指令 LOOPNZ/LOOPNE 则是结果 或 发生转移的指令 6.XLAT 指令规定 BX 寄存器中存放,AL 寄存器中存放 7. 如果 BUF 为数据段中 5400H 单元的符号名, 其中存放的内容为 1234H, 执行指令 MOV BX,BUF 后,DX 的内容为 ; 而执行 LEABX,BUF 后,BX 的内容为 8. 串操作指令规定源串在 段中, 用 来寻址源操作数 ; 目的串在 段中, 用 来寻址目的操作数 9. 近过程 (NEAR) 的 RET 指令把当前栈顶的一个字弹出到 ; 远过程 (FAR) 的 RET 指令弹出一个字到 后又弹出一个字到 10. 中断返回指令 IRET 执行后, 从堆栈顺序弹出 3 个字分别送到,, 11. 设 (SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H, 执行指令 PUSH AX 后,(SP)= ; 若再执行指令 :
PUSH BX POP AX 后,(SP)=,(AX)=,(BX)= 12. 阅读下面的程序 在 的情况下, 本段程序的执行结果是 (AH)=0; 在 的情况下, 其结果为 (AH)=0FFH IN AL,20H TEST AL,80H JZ A MOV AH,0 JMP B A:MOV AH,0FFH B:HLT 13. 下列程序段是比较 AX,BX,CX 中带符号数的大小, 将最大的数放在 AX 中 请将程序填充完整 CMP AX,BX (1) NEXT XCHG AX,BX NEXT: (2) CX,AX JGE OUT (3) AX,CX OUT: 14. 若 (AX)=3F50H,(BX)=1728H, 执行 SUBAX,BX 指令后,(AX)=, 标志位 AF,SF,CF,ZF,OF,PF 的状态相应为 15. 设 (SS)=2250H,(SP)=0140H, 若在堆栈中存人 5 个数据, 则栈顶的物理地址为, 如果再从堆栈中取出 3 个数据, 则栈顶的物理地址为 16.MOV AL, A 指令的源操作数的寻址方式为 17. 若 (BP)=1500H,(SI)=2500H,(DS)=2000H,(ES)=3000H,(SS)=4000H, 假设按 16 位实模式操作, 则指令 MOVAL,[BP+SI+4200H), 其源操作数的寻正方式为, 访问内存的物理地址为 18.MOV EAX,[BP+5000H] 若按实模式操作, 设 (BP)=1500H,(DS)=2000H,(ES) =3000H,(SS)=4000H, 则源操作数的物理地址为 19. 指出下列每条指令中源操作数的寻址方式 : (1) MOV AX,[4000H] ; (2) MOV AL,[BX+DI] ; (3) MOV EAX,[BP+5000H] ; (4) MOV AL,[EBX*4+80H] ; 20. 实地址方式的数据寻址方式有 21. 对于串操作指令, 源串是以 内容为段基址, 是以 内容为偏移地址 ; 目的串是以 内容为段基址, 以 内容为偏移地址 22 将 AX 寄存器的内容清 0 的指令有 23. 以 CX 寄存器内容为计数对象的指令有 24.CPU 工作在实方式下, 若指令 MOV AL,[BP+SI], 其源操作数的寻址方式为, 假设 (BP)=1500H,(SI)=2500H,(ES)=3000H,(SS)=4000H, 则源操作数的
物理地址为 25. 输入 / 输出指令间接寻址必须通过 寄存器 ㈢判断题 1.MOV AX,[BP+S1] 的源操作数的物理地址为 (DS) 16+(BP)+(S1) 2. 段内转移要改变 IP,CS 的值 3. 立即寻址方式不能用于目的操作数字段 4. 不能给段寄存器进行立即数方式赋值 5.OF 位用来表示带符号数的溢出,CF 位可以表示无符号数的溢出 6.SP 的内容在任何时候都指向当前的栈顶, 要指向堆栈的其他位置, 可以使用 BP 指针 7.REPE/REPZ 是相等 / 为零时重复操作, 其退出条件是 :(CX)=0 或 ZF=1 8. 指令中都必须有操作数 9. 立即数可以直接送给寄存器 存储器或者段寄存器 10. 在串指令使用前, 必须先将 DF 置 0 11. 在用循环控制指令时, 必须将循环次数送 CX 12. 十进制调整指令是把累加器中十六进制数转换成十进制数 13. 加 减 乘 除运算指令都分带符号数和不带符号数运算指令 14. 基址变址寻址是在基址寄存器和变址寄存器中寻找操作数 15. 算术左移指令和逻辑左移指令在操作上是相同的, 而算术右移指令和逻辑右移指 令在操作上是不相同的 16. 在串操作中必须将串长度送 CX 17. 请判断正误 : (1) MOV AX,DX ; (2) IN AL,DX ; (3) MOV EBX,[BX+S1] ; (4) MOV [BX],[BP] ; (5) INC [EAX] ; (6) SUB AL,2030H ; (7) RCR AL ; (8) XCHG AL,80H ; (9) ADD EZX,[BX+10H] ; (10) IDIV BL ; ㈣问答题 1. 指出下列算术逻辑指令执行后标志 CF,ZF,SF,PF,OF 和 AF 的状态 MOV AL,80H DEC AL ADD AL,10H SUB AL,10H MOV AL,3AH AND AL,0FOH OR AL,0FOH XOR AL,0FOH 2. 试指出下列指令中的错误 :
(1) MOV [BX],[S1] (2) MOV AH,DX (3) INC [BX] (4) MOV DS,SS (5) XCHG AX,2000H (6) MOV AX,[BX+DX] (7) XCHG [BP],ES (8) ADD [BX],BX (9) MOV AX,DI+SI (10) IN AL,BX 3. 什么叫串? 串操作有那些基本的指令? 在使用时它们的寻址方式有那些约定? 串前 缀在什么情况下使用? 4. 判断正误, 错者指出错误并改正 (1) MOV ES,DS (2) OUT BX,AX (3) XCHG AL,66H (4) MOV EAX,[ECX*4+80H] (5) INC [EBX] (6) MOV [BX],[D1] (7) SUB AL,2000H (8) IDIV AX,BL (9) CMP [BX],0 (10) POP AL 二 练习题参考答案 ㈠选择题 2.C 4.A 6.B 8.A 10.A 12.A,C 14.A,C 16.C 18.E 20.B 22.B,D ㈡填空题 1. 操作码, 操作数 3.(1)1200H,(2)0100H;(3)4C2AH;(4)3412H;(5)4C2AH;(6)7856H;(7)65B7H 5. 为零 ; 相等 ; 不为零 ; 不相等 7.1234H,5400H 9.IP;IP;CS 11.00AEH;00AEH;0F79H;0F79H 13.(1) JGE;(2) CMP;(3) XCHG 15.22636H;2263CH 17. 相对基址变址寻址 ;47C00H 19.(1) 直接寻址 ;(2) 基址变址寻址 ;(3) 相对变址寻址 ;(4) 相对比例变址寻址 21.DS;Sl ES;DI 23. 循环控制指令 串操作重复指令 25.DX ㈢判断题 2. 错误 4. 正确 6. 正确 8. 错误 10. 错误 12. 错误 14. 错误 16. 错误 ㈣问答题 1.MOV AL,80H DEC AL ;CF=0 ZF=0 SF=0 PF=0 OF=l AF=1 ADD AL,10H ;
SUB AL,10H ;CF=0 ZF=0 SF=0 PF=0 OF=1 AF=0 MOV AL,3AH AND AL,0FOH ;CF=0 ZF=0 SF=0 PF=1 OF=0 OR AL,0FOH ; XOR AL,0FOH ;CF=0 ZF=1 SF=0 PF=0 OF=0 2. (1) 错误 源操作数和目的操作数不允许同时为存储器操作数 (3) 错误 操作数的数据类型不明确, 应使用 PTR 伪指令来定义 (5) 错误 交换指令中不能出现立即数 (7) 错误 不能对段寄存器交换数据 (9) 错误 源操作数寻址方式不对 3. 串是一组有序的连续存放的数据 串基本操作指令有串传送 MOVSB/MOVSW, 串比较 CMPSB/CMPSW, 串扫描 SCASB/SCASW, 串存储 ( 写串 )STOSB/STOSW, 串装入 ( 读串 )LODSB/LOSW 共 5 种 串前缀是在串操作过程中无须再作其他处理的情况下使用 4. (2) 错误 应改为 :OUTDX,AX (4) 正确 (6) 错误 两存储单元不能直接互相传送数据, 可改为 : MOVAL,[D1] MOV[BX],AL (8) 错误 IDIV 指令被除数隐含指定, 应改为 :IDIV BL (10) 错误 堆栈操作不允许字节操作, 应改为 :POP AX