1、下列指令中操作不正确的是
(a) MOV AX,F00AH
(b) MOV AL,ES:[BX+1]
(c)MOV AL ,[CX]
(d)MOV SI,[BX+BP+2]
(e) MOV AX,1234H
答案:ACD
解答:
A:错误源操作数为立即数,源操作数的寻址方式为为立即寻址,立即数以数字开头,以A~F开头的16进制数必须前缀0;因此应该是MOV AX,F00AH
B:正确,为基址寻址,在附加段上的基址寻址,在寻址中用到的段寄存器包括了CS,DS,ES,SS代 码段,数据段,附加段,堆栈段
寻址程序(指令):CS + IP; 寻址数据: (DS或ES)+(SI或DI、BX、 BP); 寻址 堆 栈:SS + (SP或BP)
C:错误,间址寻址寄存器,在实模式下的间址寄存器 约定访问的逻辑段为:
BX、SI、DI 数据段
BP 堆栈段
D:错误,基址加变址寻址,在实模式下的变址寄存器 约定访问的逻辑段 适用:
SI、DI 数据段 无比例因子,16位寻址(注意实模式下无比例因子)
E:正确,立即数,立即寻址
2、列表写出下列指令中的目标操作数、源操作数的寻址方式,如果由非法的内存操作数请改正,并写出CPU所寻址的逻辑段。
(1)MOV BX,50
(2)CMP [BX],100,不合规,基址寻址内存操作数长度不确定,立即数长度不确定,必须要在BX 前加PTR 来规定长度
(3)ADD [SI],1000,不合规,理由同上
(4)MOV BP,SP
(5)MOV BX,[BP+4]
(6)MOV AX,[BX+DI+5]
序号 | 目标操作数寻址 | 源操作数寻址 | CPU所寻逻辑段 |
1 | 寄存器寻址 | 立即寻址 | |
2 | 间址寻址 | 立即寻址 | 数据段(目标) |
3 | 间址寻址 | 立即寻址 | 数据段(目标) |
4 | 寄存器寻址 | 寄存器寻址 | |
5 | 寄存器寻址 | 间址寻址 | 堆栈段(源) |
6 | 寄存器寻址 | 基址加变址寻址 | 数据段(源) |
3、第三章课后习题6
TABLE DW 158,258,358,458
ENRTY DW 3
对DS初始化的代码段:
MOV BX,OFFSET TABLE
MOV SI,ENTRY
MOV AX,[BX+SI]
上面的指令执行后,AX是
答案:6601H
程序翻译:定义一个TABLE字数组,每个占两个字节,
首先上BX赋值为TABLE的偏移地址,再把内存中地址为 DS:[BX+3]的值赋值给AX,AX是16位的,也就是4位16进制数,MOV取数有方向性,6601H (PUSH POP,高位先放,低位先取)
低
1EH | BX |
01H | BX+1 |
02H | BX+2 |
01H | BX+3 |
66H | |
01H | |
CAH | |
01H |