3-2 分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,试用表达式表示出EA=? PA=? 例:MOV [DI],AX 源操作数:寄存器寻址
目的操作数:寄存器间接寻址,其EA=(DI)
PA=((DS)*16)+(DI) (1)MOV SI,2100H (2)MOV CX,DISP[BX] (3)MOV [SI],AX (4)ADC AX,[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,
3-3已知8086种的一些寄存器的内容和一些存储单元的内容如下图所示,试指出下列各条指令执行后,AX中的内容(即(AX)=?)。
M
CPU
12H 30100H
BX 0100H 30101H 34H
0002H 30102H 56H SI
3000H 30103H DS 78H
…
31200H 2AH 5)MOV AX,1100H[BX]
4CH 31201H
6)MOV AX,[BX][SI]
B7H 31202H
7)MOV AX,1100H[BX+SI] 31203H 65H
8)LEA AX,[SI]
答:5)∵ EA=1100H+0100H=1200H 而 PA=( 段首址*16)+偏移地址 =(3000H*16)+1200H =31200H
∴(AX) = 4C2AH
6 ) ∵ EA=0100H+0002H=0102H
而 PA=( 段首址*16)+偏移地址 =(3000H*16)+0102H =30102H
∴(AX) =7856H
7) ∵ EA=1100H++0100H+0002H=1202H 而 PA=( 段首址*16)+偏移地址 =(3000H*16)+1202H =31202H
∴(AX) =65B7H
8) ∵ (AX)←SI的值作为EA ∴ (AX) =0002H
3-4 已知(AX)=2046H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于?
(1)OUT DX,AL (2) OUT DX, AX (3) IN AL, PORT (4) IN AX, 80H (5) OUT PORT1, AL (6) OUT PORT1, AX
3-5已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213H,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化图。图中应标出存储单元的实际地址PA。
PUSH AX
PUSH CX ;位置1
A2FBCH 位置1 13H POPF ;位置2
F2H A2FBDH 答:当指令执行到位置1和位置2时
位置2 A2FBEH 31H 堆栈区和SP指针内容的变化如右图所示。
A2FBFH A2FC0H
8BH
3-6 识别下列指令的正确性,对错误指令,说明出错的原因 (1)MOV DS,100 (2) MOV [1000H],23H (3)MOV [1000H],[2000H] (4) MOV DATA,1133H
(5)MOV 1020H DX (6) MOV AX,[0100H+BX+BP] (7)MOV CS,AX (8) PUSH AL
(9)PUSH WORD PTR [SI] (10) IN AL,[80H] (11)OUT CX,AL (12) IN AX,380H
(13)MOV CL,3300H (14) MOV AX,2100H[BP] (15)MOV DS,ES (16) MOV IP,2000H (17)PUSH CS (18) POP CS
(19)LDS CS, [BX] (20) MOV GAMMA,CS
3-7已知存储器数据段中的数据如右图所示。 阅读下列程序段后回答:
每个程序段的运行结果是什么? 1) LEA SI,NUM1 MOV AX,[SI] ADD AX,4[SI] MOV 8[SI],AX ADD SI,2 MOV AX,[SI] ADC AX,4[SI] MOV 8[SI],AX 2)MOV AX,NUM1 ADD AX,NUM2 MOV SUM,AX MOV AX,NUM1+2 ADC AX,NUM2+2 MOV SUM+2,AX
答:上述2个程序段的运行结果相同,
1)的运行结果为:
LEA SI,NUM1
MOV AX,[SI]; (AX)=4148H ADD AX,4[SI];(AX)=63A0H MOV 8[SI],AX ADD SI,2 MOV AX,[SI];(AX)=2816H ADC AX,4[SI];(AX)=0AC68H MOV 8[SI],AX
M
NUM1
48H 41H 16H
28H NUM2
58H 22H 52H
84H SUM
A0H 63H 68H 0ACH
2)的运行结果如右图所示:
3-8 已知数据如图所示,数据是低位在前,按下列要求编写程序段 1 完成NUM1和NUM2的两个字数据相加,和存放在NUM1里
2完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,放在SUM单元。
3完成NUM1单元开始的连续8个字节数据相加,和为16位数,放在SUM和SUM+1两单元中(用循环)
4完成NUM1和NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。
3-9 已知的BCD数如图所示,低位在前,按下列要求编写计算BCD数据(为组合型BCD)的程序段。
1 完成从NUM1单元开始的连续8个组合型BCD数相加,和(超过一字节)放在SUM和SUM+1两单元中
2 完成NUM1单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差=?(CF)=?