微机原理习题答案4.docx
《微机原理习题答案4.docx》由会员分享,可在线阅读,更多相关《微机原理习题答案4.docx(20页珍藏版)》请在冰豆网上搜索。
微机原理习题答案4
微型计算机原理第4章习题参考答案
4.1已知某数据段中有
COUNT1EQU16H
COUNT2DW16H
下面两条指令有何异同。
MOVAX,COUNT1
MOVBX,COUNT2
解:
同:
执行完之后,AX=BX=16H
异:
MOVAX,COUNT1向AX中传送的是立即数,而MOVBX,COUNT2向BX中传送的是变量内容。
4.2下列程序段执行后,寄存器AX、BX和CX的内容分别是多少?
ORG0202H
DA-WORDDW20H
MOVAX,DA-WORD;AX=0020H
MOVBX,OFFSETDA-WORD;BX=0202H
MOVCL,BYTEPTRDA-WORD;CL=20H
MOVCH,TYPEDA-WORD;CH=02H
解:
AX=0020H,BX=0202H,CX=0220H
4.3设平面上有一点P的直角坐标(x,y),试编制完成以下操作的程序:
如P点落在第I象限,则K=I;
如P点落在坐标轴上,则K=0。
解:
DATSEGMENT
msgdb'pleaseinputnumberonly!
$'
MSG1DB10,13,'INPUTX:
$'
MSG2DB10,13,'INPUTY:
$'
xbufdb20,0
xbuf1db20dup(?
)
ybufdb20,0
ybuf1db20dup(?
)
D1DB10,13,'K='
D2DB'?
$'
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
movdx,offsetmsg
movah,9
int21h
MOVDX,OFFSETMSG1
MOVAH,9
INT21H
movdx,offsetxbuf
MOVAH,0AH
INT21H
MOVDX,OFFSETMSG2
MOVAH,9
INT21H
movdx,offsetybuf
MOVAH,0AH
INT21H
CMPybuf1,'0'
JEPRO1
CMPxbuf1,'0'
JEPRO1
cmpxbuf1,'-'
JzPRO2
CMPybuf1,'-'
JePRO4
MOVD2,'1'
JMPSHOW
PRO1:
MOVD2,'0'
JMPSHOW
PRO2:
CMPybuf1,'-'
JePRO3
MOVD2,'2'
JMPSHOW
PRO3:
MOVD2,'3'
JMPSHOW
PRO4:
MOVD2,'4'
SHOW:
MOVDX,OFFSETD1
MOVAH,9
INT21H
movah,4ch
int21h
CODENDS
ENDBG
4.4试编制一程序,把CHAR1中各小写字母分别转换为对应的大写字母,并存放于CHAR2开始的内存单元中。
CHARDB‘abcdef’
CHAR2DB$—CHAR1DUP(0)
解:
DATSEGMENT
CHAR1DB'abcdefgh'
CHAR2DB$-CHAR1DUP(0)
NEQU$-CHAR2
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVSI,0
MOVCX,N
LP:
MOVAL,CHAR1[SI]
SUBAL,20H
MOVCHAR2[SI],AL
INCSI
LOOPLP
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.5试编写一程序,把DABY1字节单元中数据分解成3个八进制数,其最高位八进制数据存放在DABY2字节单元中,最低位存放在DABY2+2字节单元中。
DABY1DB6BH
DABY2DB3DUP(0)
解:
DATSEGMENT
DABY1DB6BH
DABY2DB3DUP(0)
DB24H
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVAL,DABY1
ANDAL,07H
MOVDABY2+2,AL
MOVAL,DABY1
ANDAL,38H
MOVCL,3
SHRAL,CL
MOVDABY2+1,AL
MOVAL,DABY1
ANDAL,0C0H
MOVCL,6
SHRAL,CL
MOVDABY2,AL
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.12试编写一程序,编程计算(A*B+C-70)/A,其中A、B、C均为字节变量。
解:
DATSEGMENT
ADB23
BDB45
CDB67
shangDB?
yushudb?
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVAL,A
IMULB
MOVCL,C
MOVCH,0
ADDAX,CX
MOVDX,70
SUBAX,DX
MOVBL,A
IDIVBL
MOVshang,AL
movyushu,ah
MOVAH,4CH
INT21H
CODENDS
ENDBG_
_4.14试编写一程序,找出BUF数据区中带符号数的最大数和最小数。
解:
DATSEGMENT
BUFDB3,6,5,4,1,-56,89,78,-67,12,43,45,-32
NEQU$-BUF
maxdb?
mindb?
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVSI,1
MOVCX,N-1
moval,buf
movbl,al
RECMP1:
CMPAL,BUF[SI]
JgENOP1
movAL,BUF[SI]
NOP1:
cmpbl,buf[si]
jlenop2
movbl,buf[si]
nop2:
INCSI
LOOPRECMP1
movmax,al
movmin,bl
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.5试编写一程序,把DABY1字节单元中数据分解成3个八进制数,其最高位八进制数据存放在DABY2字节单元中,最低位存放在DABY2+2字节单元中。
DABY1DB6BH
DABY2DB3DUP(0)
解:
DATSEGMENT
DABY1DB6BH
DABY2DB3DUP(0)
DB24H
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVAL,DABY1
ANDAL,07H
MOVDABY2+2,AL
MOVAL,DABY1
ANDAL,38H
MOVCL,3
SHRAL,CL
MOVDABY2+1,AL
MOVAL,DABY1
ANDAL,0C0H
MOVCL,6
SHRAL,CL
MOVDABY2,AL
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.6从BUF地址处起,存放有100字节的字符串,设其中有一个以上的‘A’字符,编程查找出第一个‘A’字符相对起始地址的距离,并将其存入LEN单元。
解:
DATSEGMENT
STRING‘1234ABCE--------’
NEQU$-STRING
KEYDB‘A‘
LENDB?
MSG1DB‘NOTFOUNDKEY$’
MSG2DB‘THEKEYISAT:
$‘
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVSI,0
MOVCX,N-1
MOVAL,BYTEPTRKEY
LP:
CMPAL,STRING[SI]
12
34
0
56
78
00
90
00
46
AB
34
12
00
00
04
00
10
00
00
00
00
00
00
JNENEXT
JEFIND
NEXT:
INCSI
LOOPLP
MOVDX,OFFSETMSG1
MOVAH,9
INT21H
JMPLAST
FIND:
MOVLEN,SI
MOVDX,OFFSETMSG2
MOVAH,9
INT21H
MOVDL,LEN
MOVAH,2
INT21H
LAST:
MOVAH,4CH
INT21H
CODENDS
4.7写出下列逻辑地址的段地址,偏移地址和物理地址。
(1)4312H:
0B74H
(2)10ADH:
0DE98H
(3)8314H:
0FF64H(4)78BCH:
0FD42H
解:
(1)段地址:
4312H,偏移地址:
0B74H,物理地址:
43C94H
(2)段地址:
10ADH,偏移地址:
0DE98H,物理地址:
1E968H
(3)段地址:
8314H,偏移地址:
0FF64H,物理地址:
930A4H
(4)段地址:
78BCH,偏移地址:
0FD42H,物理地址:
88902H
4.8某程序设置的数据区如下所示
DATASEGMENT
DB1DB12H,34H,0,56H
DW1DW78H,90H,0AB46H
ADR1DWDB1
ADR2DWDW1
AAADW$—DB1
BUFDB5DUP(0)
DATAENDS
画出该数据段内容在内存中的存放形式
(要求用十六进制补码表示,按字节组织)
解:
如右图示
4.9假设BX=54A3H,变量VALUE中存放的内容为68H,确定下列各条指令单独执行后BX=?
(1)XORBX,VALUE
(2)ORBX,VALUE
(3)ANDBX,00H(4)SUBBX,VALUE
(5)XORBX,0FFH(6)TESTBX,01H
解:
(1)BX=54CBH
(2)BX=54EBH
(3)BX=00H(4)BX=543BH
(5)BX=545CH(6)BX=54A3H,按位与,不回送结果
4.10以BUF1和BUF2开头的两个字符串,其长度均为LEN,试编程实现。
(1)将BUF1开头的字符串传送BUF2开始的内存空间;
(2)将BUF1开始的内存空间全部为零。
解:
DATSEGMENT
BUF1DB‘ABCD——‘
BUF2DB‘1234——‘
LENEQU$—BUF2
DATENDS
CODSEGMENTS
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVSI,0
MOVCX,LEN
LP1:
MOVAL,BUF1[SI]
MOVBUF2[SI],AL
INCSI
LOOPLP1
MOVSI,0
MOVCX,LEN
MOVAL,0
LP2:
MOVBUF1[SI],AL
INCSI
LOOPLP2
MOVAH,4CH
INT21H
CODENDS
ENDBG
4.11假设数据段的定义如下所示。
P1DW?
P2DB32DUP(?
)
PLLENTHEQU$—P1
试问PLENTH的值为多少?
表示什么意义?
解:
PLENTH的值为34,它表示包括P1、P2的数据变量的总长度(字节数)。
4.12试编写一程序,编程计算(A*B+C-70)/A,其中A、B、C均为字节变量。
解:
DATSEGMENT
ADB23
BDB45
CDB67
shangDB?
yushudb?
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVAL,A
IMULB
MOVCL,C
MOVCH,0
ADDAX,CX
MOVDX,70
SUBAX,DX
MOVBL,A
IDIVBL
MOVshang,AL
movyushu,ah
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.14试编写一程序,找出BUF数据区中带符号数的最大数和最小数。
解:
DATSEGMENT
BUFDB3,6,5,4,1,-56,89,78,-67,12,43,45,-32
NEQU$-BUF
maxdb?
mindb?
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,DAT
MOVDS,AX
MOVSI,1
MOVCX,N-1
moval,buf
movbl,al
RECMP1:
CMPAL,BUF[SI]
JgENOP1
movAL,BUF[SI]
NOP1:
cmpbl,buf[si]
jlenop2
movbl,buf[si]
nop2:
INCSI
LOOPRECMP1
movmax,al
movmin,bl
MOVAH,4CH
INT21H
CODENDS
ENDBG_
4.17在自BLOCK开始的存储区中有100个带符号数。
试用气泡排列法编写成一个程序使它们排列有序。
解:
按照从小到大的顺序排列:
DATSEGMENT
BLOCKDB1,2,3,-3,4,43,5,-45,23,-43,123,-123,43
nequ$-block
DATENDS
CODSEGMENT
ASSUMECS:
COD,DS:
DAT
BG:
MOVAX,dat
MOVDS,AX
movdx,n-1
movsi,0
lp:
moval,block[si]
MOVCX,n-1
subcx,si
movbx,1
RECMP:
cmpAL,block[bx+SI]
JLENOCH
xchgAL,block[bx+SI]
NOCH:
INCbx
LOOPRECMP
movblock[si],al
incsi
decdx
jnzlp
MOVAH,4CH
INT21H
CODENDS
ENDBG
4.20试编程:
从键盘上输入同学的姓名Mr.ABC或MrS.XYZ,当按动回车键时,屏幕上将显示出
“WelcomeMR.ABC”或“WelcomeMrS.XYZ”
解:
datsegment
msg1db10,'pleaseinputyouname:
$'
msg2db10,13,'welcome$'
keybufdb50,0
keydb50dup('$')
datends
codsegment
assumecs:
cod,ds:
dat
beg:
movax,dat
movds,ax
lp:
movdx,offsetmsg1
movah,9
int21h
movdx,offsetkeybuf
movah,10
int21h
;moval,13
;cmpal,key
;jeend_l
movdx,offsetmsg2
movah,9
int21h
movdx,offsetkey
movah,9
int21h
;jmplp
end_l:
movah,4ch
int21h
codends
endbeg
4.20试编程:
从键盘上输入同学的姓名Mr.ABC或MrS.XYZ,当按动回车键时,屏幕上将显示出
“WelcomeMR.ABC”或“WelcomeMrS.XYZ”
解:
datsegment
msg1db10,'pleaseinputyouname:
$'
msg2db10,13,'welcome$'
keybufdb50,0
keydb50dup('$')
datends
codsegment
assumecs:
cod,ds:
dat
beg:
movax,dat
movds,ax
lp:
movdx,offsetmsg1
movah,9
int21h
movdx,offsetkeybuf
movah,10
int21h
;moval,13
;cmpal,key
;jeend_l
movdx,offsetmsg2
movah,9
int21h
movdx,offsetkey
movah,9
int21h
;jmplp
end_l:
movah,4ch
int21h
codends
endbeg