第四章 80X86 指令系统
1、 指出源操作数的寻址方式 ⑴ MOV BX,2000H ;立即数寻址
⑵ MOV BX,[2000H]
;直接寻址
⑶ MOV BX,[SI] ;寄存器间接寻址 ⑷ MOV BX,[SI+2000H] ⑸ MOV [BX+SI],AL ;寄存器寻址 ⑹ ADD AX,[BX+DI+80] ⑺ MUL BL
;寄存器寻址 ⑻ JMP BX
⑼ IN AL,DX ;端口间接寻址 ⑽ INC WORD PTR [BP+10H] ⑾ MOV CL,LENGTH VAR ;立即数寻址 ⑿ MOV BL,OFFSET VAR1
;寄存器相对寻址 ;基址变址相对寻址 ;段内间接寻址 ;寄存器相对寻址 ;立即数寻址
2、 指出下列指令是否正确
(1) MOV DS,0100H (2) MOV BP,AL (3) XCHG AH,AL (4) OUT 310H,AL (5) MOV BX,[BX]
;错误。源操作数是立即数时,目的操作数不能时段寄存器 ;错误。操作数类型不一致 ;正确。
;错误。端口直接寻址的范围应在0~FFH之间 ;正确。 ;正确。
(6) MOV ES:[BX+DI] ,AX
(7) MOV AX,[SI+DI] ;错误。存储器寻址中有效地址不能由两个变址寄存器组成 (8) MOV SS:[BX+SI+100H],BX ;正确。 (9) AND AX,BL ;错误。操作数类型不一致 (10) MOV DX,DS:[BP] (11) ADD [SI],20H (12) MOV 30H,AL (13) PUSH 2000H
;正确。 ;正确。
;错误。目的操作数不能为立即数
;错误。堆栈指令的操作数不能是立即数 ;错误。两个操作数不能同时为存储器操作数 ;错误。操作数类型不一致 ;正确。
;错误。目的操作数不能为代码段寄存器 ;正确。
;错误。端口间接寻址的寄存器只能是DX寄存器 ;错误。移位次数大于1时应该用CL寄存器
;错误。交换指令中不能出现段寄存器
;错误。堆栈指令的操作数只能是字操作数(即16位操作数)
(14) MOV [SI],[2000H] (15) MOV SI,AL (16) ADD [2000H],20H
(17) MOV CS,AX (18) INC [DI] (19) OUT BX,AL (20) SHL BX,3 (21) XCHG CX,DS (22) POP AL
3、 写出存储器操作数物理地址的计算表达式
(1) MOV AL,[DI] ;(DS)×10H+(DI)
(2) (3) (4) (5)
MOV AX,[BX+SI] MOV 5[BX+DI],AL ADD AL,ES:[BX] SUB AX,[1000H]
;(DS)×10H+(BX)+(SI) ;(DS)×10H+(BX)+(DI)+5 ;(ES)×10H+(BX) ;(DS)×10H+1000H
(6) ADC AX,[BX+DI+2000H] ;(DS)×10H+(BX)+(DI)+2000H (7) MOV CX,[BP+SI] ;(SS)×10H+(BP)+(SI) (8) INC BYTE PTR [DI]
;(DS)×10H+(DI)
4、 若(DS)=3000H,(BX)=2000H,(SI)=0100H,(ES)=4000H,计算下列存储器操作数的物理地址。
(1) (DS)×10H+(BX)=3000H×10H+2000H=32000H
(2) (DS)×10H+(BX)+(SI)+1000H=3000H×10H+2000H+0100H+1000H=33100 H (3) (DS)×10H+(BX)+(SI)=3000H×10H+2000H+0100H=32100 H (4) (ES)×10H+(BX)=4000H×10H+2000H=42000 H
5、若(CS)=E000H,说明代码段可寻址物理存储空间的范围。
∵ 最小物理地址为:(CS)×10H+0000H=E0000H
最大物理地址为:(CS)×10H+FFFFH=EFFFFH
∴ 代码段可寻址物理存储空间的范围是:E0000H~EFFFFH
6、设(SP)=2000H,(AX)=3000H, (BX)=5000H,执行下列程序段后,(SP)=?,(AX)=?, (BX)=?
PUSH AX PUSH BX POP AX
(SP)=1FFEH,(AX)=5000H, (BX)=5000H
7、试比较SUB AL,09H与CMP AL,09H这两条指令的异同。若(AL)=08H,分别执行上述两条指令后,(AL)=?,CF=?,OF=0,ZF=?
(1) 相同点:两条指令都能完成(AL)-09H的功能,并且都影响六个状态标志位; 不同点:SUB指令将运算结果回送到AL寄存器中,而CMP指令不回送。 (2) SUB AL,09H CMP AL,09H
;(AL)=FFH,CF=1,OF=0,ZF=0 ;(AL)=08H,CF=1,OF=0,ZF=0
8、分别执行下列指令,试求AL的内容及各状态标志位的状态。 (1) MOV AL,19H ;
ADD
AL,61H AL,19H AL,61H
;(AL)=7AH ;
;(AL)=DCH
OF=0 SF=0 ZF=0 AF=0 PF=0 CF=0 OF=0 SF=1 ZF=0 AF=1 PF=0 CF=1 OF=0 SF=0 ZF=1 AF=0 PF=0 CF=1 OF=1 SF=1 ZF=0 AF=0 PF=0 CF=1
(2) MOV SUB (3) MOV ADD (4) MOV SUB
AL,5DH ;
AL,0C6H ;(AL)=23H AL,7EH AL,95H
;
;(AL)=E9H
9、用最少的指令,实现下述要求的功能。 (1) AH的高4位清零。
AND AH,0FH
(2) AL的高4位去反。 (3) AL的高4位移到低4位,高4位清0。 (4) AL的低4位移到高4位,低4位清0。
XOR AH, 0F0H
MOV CL,4 SHR AL,CL MOV CL,4 SHL AL,CL
10、设(BX)=6D16H,(AX)=1100H,写出下列三条指令执行后,AX和BX寄存器中的内容。 MOV CL,06H
ROL SHR
AX,CL BX,CL
(AX)=4004 H
(BX)=01B4 H
11、设初值(AX)=0119H,执行下列程序段后,(AX)=?
MOV
CH,AH
ADD AL,AH DAA
XCHG AL,CH ADC AL,34H DAA MOV MOV
AH,AL AL,CH
(AX)=3520 H
12、指出下列程序段的功能。
(2)
CLD LEA MOV XOR
DI,[0404H] CX,0080H AX,AX
将起始地址为0404 H开始的100 H(256)个单元至成0
(1) MOV
CX,10
LEA SI,First LEA DI,Second REP MOVSB
将 First串中前10个字符传送至Second 中
REP STOSW
13、 设(BX)=6B30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,试求执行XCHG
BX,[BP+SI]后, (BX)=?,(2F246H)=?
(BX)=4154H
(2F246H)=6B30H
14、设(BX)=0400H,(DI)=003CH,执行LEA BX,[BX+DI+0F62H]后,(BX)=?
(BX)=139E H
15、设(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H,执行LDS SI,[10H]后,(SI)=?, (DS)=? (SI)=0180 H,(DS)=2000 H
16、已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,试求单独执行下列指令后的结果。
(1) MOV (2) MOV (3) LEA MOV (4) LDS MOV
CL,20H[BX][SI]
[BP][DI],CX BX,20H[BX][SI] AX,2[BX] SI,[BP][DI] [SI],BX
;(CL)=0F6 H ;(1E4F6 H)=5678 H ;(BX)=0056 H ;(AX)=1E40 H ;
;((SI))=0024 H
(5) XCHG CX,32H[BX] XCHG 20H[BX][SI],AX ;
;(AX)=5678 H ,(09226H)=1234 H
17、(DS)=2000H,(BX)=1256H,(SI)=528FH,偏移量=20A1H,(232F7H)=3280H,(264E5H)=2450H,
试求执行下述指令后的结果。
(1) JMP BX
;(IP)=1256 H ;(IP)=3280 H
(2) JMP TABLE[BX]
(3) JMP [BX][SI] ;(IP)=2450 H 18、8086/8088用什么途径来更新CX和IP的值?
可通过三个途径来更换CX和IP的值: (1) 无条件段间转移指令
(2) 远距离过程调用和返回指令 (3) 软硬件中断
19、设(IP)=3D8FH,(CS)=4050H,(SP)=0F17H,当执行CALL 2000H:0094H后,试指出(IP)、(CS)、
(SP)、((SP))、((SP)+1)、((SP)+2)和((SP)+3)的内容。
(IP)=0094H,(CS)=2000H、(SP)=0F13H
((SP))=94H,((SP)+1)=00H,((SP)+2)=00H,((SP)+3)=20H
第五章 汇编语言程序设计
2.PLENTH的值为0022,它表示当前已分配单元空间; 3.L的值为6;
5.(AX)=000AH;(BL)=0AH;(CL)=01H; 9. MOV AX,BX XCHG AL,CL MOV BX,AL MOV AX,BL XCHG AL,CH MOV BL,AL 10. MOV DL,AH AND DL,0F0H MOV CL,4
SHR DL,CL PUSH AX
AND AH,0FH MOV BH,AH AND AL,0F0H MOV BL,AL MOV CL,4 SHR BL,CL MOV CL,BH POP AX
AND AL,0FH
11. DATA SEGMENT
STRMATCH DB ‘MATCH’,0AH,0DH,’$’
STRNMATCH DB ‘NOMATCH,0AH,0DH,’$’ STRING1 DB ‘GOOD MORNING!’
LENG1 EQU $-STRING1 ; LENG1的值为13,它表示存储器当前地址与STRING1首地址的差值,设置循环次数时用
STRING2 DB ‘GOOD MOING!’
LENG2 EQU $-STRIGN2 ; LENG2的值为11,它表示存储器当前地址与STRING2首地址的差值,设置循环次数时用 DATA ENDS
CODE SEGMENT
ASSUME CS : CODE , DS : DATA
START : MOV AX,DATA MOV DS,AX
MOV CX,LENG1
CMP CX,LENG2 ;串长度比较,不同的话内容就不用比了。 JNZ NMATCH LEA SI,STRING1 LEA DI,STRING2
CLD