微机原理与接口技术第二版课后习题答案 龚尚福版 下载本文

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)