《微机原理》习题参考答案黄冰版Word下载.docx
《《微机原理》习题参考答案黄冰版Word下载.docx》由会员分享,可在线阅读,更多相关《《微机原理》习题参考答案黄冰版Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
1025H
0F2AH
1109H
00EAH
我们可以看到不同段的段地址,在不同的偏移地址下,可以对应相同的物理地址,也就相同的存储空间。
说明在分配段时是重叠的.
2.4每个段区最大可占用64KB的地址范围,因为寄存器都是16位的,216B=64KB。
不允许重叠,则最多可分16个段区,因为8086CPU有20条地址线,寻址范围1MB,1MB/64KB
=16个。
2.6
指令
目的操作数寻址方式
源操作数寻址方式
MOVARRAY,BX
直接寻址
寄存器寻址
ADCCX,ALPHA[BX][SI]
带位移的基址变址寻址
ANDGAMMA[DI],11011000B
带位移的变址寻址
立即数寻址
INCBL
隐含寻址
TESTES:
[SI],DX
寄存器间接寻址
SBBSI,[BP]
2.7
1源操作数是立即数寻址,AX=1200H
2源操作数是寄存器寻址,AX=BX=0100H
3源操作数是直接寻址,将2000H×
10H+1200H=21200H和21201H的内容取出,赋给AX=4C2AH
4源操作数是寄存器间接寻址,将2000H×
10H+0100H=20100H和20101H的内容取出,赋给AX=3412H
5源操作数是寄存器相对寻址,将2000H×
10H+0100H+1100H=21200H和21201H的内容取出,赋给AX=4C2AH
6源操作数是基址变址寻址,将2000H×
10H+0100H+0002H=201002和201003H的内容取出,赋给AX=7856H
7源操作数是基址变址相对寻址,将2000H×
10H+0100H+0002H+1100H=21202H和21203H的的内容取出,赋给AX=65B7H
2.8
MOVAX,00ABH
跟随在指令后,有cs:
ip决定
MOVAX,BX
在寄存器中
MOVAX,[100H]
2000H×
10H+100H=20100H
MOVAX,[BX]
10H+0100H=20100H
MOVAX,[BP]
1500H×
10H+0010H=15010H
MOVAX,[BX+10]注意是十进制
带位移的基址寻址
10H+0100H+0AH=2010AH
MOVAX,[BX][SI]
基址变址寻址
10H+0100H+00A0H=201A0H
MOVAX,VAL
10H+0050H=20050H
MOVAX,ES:
[BX]
2100H×
10H+0100H=21100H
MOVAX,[SI]
10H+00A0=200A0H
MOVAX,VAL[BX]
10H+0100H+0050H=20150H
MOVAX,VAL[BX][SI]
10H+0100H+00A0H+0050H=201F0H
2.9
指令
Sp
值
PUSHCX
1FFAH
66H
1FFBH
55H
PUSHBX
1FFCH
44H
1FFDH
33H
PUSHAX
1FFEH
22H
1FFFH
11H
sp
POPAX
AX=5566H
BX=3344H
POPCX
CX=3344H
SP=1FFEH
2.10
AX的值
MOVAX,0
AX=0000H
DECAX
AX=0FFFFH
ADDAX,7FFFH
AX=7FFEH
ADDAX,2
AX=8000H
NOTAX
AX=7FFFH
SUBAX,0FFFFH
ADDAX,8000H
ORAX,0BFDFH
AX=0BFDFH
ANDAX,0EBEDH
AX=0ABCDH
XCHGAH,AL
AX=0CDABH
SALAX,1
AX=9B56H(CF=1)
RCLAX,1
AX=36ADH(AF=1)
2.11
0110001010100000B
+1001110101100000B
10000000000000000B(0000H)AF=0,SF=0,ZF=1,CF=1,OF=0,PF=1
0110001010100000B
+0100001100100001B
1010010111000001B(0A5C1H)AF=0,SF=1,ZF=0,CF=0,OF=1,PF=0
2.12
0001001000110100B
-0100101011100000B[1011010100100000B]补码形式
1100011101010100B(0C754H)AF=0SF=1ZF=0CF=1OF=0PF=0
1001000010010000B
-0100101011100000B[1011010100100000B]补码形式
0100010110110000B(45B0H)AF=0SF=0ZF=0CF=0OF=1PF=1
2.13
1BX=009AH
2BX=0061H
3BX=00FBH
4BX=001CH
5BX=0000H
6BX=00E3H(本条语句只对标志位有影响,不存贮结果)
2.14
BX=0110110100010110=6D16H
BX=0000000011011010=00DAH
2.15
1DX=0000000010111001DX=0000000001011100=005CH
2DX=0000000010111001DX=0000000000010111=0017H
3DX=0000000010111001DX=0000010111001000=05C8H
4DL=10111001DX=0000000001110010=0072H
5DX=0000000010111001DX=0010000000010111=2017H
6DL=10111001DX=0000000011001101=00CDH
7DH=00000000DX=0000000010111001=00B9H
8DX=0000000010111001DX=0000010111001100=05CCHCF=0
9DL=10111001DL=0000000011011100=00DCHCF=1
2.16
方法一:
循环移位方法二:
逻辑右移
MOVCL,04HMOVCL,04H
ROLAL,CLSHRAL,CL
第三章宏汇编语言程序设计
3.1
1)AX=0001H;
2)AX=0002H
3)CX=0014H
4)DX=0028H
5)CX=0001H
3.2
1)ARRAYDB56H,78,0B3H,100
2)DATADW2965H,45H,2965,0A6H
3)ALPHADW0C656H,1278H
4)BETADB2DUP(23),5DUP(‘A’),10DUP(1,2),20DUP(?
)
5)STRINGDB‘THISISAEXAMPE’
6)COUNTEQU100
3.3
…
00H
01H
?
42H
41H
43H
1DH
1FH
(1)
(2)
BYTE_VARR
4CH(76)
57H
03H
3.4
DATA_SEGSEGMENT
DATA1DB‘DATASEG,MENT’
DATA2DB72,65,-10
DATA3DB109,98,21,40
DATA4DB10DUP(0)
DATA5DB‘12345’
DATA6DW7,9,298,1967
DATA7DW785,13475
DATA8DWDB($-DATA6)-(DATA6-DATA1)
DATA_SEGENDS
3.5
1)MOVBX,OFFSETBUF1
2)MOVCLBYTEPTR[BUF2+2]
3)MOV[BUF3+9],A6H
4)COUNTEQUBUF3-BUF1
3.8
APPAYDB10DUP(29H)
ALPHADB-25,4,10,76,3
BUFFERDB100DUP(?
3.9
BCD1DB?
?
BCD2DB?
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG,ES:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVDS,AX
MOVCL,04H
MOVSI,OFFSETBCD1
MOVAL,[SI]
SALAL,CL
MOVBL,[SI+1]
ANDBL,0FH
ADDAL,BL
MOVBCD2,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.11
1)MOVCH,32HCH=32H
2)ADDCH,2AHCH=5CH
3)SHLCH,1CH=0B8H
4)MOV[BX][NUM+9],CHCH=0B8H
3.12
XDB?
YDB?
WDB?
ZDB?
RDB?
MOVAX,DATA_SEG
MOVAL,W
SUBAL,X
CBW
IDIV0AH
MOVR,AH
IMULY
IMULAX
MOVAH,4CH
3.14
STR1DB'
THISISADOG'
STR2DB'
THISISACOCK'
COUNTDB$-STR2
NUMDB?
CODE,DS:
MOVES,AX
MOVCH,0
MOVCL,COUNT
CLD
MOVSI,OFFSETSTR1
MOVDI,OFFSETSTR2
REPZCMPSB
ANDSI,000FH
MOVAX,SI
MOVNUM,AL
3.16
DATASEGMENT
SRCBUFDB80DUP(?
DSTBUFDB80DUP(?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETSRCBUF
MOVDI,OFFSETDSTBUF
MOVCX,80
LOP1:
MOVAL,[SI]
INCSI
CMPAL,ODH
JENEXT
MOV[DI],AL
INCDI
NEXT:
LOOPLOP1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.17
DATASEGMENT
BUFDBnDUP(?
SUMDBO
CODESEGMENT
START:
MOVAX,DATA
MOVDS,AX
MOVCX,n
MOVSI,OFFSETBUF
LOP1:
MOVAL,[SI]
CMPAL,O
JGENEXT
INCSUM
NEXT:
LOOPLOP1
MOVAH,4CH
3.18
DATASEGMENT
BUFDWnDUP(?
BUF1DWnDUP(?
BUF2DWnDUP(?
DATAENDS
MOVDI,OFFSETBUF1
MOVBX,OFFSETBUF2
MOVAX,[SI]
INCSI
CMPAX,0000H
JGENEXT1
MOV[BX],AX
ADDBX,02H
JMPLOP2
NEXT1:
MOV[DI],AX
ADDDI,2
LOP2:
3.19
STACKSEGMENTSTACK
DB256DUP(?
STACKENDS
BUFDB‘Thisisastring’,’$’
CODESEGMENT
ASSUMECS:
CODE.DS:
DATA;
SS:
STACK
MOVSI,OFFSETBUF
TACKCHAR:
MOVDL,[SI]
CMPDL,’$’
JZDONE
CMPDL,’a’
JBNEXT
SUBDL,20H
MOVAH,02H
MPTAKECHAR
DONE:
MOVAH,4CH
INT21H
3.20
DATA_SEGSEGMENT
DATXDB?
DATYDB?
DATZDB?
MOVDS,AX
MOVAL,DATX
MOVBL,DATY
CMPAL,BL
JSNEXT
MOVDATZ,AL
JMPDONE
NEXT:
MOVDATZ,BL
DONE:
MOVAH,4CH
3.21
DATADB?
DATBDB?
DATCDB?
DATDDB?
CMPDATA,0
JZNEXT
CMPDATB,0
CMPDATC,0
MOVAL,DATA
ADDAL,DATB
ADCAL,DATC
MOVDATD,AL
MOVDATA,0
MOVDATB,0
MOVDATC,0
3.22程序段是将十六进制数的ASSII码转化为十六进制数.本例是将大写字母A的ASCII变为十六进制数,将结果存入字符变量HEXNUM中。
HEXNUM变量中原来的内容未知,程序段执行后的内容是字符A的十六进制数0A
3.24
N=10
DATA1DBNDUP(?
)
DATA2DBNDUP(?
ADR1DW?
ADR2DW?
DATA_SEGENDS
LEASI,DATA1
LEADI,DATA2
MOVCX,N
LOP1:
MOVAH,[SI]
CMPAH,[DI]
JNZNOTEQU
INCSI
INCDI
MOVAH,0FFH
SAHF
JMPDONE
NOTEQU:
MOVAH,0
MOVADR1,[SI]
MOVADR2,[DI]
3.26
COUNT=100
BUFDBCOUNTNUP(?
MAXDB?
MOVSI,OFFSETBUF
MOVCX,COUNT
MOVAH,1
MOV[SI],AL
MOVSI,OFFSETBUF
LOP2:
CMPAL,[SI+1]
JANEXT2
XCHGAL,[SI+1]
NEXT2:
LOOPLOP2
MOVMAX,AL
3.27
BUFDB10DUP(?
STR1DB‘Doyouwantinputnumber(y/n)?
’,0DH,0AH,’$’
STR2DB‘Pleaseinputthenumbers’,0DH,0AH,’$’
MAXDB?
MINDB?
MOVDX,OFFSETSTR1
MOVAH,09H
MOVDX,OFFSETSTR2
MOVCX,10
MOVAH,1