汇编作业题答案 下载本文

1 已知8086系统某存储单元物理地址为12345H,写出4个可以与它对应的“逻辑地址”。

答:可以与物理地址12345H对应的逻辑地址有:

1234H:0005H, 1230H:0045H, 1220H:0145H, 1224H:0105H, ??

2 已知8086系统某存储单元物理地址为12345H,可以与它对应的“逻辑地址”中,段基址最大值,最小值分别是多少?

答:可以与物理地址12345H对应的逻辑地址中,段基址的最大值为1234H,最小值为0235H。

分析:偏移地址取最大值时,对应的段基址为最小。偏移地址可选的最大值为

0FFF5H(最后一位必须为5),因此最小的段基址=(12345H-0FFF5H)/10H=0235H。 偏移地址取最小值时,对应的段基址最大。偏移地址可选的最小值为0005H

(最后一位必须为5),因此最大的段基址=(12345H-0005H)/10H=1234H。

3 8086微机最多可以有多少个不同的“段基址”?为什么?

16

答:由于段基址由16位二进制数表示,因此可以有2=65536个不同的段基址。

4 某数据段内有如下数据定义:

X db 30, 30H, ‘ABC’, 2-3, ?, 11001010B

dw 0FFH,-2, “CD”

Y dd 20 dup(15, 3 dup(?), 0) Z db 3 dup(?) W dw Z-X

假设变量X的偏移地址为20H。

(1) 按照图2-1的格式写出变量X各数据在内存中的具体位置和相关内存单

元的值。

(2) 写出变量Y,Z的偏移地址。

0020H(3) 写出变量W的值 X1EH30H答:(1)变量X各数据在内存中的具体位置和相关内存单

41H元的值如右图。 42H(2) 变量Y的偏移地址为002EH; 43H0FFH变量Z的偏移地址为002EH+4×5×20=01BEH

00H(3) 变量W的值等于变量Z和X偏移地址之差 0CAH01BEH-0020H=019EH

0FFH它等于变量X、Y所占用内存单元的字节数。

00H 0FEH0FFH

44H

43H

002EHY

5 下列指令的源操作数段基址在哪个段寄存器中?

(1)MOV AX, [BP][SI] (2)MOV AX, CS:8[DI] (3)MOV AX, 2[EBP*1] (4)MOV AX, FS:4[ESP] (5)MOV AX, 2[EBP][EAX] (6)MOV AX, [ECX][EBP*4]

(7)MOC AX, [EDX][EBP] (8)MOV AX, ES:10[EBP][EAX*2] 答:各指令源操作数段基址使用的段寄存器如下: (1) SS (2) CS (3) SS (4) FS (5) SS (6) DS (7) DS (8) ES

6 判断下列指令是否正确。若不正确,指出错误原因 (1)MOV AX, [EBX] (2)MOV SI, DL

(3)MOV EBP, [ESP][EAX*3](4)LEA AX, 3006H (5)MOV [BP][DI], 0 (6)MOV [SI], [DI] (7)MOV ES, 1000H (8)MOV AX, X+2

(9)MOV AX, CX+2 (10)MOV [EAX][EAX*2], AL 答: (1)指令MOV AX, [EBX] 是正确的。

(2)指令MOV SI, DL是错误的,两个操作数类型不匹配。

(3)指令MOV EBP, [ESP][EAX*3] 是错误的,比例因子不能为3。

(4)指令LEA AX, 3006H是错误的,LEA指令的源操作数必须为内存操作数。

(5)指令MOV [BP][DI], 0是错误的,操作数类型无法确定。

(6)指令MOV [SI], [DI] 是错误的,不能同时出现两个内存操作数。 (7)指令MOV ES, 1000H是错误的,装载段寄存器时,源操作数不能为立即数。

(8)如果“X”是用常数表达式定义的符号(例如:X EQU 5+6),或者是用“DW”定义的内存变量,指令MOV AX, X+2是正确的。否则这条指令是错误的。

(9)指令MOV AX, CX+2是错误的,源操作数表达式CX+2不是一个可以直接计算的“常数表达式”。

(10)指令MOV [EAX][EAX*2], AL是正确的。

7 现有(DS)=2000H ,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的内容。 (1)MOV AX, 1200H (2)MOV AX, BX

(3)MOV AX, [1200H] (4)MOV AX, [BX]

(5)MOV AX, 1100H[BX] (6)MOV AX, [BX][SI]

(7)MOV AX, 1100H[BX][SI] 答 :(1)指令MOV AX, 1200H执行后,(AX)=1200H (立即数操作数)。 (2)指令MOV AX, BX执行后,(AX)=0100H (寄存器操作数)。

(3)指令MOV AX, [1200H] 执行后,(AX)=4C2AH(直接地址,EA=1200H)

(4)指令MOV AX, [BX] 执行后,(AX)=3412H(寄存器间接寻址,EA=0100H) (5)指令MOV AX, 1100H[BX] 执行后,(AX)= 4C2AH(相对地址,EA=1200H) (6)指令MOV AX, [BX][SI] 执行后,(AX)=7856H(基址变址寻址,EA=0102H)

