资源描述
此文档仅供收集于网络,如有侵权请联系网站删除
微机原理第七章答案
7.3 设AX=1122,BX=3344H,CX=5566H,SS=095BH,SP=0040H,下述程序执行后AX,BX,CX,DX 4个通用寄存器内容是多少?画出堆栈存储器的物理地址及存储内容和SP指向的示意图。
PUSH AX
PUSH BX
PUSH CX
POP BX
POP AX
POP DX
参考答案:(BX)=5566H, (AX)=3344H, (DX)=1122H,(CX)=5566H
11H
22H
33H
44H
55H
66H
堆栈段物理地址=SS*16(左移4位)+SP
095EBH
095ECH
095FDH
095EEH
095EFH
SP→
095F0H
7.4 设 SP=0040H,如果用进栈指令存入5个数据,则SP=0036H ,若用出栈指令取出两个数据,则SP=003AH 。
7.5将表中程序段各指令执行后AX的值用十六进制数填入表中
参考答案:
程序段
AX
程序段
AX
MOV AX,0
0
OR AX,3FDFH
BFDFH
DEC AX
FFFFH
AND AX,0EBEDH
ABCDH
ADD AX,7FFFH
7FFEH
XCHG AH,AL
CDABH
ADC AX,1
8000H
SAL AX,1
9B56H
NEG AX
8000H
RCL AX,1
36ADH
7.6 用十六进制数填下表,已知DS=1000H,ES=2000H,SS=0FC0H,通用寄存器的值为0。
参考答案:逻辑地址=段基址:段内偏移地址
BP以SS为默认段基址,其余寄存器以DS为默认段基址
ES:为段前缀,以ES为段基址
指令
存储器操作数逻辑地址
SUB [BP],AL
0FC0H:0000H
MOV [BX],BH
1000H:0000H
MOV [DI],DL
1000H:0000H
MOV ES:[SI],BL
2000H:0000H
ADD 500H[BP],AH
0FC0H:0500H
SUB [SI-300H],AL
1000H:FD00H
MOV 1000H[DI],DL
1000H:1000H
MOV [BX-8],CL
1000H:FFF8H
MOV ES:1000H[DI],CH
2000H:1000H
MOV [BP+SI],DH
0FC0H:0000H
MOV [BX+DI],DL
1000H:0000H
7.7 试给出执行完下列指令后OF、SF、ZF、CF4个可测试标志位的状态(用十六进制给出FLAG的值,其余各位为0)
(1)MOV AX,2345H (2) MOV BX,5439H
ADD AX,3219H ADD BX,456AH
(3)MOV CX,3579H (4) MOV DX,9D82H
SUB CX,4EC1H SUB DX,4B5FH
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
溢出
方向
中断
陷阱
符号
为零
辅进
奇偶
进位
参考答案:(这里除了上面4个标志还考虑了奇偶标志PF和辅助进位标志AF)
(1)AX=555EH FLAG=0000H
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
(2)BX=99A3H FLAG=0894H
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
0
0
0
0
1
0
0
0
1
0
0
1
0
1
0
0
(3)CX=E6B8 FLAG=0081H
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
(4)DX=5223 FLAG=0014H
OF
DF
IF
TF
SF
ZF
AF
PF
0
CF
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
7.8 AX 中有一负数,欲求其绝对值,若该数为补码,则使用指令 NEG AX ;若为原码则用指令AND AX,7FFFH。 。
7.9 分别写出实现如下功能的程序段:
(1)将AX中间8位(做高8位),BX低4位和DX高4位(做低4位)拼成一个新字。(注意:左移右移操作)
AND AX,0FF0H
MOV CL,04H
SHL AX,CL
AND BL,0FH
AND DH,0F0H
SHR DH,CL
SHL BL,CL
OR AL,DH
OR AL,BL
(2)将CX中间8位取反,其余位不变
XOR CX,0FF0H
(3)将数据段以BX为偏移地址的连续3单元中的无符号数求和。
MOV CX,3
MOV AL,0
LAB:ADD AL,[BX]
ADC AH,00H;(注意字节单元的和可能超过一个字节,故这里和扩展至AH)
INC BX
LOOP LAB
(4) 将数据段中以BX为偏移地址的连续4单元中的内容颠倒过来
MOV CX,2 ;(4/2单元个数除2,循环计数)
MOV SI,BX
ADD SI,3 ;(指向最后一个数据单元,首地址+单元个数-1)
LAB:MOV AL,[BX]
XCHG AL,[SI]
MOV [BX],AL
INC BX
DEC SI
LOOP LAB
(5) 将BX中的4位压缩BCD数用非压缩数形式按序放在AL,BL,CL和DL中
MOV CL,4 (注意先后次序,不能用其它寄存器)
MOV DL,BL
AND DL,0FH
MOV AL,BH
SHR AL,CL
XCHG BH,BL
AND BL,0FH
SHR BH,CL
MOV CL,BH
(6) 不用乘法指令实现AL(无符号数)乘以20
AL*(24+22)( 24左移4位,22左移2位)
MOV AH,0
MOV CL,2
SAL AX,CL ;进行乘4操作
MOV BX,AX ;保留乘4中间结果
SAL AX,CL;再移2次,相当于乘16
ADD AX,BX
7.10 一段数据定义为:
DATA SEGMENT
S1 DB 0,1,2,3,4,5
S2 DB ‘12345’
COUNT=$-S1
NB DB 3DUP(2)
NW DW 120,-256
P DW -1
DATA ENDS
(1)画出该数据段数据存储形式(注意:符号常量COUNT不分配存储单元)
地址
内容
S1 -0000H
00H
0001H
01H
0002H
02H
0003H
03H
0004H
04H
0005H
05H
S2 -0006H
31H
0007H
32H
0008H
33H
0009H
34H
000AH
35H
NB -000BH
02H
000CH
02H
000DH
02H
NW -000EH
78H
000FH
00H
0010H
AAH
0011H
FDH
P -0012H
FFH
0013H
FFH
(2)在下表中填写各变量的偏移地址和各变量的值
变量名
偏移地址
变量值
变量名
偏移地址
变量值
S1
0000H
00H
NW
000EH
0078H
S2
0006H
31H
P
0012H
FFFFH
NB
000BH
02H
(3) 填写表中程序段各指令执行后。目的寄存器的值,并指出源操作数所使用的寻址方式(注意:COUNT是符号常量是立即数)
程序段
目的寄存器的值
源操作数的寻址方式
MOV BX,OFFSET S1+3
0003H
立即寻址
MOV SI,OFFSET S2
0006H
立即寻址
MOV CL,COUNT
000BH
立即寻址
MOV BP,NW+2
FDAAH
直接寻址
MOV DX,WORD PTR NB
0202H
直接寻址
MOV AL,[SI+3]
34H
变址寻址
MOV AH,[SI+BX+1]
35H
基址变址寻址
MOV CH,BYTE PTR NW+3
FDH
直接寻址
(4)改正下列不正确的指令错误
a. MOV AX,S1 改正 MOV AX,WORD PTR S1
b. MOV BP,OFFSET S2 改正 MOV BX,OFFSET S2
MOV CL,[BP] MOV CL,[BX]
c. MOV SI,OFFSET NB 改正 MOV SI,OFFSET NB
MOV [SI],‘+’ MOV BYTE PTR [SI],‘+’
d. MOV DL,NW+2 改正 MOV DL, BYTE PTR NW+2
e. MOV DI,CH 改正 MOV DI,CX
f. MOV BX, OFFSET S1 改正 MOV BX, OFFSET S1
MOV DH,BX+3 MOV DH,[BX+3]
g. INC COUNT 改正 MOV BX,COUNT INC BX (符号常数不能加1)
h. MOV NB,S2 改正 MOV AL,S2 MOV NB,AL(两个内存变量不能直接传送)
i. MOV AX,[BX+S1] 改正 MOV AX,WORD PTR [BX+S1]
j. ADD AX,[DX+NW] 改正 ADD AX,[BX+NW]
只供学习与交流
展开阅读全文