微机原理与应用答案guet.docx
《微机原理与应用答案guet.docx》由会员分享,可在线阅读,更多相关《微机原理与应用答案guet.docx(18页珍藏版)》请在冰豆网上搜索。
微机原理与应用答案guet
微机原理及应用答案
《微机原理》习题参考答案
主讲:
张红梅,黄建华辅导:
马金忠
有错误或疑惑的地方请同学们指出,谢谢!
第一章绪论
1.2
①[+65]10=01000001 [+65]补=[+65]原=01000001
②[+115]10=01110011[+115]补=[+115]原=01110011
③[-65]10=11000001 [-65]补=10111111
[-115]10=11110011 [-115]补=10001101
方法:
正数的原码、反码、补码相同
负数的补码在原码的基础上除过符号外,先取反,再加1。
1. 3
①[+120]10=0000000001111000 [+120]补=[+120]原=000000001111000
②[-120]10=1000000001111000[-120]补=1111111110001000
③[+230]10=0000000011100110[+230]补=[+230]原=0000000011100110
④[-230]10=1000000011100110[-230]补=1111111100011010
方法:
与上题相同,只是扩展了位数,用16位表示
1. 4
①56②89 ③-115 ④-7
总结:
知道补码,求原码(或数值)的方法:
如果是正数,直接转换。
如果是负数用以下三种方法:
① 根据[[X]补]补=X求得
例如10001101各位取反11110010加一11110011转换 -115
② 求补的逆运算
例如:
11111001先减一 11111000各位取反10000111转换-7
③-(模+补码转换结果)
例如:
10001101转换 -13模+补码转换结果128-13=115加负号–115
1. 9
本题问题不太明确
例如:
如果手边有手册或是知道产品的型号,就可从手册中查到微处理器的处理位数。
也可以根据系统总线得知。
因为系统总线是公共的数据通道,表现为数据传输位数和总线工作时钟频率。
第二章intel8086微处理器
2.3根据物理地址=段地址*10H+偏移地址得到:
段地址 偏移地址 物理地址
1000H 117AH 1117AH
1025H 0F2AH 1117AH
1109H 00EAH0 1117AH
我们可以看到不同电的段地址,在不同的偏移地址下,可以对应相同的物理地址,也就相同的存储空间。
说明在分配段时是重叠的.
2.6
指令 目的操作数寻址方式 源操作数寻址方式
MOVARRAY,BX 直接寻址 寄存器寻址
ADCCX,ALPHA[BX][SI] 寄存器寻址 基址变址相对寻址
ANDGAMMA[DI],11011000B 寄存器相对寻址 立即数寻址
INCBL 寄存器寻址 隐含寻址
TESTES:
[SI],DX 寄存器间接寻址 寄存器寻址
SBBSI,[BP] 寄存器寻址 寄存器间接寻址
2.7
① 源操作数是立即数寻址,AX=1200H
② 源操作数是寄存器寻址,AX=BX=0100H
③ 源操作数是直接寻址,将2000H×10H+1200H=21200H和21201H的内容取出,赋给AX=4C2AH
④ 源操作数是寄存器间接寻址,将2000H×10H+0100H=20100H和20101H的内容取出,赋给AX=3412H
⑤ 源操作数是寄存器相对寻址,将2000H×10H+0100H+1100H=21200H和21201H的内容取出,赋给AX=4C21H
⑥ 源操作数是基址变址寻址,将2000H×10H+0100H+0002H=201002和201003H的内容取出,赋给AX=7856H
⑦ 源操作数是基址变址相对寻址,将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]注意是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
.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
0110001010100000
+ 1001110101100000
1 0000000000000000(0000H) AF=0,SF=0,ZF=1,CF=1,OF=0,PF=1
0110001010100000
+ 0100001100100001
1010010111000001(A5C1H)AF=0,SF=1,ZF=0,CF=0,OF=1,PF=0
2.13
① BX=009AH
② BX=0061H
③ BX=00FBH
④ BX=001CH
⑤ BX=0000H
⑥ BX=00E3H(本条语句只对标志位有影响,不存贮结果)
2.14
BX=0110110100010110=6D16H
BX=0000000011011010=00DAH
2.15
① DX=0000000010111001 DX=0000000001011100=005CH
② DX=0000000010111001 DX=0000000000010111=0017H
③ DX=0000000010111001 DX=0000010111001000=05C8H
④ DL=10111001 DX=0000000001110010=0072H
⑤ DX=0000000010111001 DX=0010000000010111=2017H
⑥ DL=10111001 DX=0000000011001101=00CDH
⑦ DH=00000000 DX=0000000010111001=00B9H
⑧ DX=0000000010111001 DX=0000010111001100=05CCH CF=0
⑨ DL=10111001 DL=0000000011011100=00DCH CF=1
2.16
方法一:
循环移位 方法二:
逻辑右移
MOVCL,04H MOVCL,04H
ROLAL,CL SHRAL,CL
第三章 宏汇编语言程序设计
3.1①AX=0001H;
②AX=0002H
③ CX=0014H
④ DX=0028H
⑤ CX=0001H
3.2
①ARRAYDB56H,78,0B3H,100
②DATA DW2965H,45H,2965,0A6H
③ALPHA DW0C656H,1278H
④BETADB2DUP(23),5DUP(‘A’),10DUP(1,2),20DUP(?
)
⑥ STRINGDB‘THISISAEXAMPE’
⑥COUNT EQU 100
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
1FH
1DH
…
(1)
(2)
41H
42H
43H
44H
4CH(76)
57H
?
?
?
01H
03H
01H
03H
…
3.4
DATA_SEG SEGMENT
DATA1DB ‘DATA SEG,MENT’
DATA2DB 72,65,-10
DATA3DB 109,98,21,40
DATA4DB 10DUP(0)
DATA5DB ‘12345’
DATA6 DW 7,9,298,1976
DATA7 DW 785,13475
DATA8 DW DB($-DATA6)-(DATA6-DATA1)
DATA_SEGENDS
3.8
DATA_SEGSEGMENT
APPAY DB 10DUP(29H)
ALPHA DB -25,4,10,76,3
BUFFERDB 100DUP(?
)
DATA_SEGENDS
3. 9
DATA_SEG SEGMENT
BCD1DB?
?
BCD2DB?
DATA_SEG ENDS
CODE SEGMENT
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.12
DATA_SEG SEGMENT
XDB?
YDB?
WDB?
ZDB ?
RDB ?
DATA_SEG ENDS
CODE SEGMENT
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_SEG SEGMENT
STR1DB'THISISADOG'
STR2DB'THISISACOCK'
COUNTDB$-STR2
NUMDB ?
DATA_SEG ENDS
CODE SEGMENT
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
REPZ CMPSB
AND SI,000FH
MOVAX,SI
MOVNUM,AL
CODEENDS
ENDSTART
3.19
DATA_SEG SEGMENT
BUF DB'thisisastring','$'
DATA_SEG ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVSI,OFFSETBUF
TAKECHAR:
MOVDL,[SI]
CMPDL,'$'
JZDONE
CMPDL,''
JZNEXT
SUBDL,20H
NEXT:
MOVAH,2
INT21H
INCSI
JMPTAKECHAR
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.20
DATA_SEG SEGMENT
DATX DB ?
DATY DB ?
DATZ DB ?
DATA_SEG ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
MOVAL,DATX
MOVBL,DATY
CMP AL,BL
JS NEXT
MOVDATZ,AL
JMPDONE
NEXT:
MOVDATZ,BL
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.21
DATA_SEG SEGMENT
DATA DB ?
DATB DB ?
DATC DB ?
DATD DB ?
DATA_SEG ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
CMP DATA,0
JZ NEXT
CMPDATB,0
JZNEXT
CMPDATC,0
JZ NEXT
MOVAL,DATA
ADDAL,DATB
ADCAL,DATC
MOVDATD,AL
JMPDONE
NEXT:
MOVDATA,0
MOV DATB,0
MOVDATC,0
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.22程序段是将十六进制数的ASSII码转化为十六进制数.本例是将大写字母A的ASCII变为十六进制数,将结果存入字符变量HEXNUM中。
HEXNUM变量中原来的内容未知,程序段执行后的内容是字符A的十六进制数0A
3.24
DATA_SEG SEGMENT
N=10
DATA1 DBNDUP(?
)
DATA2 DBNDUP(?
)
ADR1 DW ?
ADR2 DW ?
DATA_SEG ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA_SEG
START:
MOVAX,DATA_SEG
MOVDS,AX
LEASI,DATA1
LEADI,DATA2
MOVCX,N
LOP1:
MOVAH,[SI]
CMPAH,[DI]
INCSI
INCDI
LOOPZLOP1
JNZNOTEQU
MOVAH,0FFH
SAHF
JMPDONE
NOTEQU:
MOVAH,0
SAHF
MOVADR1,SI-1
MOVADR2,DI-1
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.26
DATA_SEG SEGMENT
COUNT=100
BUF DBCOUNTNUP(?
)
MAXDB ?
DATA_SEG ENDS
CODE SEGMENT
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_SEG SEGMENT
BUFDB10 DUP(?
)
STR1DB‘Doyouwantinputnumber(y/n)?
’,0DH,0AH,’$’
STR2DB‘Pleaseinput thenumbers’,0DH,0AH,’$’
MAXDB?
MINDB ?
DATA_SEG ENDS
CODE SEGMENT
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
LOOPLOP1
MOVSI,OFFSETBUF
MOVCX,9
MOVAL,[SI]
LOP2:
CMPAL,[SI+1]
JANEXT2
XCHGAL,[SI+1]
INCSI
NEXT2:
LOOPLOP2
MOVMAX,AL
MOVSI,OFFSETBUF
MOVCX,9
MOVAL,[SI]
LOP3:
CMPAL,[SI+1]
JBNEXT3
XCHGAL,[SI+1]
INCSI
NEXT3:
LOOPLOP3
MOVMIN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.28
DATA SEGMENT
BUFF DB10DUP(?
)
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUFF
MOVCX,0AH
LOP1:
MOVAH,7
INT21H
CMPAL,'$'
JZDONE
CMPAL,'A'
JLEDONE
CMPAL,'Z'
JGENEXT1
JMPSHOW
NEXT1:
CMPAL,'a'
JGENEXT2
CMPAL,'z'
JGEDONE
NEXT2:
SUBAL,20H
SHOW:
MOVDL,AL
MOVAH,2
INT21H
LOOPLOP1
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.29
DATA SEGMENT
STRBUF DB'ABCDEFGIJKLMN$OPQRSTUVWSXYZ'
COUNT DB $-STRBUF
ADRBUFDB ?
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,STRBUF
MOVCH,0
MOVCL,COUNT
LOP1:
MOVAL,[SI]
CMPAL,'$'
JZ