IBM-PC汇编语言程序设计第三章习题详解答案

IBM-PC汇编语言程序设计第三章习题详解答案
第三章答案1-20
=================================
1.已知(BX)=637DH,(SI)=2A9BH,位移量D=7237H,确定在以下各种寻址方式下的有效地址是什么
(1)立即寻址 没有
(2)直接寻址 7237H
(3)使用BX的寄存器寻址 没有
(4)使用BX的间接寻址 637DH
(5)使用BX的寄存器相对寻址 0D5F0H
(6)基址变址寻址 8E18H
(7)相对基址变址 004FH

2.试根据下列要求,写出相应的汇编指令.

(1)ADD DX,BX

(2)ADD AL,[BX][SI]

(3)ADD [BX][0B2H], CX

(4)MOV AX,2A59H
ADD [0524H] ,AX

(5)ADD AL ,0B5H

3.写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式。
(1)寄存器间接寻址

MOV BX,OFFSET [BLOCK][0AH] 或 LEA BX,BLOCK+0AH
MOV DX ,[BX] MOV DX ,[BX]

(2)寄存器相对寻址

MOV SI,OAH 或 LEA BX,BLOCK
MOV DX,[BLOCK][SI] MOV DX,[BX+0AH]

(3)基址变址寻址

MOV BX ,BLOCK
MOV SI,OAH
MOV DX,[BX][SI]

4.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容.

(1)MOV AX,1200H 1200H

(2)MOV AX,BX 0100H

(3)MOV AX,[1200] 4C2AH 注意,是字单元!

(4)MOV AX,[BX] 3412H 注意,是字单元!

(5)MOV 1100[BX] 4C2AH

(6)MOV AX,[BX][SI] 7856H

(7)MOV AX,1100[BX][SI] 65B7H

5.给定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH,(224A0)=0600H
(1)段内直接寻址 7CD9H
(2)使用BX及寄存器间接寻址方式的段内间接寻址 1200H
(3)使用BX及寄存器相对寻址方式的段内间接寻址 6319H

6.设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H单元的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来.
MOV BX,2000H
LES DI ,[BX]
MOV AX, ES:DI

7.在0024单元内有一条二字节指令JMP SHORT OBJ,如其中位移量为(1)27H,(2)6BH,(3)0C6H,试问转向地址OBJ的值分别为多少?
(1)064DH (2)0691H (3)05E0H

8.假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
(1)MOV AX,0ABH 立即数寻址 无物理地址

(2)MOV AX,BX 寄存器寻址 无物理地址

(3)MOV AX,[100] 直接寻址 20100H

(4)MOV AX,VAL 直接寻址 20050H

(5) MOV AX,[BX] 寄存器间接寻址 20100H

(6)MOV AX,ES:[BX] 直接寻址 21100H

(7)MOV AX,[BP] 寄存器间接寻址 20010H



(8)MOV AX,[SI] 寄存器间接寻址 200A0H

(9)MOV AX,[BX+10] 寄存器相对寻址 20110H

(10)MOV AX,VAL[BX] 寄存器相对寻址 20150H

(11)MOV AX,[BX][SI] 基址变址寻址 201A0H

(12)MOV AX,VAL[BX][SI] 相对基相变址寻址 201F0H

9.在ARRAY数组中存储了七个字数据,紧接着是名为ZERO的字单元表示如下:
ARRAY DW 23,36,2,100,32000,54,0
ZERO DW ?
(1)如果BX包含数组ARRAY的初始地址,请编写将数据0传送给ZERO单元。
指令: MOV AX, [BX][0CH] MOV ZREO ,AX
(2)如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元.
指令: MOV AX,ARRAY[BX] MOV ZREO,AX

10.如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?指令执行完后AX寄存器的内容是什么?
MOV AX,TABLE
LEA AX,TABLE
MOV AX,TABLE是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234H
LEA AX,TABLE是把符号地址TABLE 的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H

11.执行下列指令后,AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50
ENTRY DW 3
...
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
执行完指令后,(AX)=1E00H

12.下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRING DB "BASED ADDRESSING"
请编写指令将字符串的第1个和第7个字符传送给DX寄存器.
LEA AX,CSTRING
MOV DL,[AX] ;将第1个字符传送给DL
MOV DH,[AX+6] ;将第7个字符传送给DH

14.设(DS)=1B00H,(ES)=2B00H,有关存储单元的内容如图3.29所示,请写出两条指令把字变量X装入AX寄存器中.
LES BX,[2000]
MOV AX,ES:[BX]

15.求出以下各十六进制数与十六进制数62A0之和,并根据结果设置标志位SF,ZF,CF和OF的值.
(1)1234 (2)4321 (3)CFA0 (4)9D60
运算结果SF,ZF,CF,OF各位的值(从左至右依次往下)

(1) 74D4H
0 0 0 0

(2) A5C1H 1 0 0 1

(3) 4240 H 0 0 1 0

(4) 0000 H 0 1 1 0

16.求出以下各十六进制数与十六进制数4AE0之差,并根据结果设置标志位SF,ZF,CF和OF的值.
(1)1234 (2)5D90 (3)9090 (4)EA04
运算结果SF,ZF,CF,OF各位的值(从左至右依次往下)
(1) 5D14 0 0 0 0

(2) A870 1 0 0 1

(3) D870 1 0 0 0

(4) 34E4 0 0 1 0

17.写出

