微机原理习题参考答案黄冰版.docx
《微机原理习题参考答案黄冰版.docx》由会员分享,可在线阅读,更多相关《微机原理习题参考答案黄冰版.docx(39页珍藏版)》请在冰豆网上搜索。
微机原理习题参考答案黄冰版
微机原理习题参考答案(黄冰版)
微机原理与接口技术
第一章绪论
1.2
①[+65]10=01000001B[+65]补=[+65]原=01000001B
②[+115]10=01110011B[+115]补=[+115]原=01110011B
③[-65]10=11000001B[-65]补=10111111B
[-115]10=11110011B[-115]补=10001101B
方法:
正数的原码、反码、补码相同
负数的补码在原码的基础上除过符号外,先取反,再加1。
1.3
①[+120]10=0000000001111000B[+120]补=[+120]原=000000001111000B
②[-120]10=1000000001111000B[-120]补=1111111110001000B
③[+230]10=0000000011100110B[+230]补=[+230]原=0000000011100110B
④[-230]10=1000000011100110B[-230]补=1111111100011010B
方法:
与上题相同,只是扩展了位数,用16位表示
1.4
①55(00110111)②89(01011001)③-115(11110011)④-7
总结:
知道补码,求原码(或数值)的方法:
如果是正数,直接转换。
如果是负数用以下三种方法:
1根据[[X]补]补=X求得
例如10001101各位取反11110010加一11110011转换-115
2求补的逆运算
例如:
11111001先减一11111000各位取反10000111转换-7
③-(模+补码转换结果)
例如:
10001101转换-13模+补码转换结果128-13=115加负号–115
1.9
本题问题不太明确
例如:
如果手边有手册或是知道产品的型号,就可从手册中查到微处理器的处理位数。
也可以根据系统总线得知。
因为系统总线是公共的数据通道,表现为数据传输位数和总线工作时钟频率。
第二章intel8086微处理器
2.275422H字节单元:
9CH字单元:
249CH
75424H字节单元:
5DH字单元:
0E65Dh
2.3根据物理地址=段地址*10H+偏移地址得到:
段地址
偏移地址
物理地址
1000H
117AH
1117AH
1025H
0F2AH
1117AH
1109H
00EAH
1117AH
我们可以看到不同段的段地址,在不同的偏移地址下,可以对应相同的物理地址,也就相同的存储空间。
说明在分配段时是重叠的.
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]
寄存器间接寻址
2000H×10H+0100H=20100H
MOVAX,[BP]
寄存器间接寻址
1500H×10H+0010H=15010H
MOVAX,[BX+10]注意是十进制
带位移的基址寻址
2000H×10H+0100H+0AH=2010AH
MOVAX,[BX][SI]
基址变址寻址
2000H×10H+0100H+00A0H=201A0H
MOVAX,VAL
直接寻址
2000H×10H+0050H=20050H
MOVAX,ES:
[BX]
寄存器间接寻址
2100H×10H+0100H=21100H
MOVAX,[SI]
寄存器间接寻址
2000H×10H+00A0=200A0H
MOVAX,VAL[BX]
带位移的基址寻址
2000H×10H+0100H+0050H=20150H
MOVAX,VAL[BX][SI]
带位移的基址变址寻址
2000H×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
1FFCH
AX=5566H
BX=3344H
POPCX
1FFEH
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
AX=8000H
ADDAX,8000H
AX=0000H
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
00H
01H
00H
00H
00H
00H
01H
00H
00H
00H
01H
00H
00H
00H
01H
00H
00H
00H
01H
?
?
42H
41H
44H
43H
1DH
1FH
…
(1)
(2)
BYTE_VARR
41H
42H
43H
44H
4CH(76)
57H
?
?
?
01H
03H
01H
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
DATA_SEGSEGMENT
APPAYDB10DUP(29H)
ALPHADB-25,4,10,76,3
BUFFERDB100DUP(?
)
DATA_SEGENDS
3.9
DATA_SEGSEGMENT
BCD1DB?
?
BCD2DB?
DATA_SEGENDS
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
DATA_SEGSEGMENT
XDB?
YDB?
WDB?
ZDB?
RDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG,ES:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVDS,AX
MOVAL,W
SUBAL,X
CBW
IDIV0AH
MOVR,AH
IMULY
IMULAX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.14
DATA_SEGSEGMENT
STR1DB'THISISADOG'
STR2DB'THISISACOCK'
COUNTDB$-STR2
NUMDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG,ES:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVDS,AX
MOVES,AX
MOVCH,0
MOVCL,COUNT
CLD
MOVSI,OFFSETSTR1
MOVDI,OFFSETSTR2
REPZCMPSB
ANDSI,000FH
MOVAX,SI
MOVNUM,AL
CODEENDS
ENDSTART
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
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,n
MOVSI,OFFSETBUF
LOP1:
MOVAL,[SI]
INCSI
CMPAL,O
JGENEXT
INCSUM
NEXT:
LOOPLOP1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.18
DATASEGMENT
BUFDWnDUP(?
)
BUF1DWnDUP(?
)
BUF2DWnDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,n
MOVSI,OFFSETBUF
MOVDI,OFFSETBUF1
MOVBX,OFFSETBUF2
LOP1:
MOVAX,[SI]
INCSI
INCSI
CMPAX,0000H
JGENEXT1
MOV[BX],AX
ADDBX,02H
JMPLOP2
NEXT1:
MOV[DI],AX
ADDDI,2
LOP2:
LOOPLOP1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.19
STACKSEGMENTSTACK
DB256DUP(?
)
STACKENDS
DATASEGMENT
BUFDB‘Thisisastring’,’$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE.DS:
DATA;SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
TACKCHAR:
MOVDL,[SI]
CMPDL,’$’
JZDONE
CMPDL,’a’
JBNEXT
SUBDL,20H
NEXT:
MOVAH,02H
INT21H
INCSI
MPTAKECHAR
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.20
DATA_SEGSEGMENT
DATXDB?
DATYDB?
DATZDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVAL,DATX
MOVBL,DATY
CMPAL,BL
JSNEXT
MOVDATZ,AL
JMPDONE
NEXT:
MOVDATZ,BL
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.21
DATA_SEGSEGMENT
DATADB?
DATBDB?
DATCDB?
DATDDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
CMPDATA,0
JZNEXT
CMPDATB,0
JZNEXT
CMPDATC,0
JZNEXT
MOVAL,DATA
ADDAL,DATB
ADCAL,DATC
MOVDATD,AL
JMPDONE
NEXT:
MOVDATA,0
MOVDATB,0
MOVDATC,0
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.22程序段是将十六进制数的ASSII码转化为十六进制数.本例是将大写字母A的ASCII变为十六进制数,将结果存入字符变量HEXNUM中。
HEXNUM变量中原来的内容未知,程序段执行后的内容是字符A的十六进制数0A
3.24
DATA_SEGSEGMENT
N=10
DATA1DBNDUP(?
)
DATA2DBNDUP(?
)
ADR1DW?
ADR2DW?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
LEASI,DATA1
LEADI,DATA2
MOVCX,N
LOP1:
MOVAH,[SI]
CMPAH,[DI]
JNZNOTEQU
INCSI
INCDI
LOOPLOP1
MOVAH,0FFH
SAHF
JMPDONE
NOTEQU:
MOVAH,0
SAHF
MOVADR1,[SI]
MOVADR2,[DI]
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.26
DATA_SEGSEGMENT
COUNT=100
BUFDBCOUNTNUP(?
)
MAXDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
LOP1:
MOVAH,1
INT21H
MOV[SI],AL
INCSI
LOOPLOP1
MOVSI,OFFSETBUF
MOVCX,COUNT
MOVAL,[SI]
LOP2:
CMPAL,[SI+1]
JANEXT2
XCHGAL,[SI+1]
INCSI
NEXT2:
LOOPLOP2
MOVMAX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.27
DATA_SEGSEGMENT
BUFDB10DUP(?
)
STR1DB‘Doyouwantinputnumber(y/n)?
’,0DH,0AH,’$’
STR2DB‘Pleaseinputthenumbers’,0DH,0AH,’$’
MAXDB?
MINDB?
DATA_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVDX,OFFSETSTR1
MOVAH,09H
INT21H
MOVDX,OFFSETSTR2
MOVAH,09H
INT21H
MOVSI,OFFSETBUF
MOVCX,10
LOP1:
MOVAH,1
INT21H
MOV[SI],AL
INCSI