MOV MOV
AX,[BP][SI] AX,[BX+SI-1234H]
【解】:MOV AX,1234H 立即寻址
MOV MOV MOV MOV MOV MOV MOV
AX,BX 寄存器寻址 AX,[BX] 寄存器间接寻址 AX,TABLE ;TABLE是一个变量名 直接寻址方式 AX,[1234H] 直接寻址方式 AX,[BX+1234H] 寄存器相对寻址 AX,[BP][SI] 基址变址寻址 AX,[BX+SI-1234H] 相对地址变址寻址
3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:
MOV MOV MOV MOV MOV
AX,[1234H] AX,[BX] AX,TABLE[BX] AX,[BP] AX,[BP][SI]
【解】: 存储单元地址:(DS)×10H + EA =2000H×10H+1234H=21234H
存储单元地址:(DS)×10H +(BX)=2000H×10H+0100H=20100H 存储单元地址:(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH 存储单元地址:(SS)×10H+EA=1000H×10H+0010H=10010H
储单元地址:(SS)×10H+EA=1000H×10H+0010H+0002H =10012H
3.4 设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式:
⑴ 直接寻址 ⑵ 寄存器间接寻址 ⑶ 寄存器相对寻址 ⑷ 基址变址寻址 【解】:(1)直接寻址(2)寄存器间接寻址(3)寄存器相对寻址(4)基址变址寻址 MOV AX, ARRAY+8 MOV BX, ARRAY+8 MOV BX, 8 LEA BX, ARRAY MOV AX, [BX] MOV AX, ARRAY[BX] MOV SI, 8
MOV AX,[BX+SI]
3.5 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在当前代码段偏移地址是0100H处,(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址
⑴ JMP NEAR PTR ⑵ JMP BX
⑶ JMP WORD PTR ARRAY 【解】:⑴ JMP
⑵ JMP ⑶ JMP
NEAR PTR 此转移指令的目标转移地址为:20100H BX 此转移指令的目标转移地址为:21000H WORD PTR ARRAY 此转移指令的目标转移地址为:23000H
3.6 设当前(CS)=2000H,(IP)=2000H,标号NEXT定义在3000H:1000H处。当前(DS)=1000H,(BX)=1000H,(11000H)=00H,(11001H)=03H,(11002H)=00H,(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H,(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址:
⑴ JMP FAR
PTR
NEXT
⑵ JMP DWORD ARRAY 【解】:⑴ JMP
⑵ JMP
FAR
PTR
NEXT 此转移指令的目标转移地址为:31000H
DWORD ARRAY 此转移指令的目标转移地址为:30300H
3.7 下列每组指令有何区别?
(1) MOV AX,1234H MOV AX,[1234H] (2) MOV AX,TABLE (3) MOV AX,TABLE
MOV AX,[TABLE]
AX,TALBE
LEA
(4) MOV AX,BX MOV AX,[BX]
【解】:(1) MOV AX,1234H 将立即数1234H送到寄存器AX中
MOV AX,[1234H]
(2) MOV AX,TABLE
将存储区[1234H]中的内容送到寄存器AX中
将标号TABLE的地址送到寄存器AX中
MOV AX,[TABLE] 将存储区[TABLE] 中的内容送到寄存器AX中 (3) MOV AX,TABLE
将标号TABLE的地址送到寄存器AX中
LEA AX,TALBE 将标号TABLE的地址送到寄存器AX中 (4) MOV AX,BX 寄存器寻址
MOV AX,[BX] 寄存器间接寻址
3.8 MOV CS,AX指令正确吗?
【解】:MOV CS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指令
进行更改。
3.9 写一指令序列,将3456H装入DS寄存器。 【解】:MOV AX, 3456H MOV DS, AX
3.10 若正在访问堆栈中03600H单元,则SS和SP的值是多少?
【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。
3.11 若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。
【解】:物理地址=(SS)×10H+SP
SP→
SP→ 2000AH
SP→20006H 78H 34H 12H 20007H 20008H 20009H 2000AH 56H 34H 12H 3.16 解释XLAT指令是怎样转换AL寄存器中的内容的。并编写一段程序用XLAT指令将BCD码0~9转换成对应的ASCII码,并将ASCII码存入数据ARRAY中。
【解】:XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。 程序如下:TABLE DB 30H, 31H, ┅, 39H ARRAY DB 1O DUP(?) MOV CL, 10 MOV SI, 0
MOV BX, OFFSET TABLE MOV AL, AL AGAIN: XLAT
MOV [SI], AL INC SI INC AL LOOP AGAIN
3.17 若(AX)=0001H,(BX)=0FFFFH,执行ADD AX,BX之后,标志位ZF、SF、CF和OF各是什么?
【解】: (AX)= 0001H = 0000 0000 0000 0001 B + (BX)=0FFFFH = 1111 1111 1111 1111 B
(AX)= 0001H = 1 0000 0000 0000 0000 B 则:ZF=1、SF=0、CF=1、OF=0 3.18 写一指令序列完成将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。
【解】: OR AX, 000FH (OR AX, 0000 0000 0000 1111 B) AND AX, 1FFFH (AND AX, 0001 1111 1111 1111 B)