第三章
源操作数 目的操作数 源操作数 目的操作数
(1)MOV AX, 2048H 立即寻址 寄存器寻址
(2) MOV CL, 0FFH 立即寻址 寄存器寻址
(3) MOV BX, [SI] 寄存器间接寻址 寄存器寻址
(4) MOV 5[BX], BL 寄存器寻址 寄存器相对寻址
(5) MOV [BP+100H],AX 寄存器寻址 寄存器相对寻址
(6) MOV [BX+DI], ‘$’ 立即寻址 基址变址寻址
(7) MOV DX, ES:[BX+SI] 基址变址寻址 寄存器寻址
(8) MOV VAL[BP+DI], DX 寄存器寻址 相对基址加变址寻址
(9) IN AL, 05H 直接寻址 寄存器寻址
(10) MOV DS, AX 寄存器寻址 寄存器寻址
2. 已知:DS=1000H, BX=0200H, SI=02H, 内存 10200H~10205H 单元的内容分别为 10H, 2AH, 3CH, 46H, 59H, 6BH。下列每条指令执行完后 AX 寄存器的内容各是什么?
(1)MOV AX, 0200H (AX)=0200H
(2) MOV AX, [200H] (AX)=2A10H
(3) MOV AX, BX (AX)=0200H
(4) MOV AX, 3[BX] (AX)=5946H
(5) MOV AX, [BX+SI] (AX)=463CH
(6) MOV AX, 2[BX+SI] (AX)=6B59H
3。
下列源操作数字段的寻址方式和物理地址值如下:
(1) MOV AX, [100H]:直接寻址,物理地址值为DS*16+100H=10000H+100H=10100H。
(2) MOV AX, VAL:直接寻址,物理地址值为DS*16+VAL=10000H+0030H=10030H。
(3) MOV AX, [BX]:寄存器间接寻址,物理地址值为DS*16+BX=10000H+0100H=10100H。
(4) MOV AX, ES:[BX]:寄存器间接寻址,物理地址值为ES*16+BX=20000H+0100H=20100H。
(5) MOV AX, [SI]:寄存器间接寻址,物理地址值为DS*16+SI=10000H+00A0H=100A0H。
(6) MOV AX, [BX+10H]:寄存器相对寻址,物理地址值为DS*16+BX+10H=10000H+0100H+10H=10110H。
(7) MOV AX, [BP]:寄存器间接寻址,物理地址值为SS*16+BP=35000H+0200H=35200H。
(8) MOV AX, VAL[BP+SI]:相对基址变址寻址,物理地址值为SS*16+VAL+BP+SI=35000H+0030H+0200H+00A0H=352D0H。
(9) MOV AX, VAL[BX+DI]:相对基址变址寻址,物理地址值为DS*16+VAL+BX+DI=10000H+0030H+0100H+0024H=10154H。
(10) MOV AX, [BP+DI]:基址变址寻址,物理地址值为SS*16+BP+DI=35000H+0200H+0024H=35224H。
4。
(1) MOV AL, CL: 8A C1. 这条指令将CL寄存器的内容移动到AL寄存器 。
(2) MOV DX, CX: 8B D1. 这条指令将CX寄存器的内容移动到DX寄存器 。
(3) MOV [BX+100H],3150H: C7 87 00 01 50 31. 这条指令将立即字3150H移动到由BX加上位移100H所指向的内存位置 。
5。
6。
7。
8. 已知当前数据数据段中有一个十进制数字 0~9 的 7 段码表,其数值依次为 C0H, F9H, A4H, B0H, 99H, 92H, 82H, F8H, 80H, 98H。要求用 XLAT 指令将十进制数 57 转换成相应的7 段码值,存到 BX 寄存器中,试写出相应的程序段。(提示:参考例3.29,注意5和7要分别进行转换。)
解:
9。
11.
第四题是旧版第四版多出来的题目
12.编程将 AX 寄存器中的内容以相反的次序传送到 DX 寄存器中,并要求 AX 中的内容不被破坏,然后统计 DX 寄存器中 1 的个数是多少。
13。
设CS=1200H, IP=0100H, SS=5000H, SP=0400H, DS=2000H, SI=3000H, BX=0300H,(20300H)=4800H, (20302H)=00FFH, TABLE=0500H,PROG_N标号的地址为1200:0278H,
PROG_F标号的地址为3400:0ABCH。说明下列每条指令执行完后,程序将分别转移到何处执行。
(1) JMP PROG_N
(2) JMP BX
(3) JMP [BX]
(4) JMP FAR PROG_F
(5) JMP DWORD PTR[BX]
如将上述指令中的操作码JMP改成CALL,则每条指令执行完后,程序将转向何处执行? 并请画图说明堆栈中的内容和堆栈指针如何变化。
14。
解:
结果:AX BX CX DX
(2) 02H 04H 03H 01H
执行一次,ZF=0,退出循环。
执行两次,ZF=1,退出循环。
15. 某班有七个同学的英语成绩低于 80 分,分数存在 ARRAY 数组中,试编程完成以下工作:给每人加 5 分,结果存到 NEW 数组中.
解:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
ARRAY DB 7 DUP(?)
NEW DB 7 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV CX, 7
MOV BX, 0
LP1:
MOV AL, ARRAY[BX]
ADD AL, 05H
DAA
MOV NEW[BX], AL
INC BX
LOOP LP1
HLT
CODE ENDS
END START
调试程序:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
ARRAY DB 65H,76H,78H,54H,90H,85H,68H
NEW DB 7 DUP(?)
BUF1 DW 100 DUP (?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV CX, 7
MOV BX, 0
LP1:
MOV AL, ARRAY[BX]
ADD AL, 05H
DAA
MOV NEW[BX], AL
INC BX
LOOP LP1
HLT
CODE ENDS
END START
16。软中断指令INTn中n的含义是什么?其值的范围是多少?当n=0~4时,分别 定义什么中断?INTO指令用于什么场合?
- 软中断指令INT n中的n表示中断向量号,即指定了要执行的中断处理程序。在x86体系结构中,有效的中断向量号范围为0到255,其中一些已经被预留用于特定目的。
- 当n=0~4时,分别定义了以下的中断:
- INT 0:除法错误中断,当除数为0或商超出寄存器容量时发生。
- INT 1:单步执行中断,当TF标志位为1时,在每条指令执行后发生。
- INT 2:非屏蔽中断,当NMI引脚被激活时发生,通常用于处理硬件故障或紧急事件。
- INT 3:断点中断,由INT 3指令产生,通常用于调试程序。
- INT 4:溢出中断,由INTO指令产生,当OF标志位为1时发生。
- INTO指令用于检测有符号运算的溢出情况,如果OF标志位为1,则触发INT 4中断,否则继续执行下一条指令。
17。哪些指令可以使CF、DF和IF标志直接清0或置1?
- 有以下几种指令可以使CF(进位标志)直接清0或置1:
- CLC指令可以使CF清0。
- STC指令可以使CF置1。
- ADC指令可以在加法运算的基础上加上CF的值,如果产生进位,则使CF置1,否则使CF清0。
- SBB指令可以在减法运算的基础上减去CF的值,如果产生借位,则使CF置1,否则使CF清0。
- 有以下两种指令可以使DF(方向标志)直接清0或置1:
- CLD指令可以使DF清0。
- STD指令可以使DF置1。
- 有以下两种指令可以使IF(中断允许标志)直接清0或置1:
- CLI指令可以使IF清0。
- STI指令可以使IF置1。
关注微信公众号,回复“微机原理”获取答案的word文档下载