执行以下计算的指令序列,其中X,Y,Z,R和W均为存放16位带符号数单元的地址.
(1)Z<-W+(Z-X)
(2)Z<-W-(X+6)-(R+9)
(3)Z<-(W*X)/(Y+6),R<-余数
(4)Z<-((W-X)/5*Y)*2

[解:]
(1).MOV AX,Z ;把Z送到AX

SUB AX,X ;Z-X

ADD AX,W ;W+(Z-X)

MOV Z,AX ;结果保存在Z中

(2). MOV AX,R ;R送到AX中

ADD AX,9 ;R+9

MOV BX,X ;X送到BX中

ADD BX,6 ;X+6

ADD AX,BX ;(R+9)+(X+6),结果保存在AX中

MOV BX,W ; W送到BX中

SUB BX,AX ; W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和

MOV Z,BX ;最终结果送到Z中

(3)

MOV AX,W ;把W送到AX

IMUL X ;W*X 注意:低十六位保存在AX里,高十六位保存在DX里

MOV BX,Y ;把Y送到BX 里

ADD BX,6 ;Y+6

IDIV BX ;(W*X)/(Y+6) 注意:商保存在AX里,余数保存在DX里

MOV Z,AX ;把商送到Z中,

MOV R,DX ;把余数送到R中

(4)

MOV AX,W ;把W送到AX中

SUB AX,X ;W-X

CWD ;把AX中的十六位带符号数扩展成为32位,低十 ;六位保存在AX中,高十六位保在DX中
MOV BX,5 ;把5送到BX中

IDIV BX ;(W-X)/5被除数为32位,除数为16位 ;商为16位
IMUL Y ;上一步结果再乖以Y,积为32位

MOV BX,2 ;把2送到BX中

IMUL BX ;上一步乘法所得的积再乘以2,各为64位

MOV Z,EAX ;把结果中低32位放入Z双字单元中

MOV [Z+4],EDX ;把结果中高32位放入Z+4双字单元中

18.已知程序段如下:
MOV AX,1234H
MOV CL,4
ROL AX,CL
DEC AX
MOV CX,4
MUL CX
INT 2OH
试问:(1)每条指令执行完后,AX寄存器的内容是什么?
(2)每条指令执行完后,进位,符号,和零标志位的值是什么?
(3)程序结束时,AX和DX的内容是什么?

指令 执行完后CF,SF,ZF的值 本条指令执行完后AX的内容

MOV AX,1234H 1234H 0 0 0

MOV CL,4 1234H 0 0 0

ROL AX,CL 2341H 1 0 0

DEC AX 2340H 1 0 0

MOV CX,4 2340H

1 0 0

MUL CX 8918H 0 0 0

INT 20H

程序结束后,(AX)=8918H (DX)=0000H

19.下列程序段中的每条指令执行完后,AX寄存器及CF,SF,ZF和OF的内容是什么?
MOV AX,0
DEC AX
ADD AX,7FFFH
ADD AX,2
NOT AX
SUB AX,1
AND AX,58D1H
SAL AX,1
SAR AX,1
NEG AX
ROR AX,1

指令 执行完后CF,SF,ZF,OF的值 执行完后AX的内容

MOV AX,0 0 0010

DEC AX FFFFH 0100

ADD AX,7FFFH 7FFEH 0000

ADD AX,2 8000H 0101

NOT AX 7FFFH 0101

SUB AX,0FFFFH 8000H 1101

ADD AX,8000H 0000H 1011

SUB AX,1 FFFFH 1101

AND AX,58D1H 0000 58D1H

SAL AX,1 B1A2H 0101

SAR AX,1 D8D1H 0100

NEG AX 272FH 1000

ROR AX,1 9397H 1001

20.变量DATAX和变量DATAY的定义如下:
DATAX DW 0148H,2316H
DATAY DW 0237H,4052H
请按下列要求写出指令序列:
(1)DATAX和DATAY两个字数据相加,和存放在DATAY中.
MOV AX,DATAX
ADD DATAY,AX

(2)DATAX和DATAY两个双字数据相加,和存放在从DATAY开始的双字单元中.
MOV AX,DATAX
ADD DATAY,AX
MOV AX,[DATAX+2]
ADD [DATAY+2] ,AX

(3)解释下列指令的作用:
STC
MOV BX,DATAX
ADC BX,DATAY
本组指令的作用是:DATAX+DATAY带进位加法的和存放在BX中.

(4)DATAX和DATAY两个字数据相乘(用MUL)
MOV AX,DATAX
MUL DATAY

(5)DATAX和DATAY两个双字数据相乘(用MUL)
MOV AX,DATAX
MOV DX,[DATAX+2]
MUL DWORD DATAY

(6)DATAX除以23(用DIV)
MOV AX,DATAX
DIV 17H

(7)DATAX双字除以字DATAY(用DIV)
MOV AX,DATAX
CDW
DIV DATAY

首先,zf是最简单的,看结果是不是为0,这个必然不是0,所以zf=0


其次,cf是对于无符号数来说的,看看有最高位的更高位产生进位或借位,4321H+62A0H=A5C1显然没有进位,所以cf=0;
然后,of是对有符号数而言的,看运算结果是不是超出了指定寄存器的表示范围,首先我们要判断一下给出的两个数据是正数还是负数,看最高位是否为1,显然两个数的最高位都不是1,那么就都是正数,就不用再转成原码了。二者相加的结果为A5C1H超过了7FFF,所以溢出了of=1;
最后,sf是对有符号数计算结果正负值的判断,由于结果为A5C1H,最高位是1,所以为负值,则sf=1

相关文档
最新文档