(7)指令MOV AX, 1100H[BX][SI] 执行后,(AX)=65B7H

(相对基址变址寻址,EA=1202H)

8 已经定义字符串MYSTRING如下:

MYSTRING DB ‘A Sample for addressing.’

用适当的指令把这个字符串的第5,12个字符(注:第0个字符是’A’)送入BX寄存器。

答:可以用如下两条指令完成: MOV BL, MYSTRING[5] MOV BH, MYSTRING[12]

9 下面两条指令的功能有什么区别? MOV AX, BX MOV AX, [BX]

答:指令“MOV AX, BX”把BX寄存器的内容装入到AX中。

指令“MOV AX, [BX]”把内存储器一个字的内容装入AX寄存器。该字的段基址在DS中,偏移地址在BX中。

10 已经定义数据段如下: DATA SEGMENT NUM=56

X DB NUM Y DB 27 Z DW 148 DATA ENDS

指出下列指令中的错误:

(1)MOV Y, X (2)MOV BL, 04B8H (3)MOV AL, Z (4)MOV [BX], 3

(5)MOV [BX], [DI] (6)MOV DS, DATA (7) MOV NUM, AX (8)MOV ES, DS (9) MOV AX, FLAGS (10)MOV CS, AX

答: (1)指令MOV Y, X 同时出现了两个存储器操作数。

(2)指令MOV BL, 04B8H 操作数类型不匹配(04B8H是16位立即数,BL是8位 寄存器)。

(3)指令MOV AL, Z 操作数类型不匹配(Z是16位操作数,BL是8位寄

存器)。

(4)指令MOV [BX], 3 操作数类型不能确定。

(5)指令MOV [BX], [DI] 出现了两个存储器操作数。 (6)指令MOV DS, DATA 不能把立即数装入段寄存器。 (7)指令MOV NUM, AX 立即数不能用作目的操作数。 (8)指令MOV ES, DS 不能在段寄存器之间直接传输。

(9)指令MOV AX, FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。 (10)指令MOV CS, AX 中,CS寄存器不能用作目的操作数。

11 用适当的指令,把下面字符串STRING中的“&”字符用空格代替。

STRING DB “The Date is FEB&03” 答:可以使用如下指令: MOV STRING[15], 20H ; 20H是空格的ASCII代码

12 根据以下要求,写出对应的汇编语言指令

(1) 把BX和DX寄存器内容相加,结果存入DX寄存器。

(2) 使用BX和SI寄存器进行基址变址寻址,把存储器中一字节内容与AL

内容相加,结果存入存储单元。

(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式,把存储器中一个双

字与ECX相加,结果存入ECX。

(4) 用偏移地址1020H直接寻址,把存储单元一个字内容与立即数3相加,

结果存入存储单元。

(5) 将AL寄存器内容与立即数120相加,结果存入AL寄存器。 答: (1) ADD DX, BX (2) ADD [BX][SI], AL (3) ADD ECX, [BX+0B2H] (4) ADD WORD PTR[1020H], 3 (5) ADD AL, 120

13 求以下各十六进制数与62A8H之和,并根据结果写出标志位SF、CF、ZF、OF的值。

(1)1234H (2)4321H (3)0CFA0H (4)9D60H (5)0FFFFH 答: (1)1234H+62A8H=74DCH SCZO= 0000

(2) 4321H+62A8H=0A5C9H SCZO= 1001 (3) 0CFA0H+62A8H=3248H SCZO= 0100 (4) 9D60H +62A8H=0008H SCZO= 0100 (5) 0FFFFH+62A8H=62A7H SCZO= 0100

14 求以下各十六进制数与4AE0H之差,并根据结果写出标志位SF、CF、ZF、OF的值。

(1)1234H (2)5D90H (3)9076H (4)0EA04H (5)0FFFFH 答:

(1) 1234H-4AE0H=0C754H (2) 90H-4AE0H=12B0H (3) 9076H-4AE0H=4597H (4) 0EA04H-4AE0H=9F24H (5) 0FFFFH-4AE0H=0B51FH SCZO= 1100 SCZO= 0000 SCZO= 0001 SCZO= 1000 SCZO= 1000

15 写出执行以下计算的指令序列,其中各变量均为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, W MOV BX, Z SUB BX, X ADD AX, BX MOV Z, AX (2) MOV AX, W MOV BX, X ADD BX, 6 SUB AX, BX MOV BX, R ADD BX, 9

SUB AX, BX MOV Z, AX (3) MOV AX, W IMUL X

MOV BX, Y ADD BX, 9 IDIV BX MOV Z, AX MOV R, DX

(4) MOV AX, Y MOV BX, 5 IMUL BX MOV BX, AX MOV AX, W SUB AX, X MOV CX, 2 IMUL CX IDIV BX MOV Z, AX