第 | 三 | 章 | 8 | 0 | x | 8 | 6 | 指 | 令 | 系 | 统 |
3-1 指令由操作码字段和操作数字段组成。8086的指令长度在1~6字节范围。
3-2 分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,使用表达
式表示出EA=?PA=?
(1)MOV SI, 2100H (2)MOV CX, DISP[BX] (3)MOV [SI], AX
(4)ADC ZX, [BX][SI] (5) AND AX, DX (6)MOV AX, [BX+10H]
(7)MOV AX, ES:[BX] (8)MOV AX, [BX+SI+20H] (9) MOV [BP], CX
(10)PUSH DS
解:
| 源操作数寻址 | 目的操作数寻址 | EA | PA |
1) MOV SI, 2100H | 立即数寻址 | 寄存器 | —— | —— |
(2) MOV CX, DISP[BX] | 寄存器相对寻址 | 寄存器 | [BX+SISP] | (DS)*16+(BX+DISP) |
(3) MOV [SI], AX | 寄存器寻址 | 寄存器间接 | [SI[ | (DS)*16+(SI) |
(4) ADC ZX, [BX][SI] | 基址变址寻址 | 寄存器 | [BX+SI] | (DS)*16+(BX)+(SI) |
(5) AND AX, DX | 寄存器寻址 | 寄存器 | —— | —— |
(6) MOV AX, [BX+10H] | 寄存器相对寻址 | 寄存器 | [BX+DISP] | (DS)*16+(BX)+10H |
(7) MOV AX, ES:[BX] | 带段超越寄存器寻址 | 寄存器 | [BX] | (ES)*16+(BX) |
(8)MOV AX, [BX+SI+20H] | 相对基址变址寻址 | 寄存器 | [BX+SI+20H] | (DS)*16+(BX)+(SI)+20 H |
(9) MOV [BP], CX | 寄存器寻址 | 寄存器间接 | [BP] | (SS)*16+(BP) |
(10) PUSH DS | 固定寻址 | 寄存器 | [SP] | (SS)*16+(SP) |
3-3 已知8086中一些寄存器的内容和一些存储器单元的内容如图3-1所示,试指出下列各
条指令执行后,AX中的内容。
(1) MOV AX, 2010H | (2) MOV AX, BX | (3) MOV AX, [1200H] |
(4) MOV AX, [BX] | (5) MOV AX, 1100H[BX] | (6) MOV AX, [BX][SI] |
(7)MOV AX, 1100H[BX+SI] (8) MOVLEA AX, [SI]
解:(1)(AX)=2010H (2)(AX)=0100H | (3)(AX)=4C2AH (4)(AX)=3412H |
(5)(AX)=4C2AH (6)(AX)=7856H (7)(AX)=65B7H (8)(AX)=0002H |
1
|
|
图3-1
3-4 已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于多少?
解:
(1)OUT DX, AL | (0380H)=40H |
3-5 已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。图中应标出存储单元的实际地址PA。
PUSH AX
PUSH CX | ;位置1 |
POPF | ;位置2 |
解:已知(SS)=0A2F0H,指令顺序依次编号为①、②、,示意图如图所示: |
| | |
(SS)=0A2F0H | | |
| | |
| | |
0A2FBCH | 13H | ←②(SP)-4=00BCH (位置1) |
| F2H | |
0A2FBEH | 31H | ←①(SP)-2=00BEH ③(SP)+2=00BCH +0002H=00BEH (位置2) |
| 8BH | |
0A2FC0H | | (SP)=00C0H |
2
3-6 识别下列指令的正确性,对错误的指令,说明出错的原因。
(1) MOV DS, 100 | (11) OUT CX, AL |
解:
(1)×,不能对段寄存器送立即数 | (11)×,应输出到端口而不是通用寄存器(12)×,用DX 做间址寄存器380H 应存 DX |
(10)×,80H为输入端口号不加方括号
3-7 已知存储器数据段中的数据如图3-3所示。阅读下列的两个程序段后,回答:
1.每个程序段的运行结果是什么?
2.两个程序段各占多少字节的内容,执行时间是多少?
(1) LES SI, NUM1 | (2) | MOV AX, NUM1 |
MOV AX, [SI] | ||
ADD AX, 4[SI] | ADD AX, NUM2 | |
MOV 8[SI], AX | MOV SUM, AX | |
ADD SI, 2 | MOV AX, NUM1+2 | |
MOV AX, [SI] | ADC AX, NUM2+2 | |
ADC AX, 4[SI] | MOV SUM+2, AX |
MOV 8[SI], AX
解:1、运行结果如下:
(1) 0AC6863A0H | (2) 0AC6863A0 | 字节数 |
2、 | 时钟周期 | |
(1) LES SI, NUM1 | 2+EA | 2~4 |
MOV AX, [SI] | 10 | 3 |
3
ADD AX, 4[SI] | 9+EA | 2~4 |
| |||||||||||||||||||||||||||||||||
MOV 8[SI], AX | 10 | 3 | ||||||||||||||||||||||||||||||||||
ADD SI, 2 | 4 | 3~4 | ||||||||||||||||||||||||||||||||||
MOV AX, [SI] | 10 | 3 | ||||||||||||||||||||||||||||||||||
ADC AX, 4[SI] | 9+EA | 2~4 | ||||||||||||||||||||||||||||||||||
MOV 8[SI], AX | 10 | 2~4 | ||||||||||||||||||||||||||||||||||
(2) MOV AX, NUM1 | 10 | 3 | ||||||||||||||||||||||||||||||||||
ADD AX, NUM2 | 9+EA | 2~4 | ||||||||||||||||||||||||||||||||||
MOV SUM, AX | 9+EA | 2~4 | ||||||||||||||||||||||||||||||||||
MOV AX, NUM1+2 | 9+EA | 2~4 | ||||||||||||||||||||||||||||||||||
ADC AX, NUM2+2 | 9+EA | 2~4 | ||||||||||||||||||||||||||||||||||
MOV SUM+2, AX | 9+EA | 2~4 |
图3-33-8 已知数据如图3-3所示,数据的低位在前,按下列要求编写程序段:1.完成NUM1和单元NUM2两个字数据相加,和存放在NUM1中。
2.完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。3.完成NUM1单元开始的连续8个字节数据相加,和16位数,放在SUM和SUM+1两个单元(用循环)。
4.完成NUM1和NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。
解:
1、CLC
LEA SI, NUM1
MOV AX, WORD PTR [SI]
ADD AX, WORD PTR NUM2
MOV WORD PTR [SI], AX
MOV AX, WORD PTR [SI+2]
ADC AX, WORD PTR NUM2+2
MOV WORD PTR [SI+2], AX
HLT
2、LEA SI, NUM1
MOV AL, [SI]
ADD AL, 1[SI]
ADD AL, 2[SI]
ADD AL, 3[SI]
MOV SUM, AL
HLT
3、 CLC
CLD
LEA SI, NUM1
4
MOV AL, [SI]
MOV AH, 0
MOV CX, 7
XOR BH, BH
AGA:MOV BL, 1[SI]
ADC AX, BX
INC SI
DEC CX
JNZ AGA
MOV SUM, AX
HLT
4、LEA SI, NUM1
LEA DI, NUM2
MOV AX, [SI]
ADD AX, [DI]
MOV [DI], AX
MOV AX, 2[SI]
ADC AX, 2[DI]
MOV 2[DI], AX
3-9 已知的BCD数如图3-3所示,低位在前,按下列要求编写计算BCD数据(为组合型BCD)的程序段。
1.完成从NUM1单元开始的连续8个组合型BCD数相加,和(超过一字节)放在SUM和SUM+1两个单元中。
2.完成NUM1单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差=?,(CF)=?
解:
1、CLC
CLD
LEA SI, NUM1
MOV CX, 7
MOV AH, 0
MOV AL, [SI]
AGA: INC SI
ADC AL,[SI]
DAA
LOOP AGA
MOV SUM, AL
MOV SUM+1,AH
HLT
2、CLC
MOV AH, 0
5
MOV AL, NUM1
SUB AL, NUM2
DAS
MOV SUM, AL
差=0F0H=-10H,CF=1
3-10 写出下列程序段完成的数学计算公式,并画出数据存放的示意图。
MOV AX, X 解:W=X+Y-Z,数据存放如图所示: |
|
3-11 已知数据如图3-3所示,低位在前,按下列要求编写程序段
1.NUM1和NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。
2.NUM1和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。3.NUM1单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字节单元。
4.NUM1单元的字节数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字节单元。
解:
1.为32位×32位,极为位
2. MOV AX, NUM1
IMUL NUM2 ;积在(DX)(AX) 中
MOV SUM, AX
MOV SUM+2,DX
3.MOV AL, NUM1
CBW
MOV CL, 0DH
6
DIV CL
MOV SUM, AL
MOV SUM+1,AH
4.MOV AX, NUM1
CWD
IDIV NUM2
MOV SUM, AX
MOV SUM+2,DX
3-12 (L略)
3-13 已知(AL)=0C4H,DATA单元中的内容为5AH,写出下列每条指令单独执行后的结果。
1.AND AL, DATA 5.AND AL, 0FH 2. OR AL,DATA 6.OR AL, 01H 3. XOR AL, DATA 7.XOR AL, 0FFH 4. NOT DATA 8.TEST AL, 80H解;
1. (AL)=01000000B=40H 2. (AL)=0DEH | 5. (AL)=04H |
3-14 用移位循环指令,编写完成以下功能的程序段(结果放回原处)1.将无符号数83D分别乘2和处2.
2.将带符号数-47D分别乘2和除2.
3.将图3-3中NUM1双字乘2和除2.
4.将图3-3中从NUM1开始的4个字乘2.
解:
1.MOV AL, 53H
SHL AL, 1
MOV AL, 53H
SHR AL, 1
2.MOV AL, 0D1H
SAL AL, 1
MOV AL, 0D1H
SAR AL, 1
3.MOV AX, NUM1
MOV DX,NUM1+2
SHL AX, 1
7
RCL DX, 1
MOV AX, NUM1
MOV DX, NUM1+2
SAR DX, 1
RCR AX, 1
4. SAL NUM1,1
RCL NUM1+2,1
RCL NUM1+4,1
RCL NUM1+6,1
3-15 编写完成以下功能的程序段,并指出运行后,其标志CF、ZF、SF和OF的状态是什么?
1.BCD数 58—32
2.无符号数3AH—3AH
3.带符号数79—(—57)
4.带符号数—32+(42)
解:
MOV AL, 58H 1.
SUB AL, 32H
DAS
CF=0,ZF=0,SF=0,OF=0
2. MOV AL, 3AH
SUB AL, 3AH
CF=0,ZF=1,SF=0,OF=0
3.已知X=79D,Y=57D 则【X】补=01001111,【Y】补=
所以[X]补—[Y]补=[X]补+[-Y]补=
MOV AL, 79
MOV BL, -57
SUB AL, BL
CF=0,ZF=0,SF=1,OF=1
4.MOV AL, 0F3H
MOV BL, 2AH
ADD AL, BL
或者
MOV AL, 0F3H
ADD AL, 2AH
CF=0,ZF=0,SF=0,OF=0
3-16 用循环移位指令实现下列功能,设(AX)=0C3H
1.设(CL)=8,移位前、后AX内容不变
8
2.设(CL)=9,移位前、后AX内容不变
3.将AX中高4位和低4位交换位置
4.将AX中高4位放到低4位上,而高4位置0
解:
1.MOV CL, 8
ROL AL, CL(或者ROR AL, CL)
2.MOV CL, 9
RCL AL,CL(或者RCR AL, CL)
3.MOV BX, AX
AND AX, 0FF0H
XCHG BH, BL
MOV CL, 4
ROL BH, CL
ROL BL, CL
AND BH,0F0H
AND BL, 0FH
OR AX, BX
4.本小题可以多种解法:
解1:
5.MOV BX, AX
AND AX, 0FF0H
XCHG BH, BL
MOV CL, 4
ROL BH, CL
ROL BL, CL
AND BH,0
AND BL, 0FH
OR AX, BX
解2:
MOV BX, AX
XCHG AH, AL
MOV CL, 4
ROR AX, CL
SHR AH, CL
AND AL, 0FH
AND BL, 0FOH
OR AL, BL
3-17 写出下列程序段执行后的结果:(AL)=?(DL)=?完成的是什么功能?MOV CL,4
MOV AL,87
9
MOV DL, AL
MOV AL,0FH
OR AL,30H
SHR DL,CL
OR DL,30H
解:完成与、或、移位等逻辑运算,运算结果:(AL)=37H;(DL)=35H
3-18 用乘法指令和用传送、移位、相加指令分别实现Y=10X的运算,设X=12H,分别编写这两个程序段。
解:
(1)MOV AL, X
MOV CL, 10
NUL CL
(2)MOV AL, X
SAL AL,1 ;(AL)=2*X
MOV BL, AL ;(BL)=X*2
SAL AL, 1 ;(AL)=4*X
SAL AL, 1 ;(AL)=8*X
ADD AL, BL ;(AL)=8*X+2*X=10*X
3-19 写出下面指令序列完成的数学计算是什么?
MOV CL, 3
SHL AX, CL
SHL BL, CL
SHL CX, CL
SHL DH, CL
解:将一多精度数(6字节)乘以8
3-20 写出下列能代替重复串操作指令完成同样功能的指令序列。(1)REP MOVSW
(2)REP CMPSB
(3)REP SCASB
(4)REP LODSW
(5)REP STOSB
解:
(1)LEA SI, AREA1
LEA DI, AREA2
MOV CX, N
CLD
AGA:MOV AX, DS:[SI]
MOV ES:[DI], AX
10
INC SI
INC SI
INC DI
INC DI
DEC CX
JNZ AGA
RET
(2) LEA SI, VAR1
LEA DI, VAR2
MOV CX, N
CLD
NEXT:CMPSB
JNZ FIN
LOOP NEXT
RET
(3) MOV DI, OFFSET COMMAND
MOV AL, ‘’
MOV CX, N
CLD
NEXT:SCASB
JZ FOUND
LOOP NEXT
RET
(4)MOV SI, OFFSET BUF
MOV CX, N
CLD
NEXT:LODSW
MOV RES, AX
LOOP NEXT
RET
(5) MOV DI,OFFSET BUF
MOV CX, N
CLD
NEXT:STOSB
DEC CX
JNZ NEXT
RET
3-21 欲将数据段中自AREA1中的100个字数据搬到附加段中以AREA2开始的区中,用下面的3种传送指令编写程序段:
11
1.用MOV指令;2. 用基本串传送指令;3.用重复串传送指令
解:
1. LEA SI, AREA1
LEA DI, AREA2
MOV CX, 100
CLD
AGAIN:MOV AX, [SI]
MOV ES:[DI], AX
INC SI
INC SI
INC DI
INC DI
DEC CX
JNZ AGAIN
RET
2. MOV SI, OFFSET AREA1
MOV DI, OFFSET AREA2
MOV CX, 100
CLD
AGAIN:MOVS AREA2,AREA1
DEC CX
JNZ AGAIN
RET
3. MOV SI, OFFSET AREA1
MOV DI, OFFSET AREAA2
CLD
MOV CX, 100
REP MOVSB
RET
3-22 假定在数据段中已知字符串和未知字符串的定义如下:
STRING1 DB ‘MESSAGE AND PROCCESS’
STRING2 DB 20 DUP(?)
用串操作指令编写完成下列功能的程序段(设DS和ES重叠);
1.从左到右把STRING1中的字符串搬到STRING2中;
2.从右到左把STRING1中的字符串搬到STRING2中;
3.搜索STRING1字符串中是否有空格。如有,记下第一个空格的地址,并放入BX中;4.比较STRING1和STRING2字符串是否相同。
解:
1.MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, 20 ;共20个字符
12
CLD | ;从左到右就是增址方向,设置DF←0 |
REP MOVS STRING2,STRING1
2.MOV SI, OFFSET STRING1+13H
MOV DI, OFFSET STRING2+13H
MOV CX, 20
STD ;从右到左为减址方向,设置DF←0
REP MOVS STRING2+13H, STRING1+13H
3. MOV DI, OFFSET STRING1
MOV CX, 20
MOV AL, 20H ;空格字符的ASCII码
CLD
REPNZ SCASB
JZ FOUND
MOV DI, 0
JMP DONE
FOUND;DEC DI ;因SCASB的功能是:(1)(AL)——[DI] (2) DI←[DI]+1 MOV BX, DI
DENE: HLT
4. MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, 20
CLD
REPZ CMPSB
JNZ UMMAT
MOV AL, 0
JMP OUTPUT
UMMAT:MOV AL, 0FFH
OUTPUT:MOV RESULT, AL
RET
3-23 下面两条短转移指令的转移地址ADDR1和ADDR2分别是多少(用十六进制表示)?
1.0220 EB 0A JMP ADDR1
2.0230 EB F7 JMP ADDR2
解:
1.e为当前IP与目的地址的距离。
已知位移量e的计算公式:e=目的地址—(IP源+2),即
0AH=目的地址—(IP源+23)=ADDR1—0222H
所以,ADDR1=0AH+0222H=022CH(正向转移)
2.e=目的地址—(IP源+2)
0F7H=ADDR2—0232H
13
所以,ADDR2=0F7H+0232H=0229H(负向转移)
3-24 NEAR JMP, SHORT JMP,LOOP和条件转移指令的转移范围是多少?
解:
(1)NEARJMP:目标地址距JMP指令+32767~—32768字节范围以内。
(2)SHORTJMP:目标地址距JMP指令+127~—128字节范围以内。
(3)LOOP:所转去的目标地址在+127~—128字节范围以内,为LOOPSHORT_LABEL(4)条件转移指令:目的地址OPRD为近标号,即转向的目标地址必须在转移指令的+127~—128字节范围以内。
2-25 设AX和CX中的内容为无符号数,BX和DX中的内容为带符号数,试用CMP指令和条件转移指令实现以下判断:
1.若(AX)超过(CX),则转至BIGER。2.若(BX)>(DX),则转至BIGE。
,则转至LESS。 4.若(DX)>(BX),则转至LESS。3.若(CX)低于(AX)
5.若(AX)=(CX),则转至EQUAL。
解:
1.CMP AX, CX
JA BIGER
2.CMP BX, DX
JG BIGER
3.CMP CX, AX
JB LESS
4.CMP DX, BX
JL LESS
5.CMP AX, CX
JZ EQUAL
3-26 (略)
3-27 试编写一个程序段,能完成下列数学表达式的功能
X | 1 0 1 | ( | X | | -1) |
(1- <X<1) | |||||
( X | | 1) |
解1:
MOV AL, X
CMP AL,-1
JLE ANS1
CMP AL,1
JL ANS2
14
JMP ANS3
ANS1:MOV [SI1,-1
ANS2:MOV [S2], 0
RET
ANS3:MOV [S3], +1
DONE:RET
解2:
MOV AL, X
CMP AL,0FFH
JLE LOON1
CMP AL, 1
JGE LOON2
MOV AL, 0
MOV X, AL
JMP NEXT
LOON1:MOV AL, 0FFH
MOV X, AL
JMP NEXT
LOON2:MOV AL, 1
MOV X, AL
NEXT: RET
3-28 8086的中断机构允许256 级中断,其专用的中断有5个,分别为类型0~类型4
3-29 试比较转移指令,调用指令和中断指令操作的异同处。
解:
这3种指令其共同处是改变了程序指令执行的顺序,从一条指令跳到另一条指令。其中,转移指令跳转后一般不会返回原指令的下一条指令;而调用指令在子程序执行完毕后会返回原指令的下一条指令继续执行;中断指令是在CPU遇到中断产生后,停止当前指令的执行,在处理完中断服务程序后,继续从执行中断前的指令处开始运行。
3-30 用DOS系统功能调用编写一个程序,能将3-17题中的结果在屏幕上显示出来。
解:已知3-17 题的结果是:(AL)=37H,(DL)=35H。程序如下: | ||
MOV BL, AL | MOV AH, 02H | |
MOV DH, DL | INT 21H | |
MOV CL, 4 | MOV DL,DH | |
SHR AL,CL | MOV CL, 4 | |
OR AL,30H | SHR DL,CL | |
MOV DL, AL | OR DL, 30H | |
MOV AH,02H | MOV AH, 02H | |
INT 21H | INT 21H | |
MOV AL, 0FH | MOV DL, 0FH | |
OR AL,30H | OR DL, 30H |
15
MOV AH, 02H | HLT |
INT 21H
3-31 (略)
3-32 (略)
3-33 试写出80386/80486CPU执行下列指令后,AX=?,BX=?(1)MOV AX, 0000
MOV BX,123H
SHLD AX, BX,8
(2)MOV AX,0000
MOV BX, 123H
MOV CL, 0CH
SHRD AX, BX, CL
解:(1)AX=0012H,BX1234H (2)AX=0123H,BX=1234H
3-34 试写出80386/80486CPU 执行下列指令后,标志CF=?
MOV EAX, 96ABDC86H
BT EAX, 14H
解: CF=0
16
17
以下无正文
仅供个人用于学习、研究;不得用于商业用途。
Forpersonal use only in study and research; not for commercial use.
仅供个人用于学习、研究;不得用于商业用途。
Nurfür den persönlichen für Studien, Forschung, zu kommerziellenZwecken verwendet werden.
Pourl 'étude et la recherche uniquement à des fins personnelles; pas àdes fins commerciales.
仅供个人用于学习、研究;不得用于商业用途。
толькодля людей, которые используются дляобучения, исследований и не должныиспользоваться
вкоммерческих целях.
以下无正文
18
Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务