微型计算机原理与应用第四版课后答案.docx
《微型计算机原理与应用第四版课后答案.docx》由会员分享,可在线阅读,更多相关《微型计算机原理与应用第四版课后答案.docx(9页珍藏版)》请在冰豆网上搜索。
微型计算机原理与应用第四版课后答案
微机原理第七章答案
7.3设AX=1122,BX=3344H,CX=5566H,SS=095BH,SP=0040H,下述程序执行
后AX,BX,CX,DX4个通用寄存器内容是多少?
画出堆栈存储器的物理地址及存储内容和SP指向的示意图。
PUSH
AX
PUSH
BX
PUSH
CX
POP
BX
POP
AX
POP
DX
参考答案:
(BX)=5566H,(AX)=3344H,(DX)=1122H,(CX)=5566H
095EEH
095EFH
Si095F0H
7.4设SP=0040H,如果用进栈指令存入5个数据,则SP=0036H,若用出栈
指令取出两个数据,则SP=003AH。
7.5将表中程序段各指令执行后AX的值用十六进制数填入表中参考答案:
程序段
AX
程序段
AX
MOVAX,0
0
ORAX,3FDFH
BFDFH
DECAX
FFFFH
ANDAX,0EBEDH
ABCDH
ADDAX,7FFFH
7FFEH
XCHGAH,AL
CDABH
ADCAX,1
8000H
SALAX,1
9B56H
NEGAX
8000H
RCLAX,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
MOVES:
[SI],BL
2000H:
0000H
ADD500H[BP],AH
0FC0H:
0500H
SUB[SI-300H],AL
1000H:
FD00H
MOV1000H[DI],DL
1000H:
1000H
MOV[BX-8],CL
1000H:
FFF8H
MOVES:
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)
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
溢岀
方向
中断
陷阱
符
号
为
零
辅
进
奇偶
进位
参考答案:
(这里除了上面4个标志还考虑了奇偶标志PF和辅助进位标志AF)
(1)AX=555EHFLAG=OOOOH
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=99A3HFLAG=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=E6B8FLAG=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=5223FLAG=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.8AX中有一负数,欲求其绝对值,若该数为补码,则使用指令NEG
AX;若为原码则用指令ANDAX,7FFFH。
。
7.9分别写出实现如下功能的程序段:
(1)将AX中间8位(做高8位),BX低4位和DX高4位(做低4位)拼成
一个新字。
(注意:
左移右移操作)
ANDAX,OFFOH
MOVCL,O4H
SHLAX,CL
ANDBL,OFH
ANDDH,OFOH
SHRDH,CL
SHLBL,CL
ORAL,DH
ORAL,BL
(2)将CX中间8位取反,其余位不变
XORCX,OFFOH
(3)将数据段以BX为偏移地址的连续3单元中的无符号数求和。
MOVCX,3
MOVAL,O
LAB:
ADDAL,[BX]
ADCAH,00H;(注意字节单元的和可能超过一个字节,故这里和扩展至
AH)
INCBX
LOOPLAB
(4)将数据段中以BX为偏移地址的连续4单元中的内容颠倒过来
MOVCX,2;(4/2单元个数除2,循环计数)
MOVSI,BX
ADDSI,3;(指向最后一个数据单元,首地址+单元个数-1)
LAB:
MOVAL,[BX]
XCHGAL,[SI]
MOV[BX],AL
INCBX
DECSI
LOOPLAB
⑸将BX中的4位压缩BCD数用非压缩数形式按序放在AL,BL,CL和DL中
MOVCL,4(注意先后次序,不能用其它寄存器)
MOVDL,BL
ANDDL,0FH
MOVAL,BH
SHRAL,CL
XCHGBH,BL
ANDBL,0FH
SHRBH,CL
MOVCL,BH
(6)不用乘法指令实现AL(无符号数)乘以20
Al*(24+22)(24左移4位,22左移2位)
MOVAH,0
MOVCL,2
SALAX,CL;进行乘4操作
MOVBX,AX;保留乘4中间结果
SALAX,CL;再移2次,相当于乘16
ADDAX,BX
7.10一段数据定义为:
DATASEGMENT
51DB0,1,2,3,4,5
52DB‘2345'
C0UNT=$-S1
NBDB3DUP
(2)
NWDW120,-256
PDW-1
DATAENDS
(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是符号常量是立即数)
程序段
目的寄存器的值
源操作数的寻址方式
MOVBX,OFFSET
0003H
立即寻址
S1+3
MOVSI,OFFSETS2
0006H
立即寻址
MOVCL,COUNT
000BH
立即寻址
MOVBP,NW+2
FDAAH
直接寻址
MOVDX,WORDPTR
0202H
直接寻址
NB
MOVAL,[SI+3]
34H
变址寻址
MOVAH,[SI+BX+1]
35H
基址变址寻址
MOVCH,BYTEPTR
FDH
直接寻址
NW+3
(4)改正下列不正确的指令错误
a.MOVAX,S1改正
b.MOVBP,OFFSETS2改正
MOVCL,[BP]c.MOVSI,OFFSETNB改正
MOVAX,WORDPTRS1
MOVBX,OFFSETS2
MOVCL,[BX]
MOVSI,OFFSETNB
MOV[SI],+'
MOVBYTEPTR[SI],+'
d.MOVDL,NW+2
改正MOVDL,BYTEPTRNW+2
e.MOVDI,CH
改正MOVDI,CX
f.MOVBX,OFFSETS1改正
MOVBX,OFFSETS1
MOVDH,BX+3
MOVDH,[BX+3]
g.INCCOUNT
1)
改正MOVBX,COUNT
INCBX(符号常数不能加
h.MOVNB,S2
改正MOVAL,S2
MOVNB,AL(两个内存变量不能直接
传送)
i.MOVAX,[BX+S1]
改正MOVAX,WORDPTR[BX+S1]
j.ADDAX,[DX+NW]
改正ADDAX,[BX+NW]