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