微机原理与接口技术李珍香版课后习题4参考答案Word格式.docx
《微机原理与接口技术李珍香版课后习题4参考答案Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术李珍香版课后习题4参考答案Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
ARRAYDW1000H,2000H,3000H,4000H,5000H
BUFDW
DATAENDS
请分别完成以下操作
(1)用一条指令完成将ARRAY的偏移地址送BX
(2)用一条指令完成将ARRAY的第一字节单元内容送AL
(3)用一条指令完成将ARRAY定义的数据个数送CX
(1)LEABX,ARRAY
(2)MOVAL,BYTEPTRARRAY
(3)MOVCX,(BUF-ARRAY)/2
4.9已知一数据段中的数据定义如下:
DATASEGMENT
STR1DB1,2,3,4,5
STR2DB‘12345’
CONTEQU20
NUMBDB3DUP(6)
NUMWDW20H,-80H
TABLEDW0
试根据以上数据段的定义,指出下列每小题指令中的错误或者用得不当的指令。
(1)MOVAX,STR1;
STR1定义为字节类型,不能当字变量使用
(2)MOVBX,OFFSETNUMB
MOV[BX],’+’;
’+’为立即数,[BX]存储器操作数应明确类型
(3)MOVDL,NUMW+2;
NUMW为字类型,不能当字节变量使用
(4)MOVBX,OFFSETSTR1
MOVDH,BX+3;
源操作数“BX+3”不是正确表达式
(5)INCCONT;
INC中的操作数不能为立即数
(6)MOVSTR1,STR2;
MOV中的两个操作数不能同时为存储器操作数
(7)MOVAX,NUMW+2
MOVDX,0;
此处不应用MOV指令,而应该用CWD指令
DIVNUMW;
此处不应用DIV指令,而应该用IDIV指令
分号“;
”后面为答案
4.10编写一个汇编语言程序,将字符串“HelloWowld!
”中的全部小写字母转换为大写字母,并存放回原地址处。
参考程序:
DATASEGMENT
STRINGDB"
HelloWowld!
"
LENequ$-string
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movbx,offsetstring
movcl,len
next:
moval,[bx]
cmpal,'
a'
jblop
z'
jalop
subal,20h
mov[bx],al
lop:
incbx
deccl
jnznext
movah,4ch
int21h
codeends
endstart
4.11编写一个带符号数四则运算的程序,完成(Z-(X*Y+200))/20的运算,商送V单元,余数送W单元。
这里,X,Y,Z均为16位的带符号数,内容用户自己定义。
xDW2
ydw-10
zdw300
vdw
wdw
movax,x
movbx,y
imulbx
movcx,200
movbx,0
addax,cx
adcdx,bx
movcx,z
subcx,ax
sbbbx,dx
xchgcx,ax
xchgbx,dx
movbx,20
idivbx
movv,ax
movw,dx
codeends
endstart
4.12编写一个汇编语言程序,完成以下要求。
从BUF单元处定义有10个带符号字数据:
-1、3、24、94、62、72、55、0、-48、99,试找出它们中的最大值和平均值,并依次分别存放至该数据区的后2个单元中(假设这10个数的和值不超过16位)。
参考程序:
bufDW-1,3,24,94,62,72,55,0,-48,99
nequ($-buf)/2
maxdw
avedb,
leasi,buf
clc
xorax,ax
xordx,dx
movax,[si]
movcx,n
adcdx,[si]
cmpax,[si]
jgegoon
goon:
addsi,2
loopnext
movmax,ax
movbl,n
movax,dx
idivbl
movave,al
movave+1,ah
4.13编写一个统计分数段的子程序,要求将100分、90~99分、80~89分、70~79分、60~69分、60分以下的学生人数统计出来,并分别送往S10、S9、S8、S7、S6、S5各单元中。
(学生人数和每人的成绩由用户自己定义)
graddb77,68,82,90,54,69,72,86,91,100
s10db
s9db
s8db
s7db
s6db
s5db
movcx,s10-grad
callcount
countprocnear
movsi,0
moval,grad[si]
movah,0
movbx,10
divbl
cbw
movbx,ax
subbx,10
negbx
incs10[bx]
incsi
ret
countendp
4.14将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这四组数作为数当中的低4位分别放在AL、BL、CL和DL中。
code
MOVBX,AX
MOVDX,AX
MOVCL,4
SHRAH,CL
MOVAL,AH
MOVBL,BH
ANDBL,0FH
MOVDH,DL
SHRDH,CL
MOVCL,DH
4.15设有两个16位整数变量A和B,试编写完成下述操作的程序:
(1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。
(2)若两个数均为奇数,则两数分别减1,并存回原变量中。
(3)若两个数均为偶数,则两变量不变。
adw
bdw
movax,a
movbx,b
xorax,bx
testax,0001H
jznext
testbx,0001H
jzexit
xchgbx,a
movb,bx
jmpexit
testbx,0001h
decb
deca
exit:
movah,4ch
4.16设有一段英文,其字符变量名为ENG,并以$字符结束。
试编写一程序,查找单词“is”在该文中的出现次数,并将次数显示出来。
(英文内容由用户自己定义)
ENGdb'
thisisanprogramexample$'
n1equ$-eng
strdb'
is'
n2equ$-str
data,es:
moves,ax
movcl,n1
xorch,ch
cmpcx,n2
jbedisp
moval,str
leadi,eng
cld
search:
repnescasb
jnedisp
movbl,str+1
cmpes:
[di],bl
jeexist
jcxzdisp
jmpsearch
exist:
incdl
cmpcx,1
jzdisp
jmplop
disp:
ordl,30h
movah,2
4.17请编写程序实现以下功能:
设在A、B和C单元中分别存放着一个8位带符号数。
试比较这3个数,若3个数都不是0,则求出3数之和并存放于D单元中;
若其中有一个数为0,则把其它两个单元也清零。
aDb10
bdb-10
cdb30
ddb
cmpa,0
movdl,a
cmpb,0
jnzlop1
movb,0
movc,0
mova,0
lop1:
adddl,b
cmpc,0
adddl,c
movd,dl
4.18从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类的计数结果。
datasegment
sdb;
统计字符
ddb;
统计数字
odb;
统计其它字符
movah,1
cmpal,0dh
cmpal,30h
jbother
cmpal,39h
jbeshu
cmpal,41h
cmpal,5ah
jbestr
cmpal,61h
jbother
cmpal,7ah
other:
inco
shu:
incd
str:
incs
movdl,0ah
movdl,0dh
movdl,s
movdl,d
movdl,o