微型计算机的原理及的应用第四版课后答案详解郑学坚朱定华.docx
《微型计算机的原理及的应用第四版课后答案详解郑学坚朱定华.docx》由会员分享,可在线阅读,更多相关《微型计算机的原理及的应用第四版课后答案详解郑学坚朱定华.docx(8页珍藏版)》请在冰豆网上搜索。
![微型计算机的原理及的应用第四版课后答案详解郑学坚朱定华.docx](https://file1.bdocx.com/fileroot1/2023-1/31/a2457467-bbf8-446e-babe-e56463ee77ea/a2457467-bbf8-446e-babe-e56463ee77ea1.gif)
微型计算机的原理及的应用第四版课后答案详解郑学坚朱定华
微机原理第七章答案
7.3设AX=1122,BX=3344H,CX=5566H,SS=095BH,SP=0040H,下述程序执行后AX,BX,CX,DX4个通用寄存器内容是多少?
画出堆栈存储器的物理地址及存储内容和SP指向的示意图。
PUSHAX
PUSHBX
PUSHCX
POPBX
POPAX
POPDX
参考答案:
(BX)=5566H,(AX)=3344H,(DX)=1122H,(CX)=5566H
堆栈段物理地址=SS*16(左移4位)+SP
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)
(1)MOVAX,2345H
(2)MOVBX,5439H
ADDAX,3219HADDBX,456AH
(3)MOVCX,3579H(4)MOVDX,9D82H
SUBCX,4EC1HSUBDX,4B5FH
OF
DF
IF
TF
SF
ZF
0
AF
0
PF
0
CF
溢出
方向
中断
陷阱
符号
为零
辅进
奇偶
进位
参考答案:
(这里除了上面4个标志还考虑了奇偶标志PF和辅助进位标志AF)
(1)AX=555EHFLAG=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=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中有一负数,欲求其绝对值,若该数为补码,则使用指令NEGAX;若为原码则用指令ANDAX,7FFFH。
。
7.9分别写出实现如下功能的程序段:
(1)将AX中间8位(做高8位),BX低4位和DX高4位(做低4位)拼成一个新字。
(注意:
左移右移操作)
ANDAX,0FF0H
MOVCL,04H
SHLAX,CL
ANDBL,0FH
ANDDH,0F0H
SHRDH,CL
SHLBL,CL
ORAL,DH
ORAL,BL
(2)将CX中间8位取反,其余位不变
XORCX,0FF0H
(3)将数据段以BX为偏移地址的连续3单元中的无符号数求和。
MOVCX,3
MOVAL,0
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
(5)将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
S1DB0,1,2,3,4,5
S2DB‘12345’
COUNT=$-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,OFFSETS1+3
0003H
立即寻址
MOVSI,OFFSETS2
0006H
立即寻址
MOVCL,COUNT
000BH
立即寻址
MOVBP,NW+2
FDAAH
直接寻址
MOVDX,WORDPTRNB
0202H
直接寻址
MOVAL,[SI+3]
34H
变址寻址
MOVAH,[SI+BX+1]
35H
基址变址寻址
MOVCH,BYTEPTRNW+3
FDH
直接寻址
(4)改正下列不正确的指令错误
a.MOVAX,S1改正MOVAX,WORDPTRS1
b.MOVBP,OFFSETS2改正MOVBX,OFFSETS2
MOVCL,[BP]MOVCL,[BX]
c.MOVSI,OFFSETNB改正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+3MOVDH,[BX+3]
g.INCCOUNT改正MOVBX,COUNTINCBX(符号常数不能加1)
h.MOVNB,S2改正MOVAL,S2MOVNB,AL(两个内存变量不能直接传送)
i.MOVAX,[BX+S1]改正MOVAX,WORDPTR[BX+S1]
j.ADDAX,[DX+NW]改正ADDAX,[BX+NW]