微机原理与接口技术李珍香版课后习题4参考答案.docx
《微机原理与接口技术李珍香版课后习题4参考答案.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术李珍香版课后习题4参考答案.docx(13页珍藏版)》请在冰豆网上搜索。
![微机原理与接口技术李珍香版课后习题4参考答案.docx](https://file1.bdocx.com/fileroot1/2023-1/26/37bac427-c065-4d67-81e5-17afac967482/37bac427-c065-4d67-81e5-17afac9674821.gif)
微机原理与接口技术李珍香版课后习题4参考答案
习题4参考答案
简述汇编语言与机器语言及高级语言间的区别
参考答案:
要点:
汇编语言与机器语言的区别:
汇编语言采用符号表示,机器语言二进制表示。
汇编语言与高级语言的区别:
汇编语言属于低级语言,每条指令与对应的机器指令间是一一对应关系,而高级语言接近于自然语言。
简述汇编语言程序的指令语句与伪指令语句在写法及功能上的不同
参考答案:
要点:
写法上的不同主要表现在第一部分上,一条指令的第一部分“标号”若需要,则在标号后面一定有冒号“:
”,而伪指令语句的第一部分在“名字”后没有冒号“:
”。
功能上的不同:
每一条指令都有对应的机器指令,在程序运行过程中执行到每条指令时起作用;伪指令没有对应的机器指令,是在程序汇编时起作用。
汇编语言程序的标号有何规定标号有哪三种属性
参考答案:
略
汇编语言程序的变量如何定义变量有哪三种属性
参考答案:
略
汇编语言程序中,算术表达式、逻辑表达式、关系表达式各有什么含义
参考答案:
略
简述汇编语言程序上机的基本步骤和每步所进行的主要操作
参考答案:
略
设TABLE为数据段中0100H单元的符号名,其中存放的内容为FF00H,试分析以下两条指令分别执行后的结果,并指出它们之间的区别
MOVAX,TABLE
MOVAX,OFFSETTABLE
参考答案:
第一条指令传送的是TABLE所指单元的内容,AX结果为FF00H;第二条指令传送的是TABLE的偏移地址,AX结果为0100H。
设有如下的变量定义:
DATASEGMENT
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
已知一数据段中的数据定义如下:
DATASEGMENT
STR1DB1,2,3,4,5
STR2DB‘12345’
CONTEQU20
NUMBDB3DUP(6)
NUMWDW20H,-80H
TABLEDW0
DATAENDS
试根据以上数据段的定义,指出下列每小题指令中的错误或者用得不当的指令。
(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指令
参考答案:
分号“;”后面为答案
编写一个汇编语言程序,将字符串“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
cmpal,'z'
jalop
subal,20h
mov[bx],al
lop:
incbx
deccl
jnznext
movah,4ch
int21h
codeends
endstart
编写一个带符号数四则运算的程序,完成(Z-(X*Y+200))/20的运算,商送V单元,余数送W单元。
这里,X,Y,Z均为16位的带符号数,内容用户自己定义。
参考程序:
DATASEGMENT
xDW2
ydw-10
zdw300
vdw
wdw
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,x
movbx,y
imulbx
movcx,200
movbx,0
addax,cx
adcdx,bx
movcx,z
movbx,0
subcx,ax
sbbbx,dx
xchgcx,ax
xchgbx,dx
movbx,20
idivbx
movv,ax
movw,dx
movah,4ch
int21h
codeends
endstart
编写一个汇编语言程序,完成以下要求。
从BUF单元处定义有10个带符号字数据:
-1、3、24、94、62、72、55、0、-48、99,试找出它们中的最大值和平均值,并依次分别存放至该数据区的后2个单元中(假设这10个数的和值不超过16位)。
参考程序:
DATASEGMENT
bufDW-1,3,24,94,62,72,55,0,-48,99
nequ($-buf)/2
maxdw
avedb,
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leasi,buf
clc
xorax,ax
xordx,dx
movax,[si]
movcx,n
next:
adcdx,[si]
cmpax,[si]
jgegoon
movax,[si]
goon:
addsi,2
loopnext
movmax,ax
movbl,n
movax,dx
idivbl
movave,al
movave+1,ah
movah,4ch
int21h
codeends
endstart
编写一个统计分数段的子程序,要求将100分、90~99分、80~89分、70~79分、60~69分、60分以下的学生人数统计出来,并分别送往S10、S9、S8、S7、S6、S5各单元中。
(学生人数和每人的成绩由用户自己定义)
参考程序:
DATASEGMENT
graddb77,68,82,90,54,69,72,86,91,100
s10db
s9db
s8db
s7db
s6db
s5db
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,s10-grad
callcount
movah,4ch
int21h
countprocnear
movsi,0
next:
moval,grad[si]
movah,0
movbx,10
divbl
cbw
movbx,ax
subbx,10
negbx
incs10[bx]
incsi
loopnext
ret
countendp
codeends
endstart
将AX寄存器中的16位数据分成4组(从高到低),每组4位,然后把这四组数作为数当中的低4位分别放在AL、BL、CL和DL中。
参考程序:
codesegment
assumecs:
code
start:
MOVBX,AX
MOVDX,AX
MOVCL,4
SHRAH,CL
MOVAL,AH
MOVBL,BH
ANDBL,0FH
MOVDH,DL
SHRDH,CL
MOVCL,DH
movah,4ch
int21h
codeends
endstart
设有两个16位整数变量A和B,试编写完成下述操作的程序:
(1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。
(2)若两个数均为奇数,则两数分别减1,并存回原变量中。
(3)若两个数均为偶数,则两变量不变。
参考程序:
DATASEGMENT
adw
bdw
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
lop:
movax,a
movbx,b
xorax,bx
testax,0001H
jznext
testbx,0001H
jzexit
xchgbx,a
movb,bx
jmpexit
next:
testbx,0001h
jzexit
decb
deca
exit:
movah,4ch
int21h
codeends
endstart
设有一段英文,其字符变量名为ENG,并以$字符结束。
试编写一程序,查找单词“is”在该文中的出现次数,并将次数显示出来。
(英文内容由用户自己定义)
参考程序:
DATASEGMENT
ENGdb'thisisanprogramexample$'
n1equ$-eng
strdb'is'
n2equ$-str
DATAENDS
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax
xordx,dx
movcl,n1
xorch,ch
cmpcx,n2
jbedisp
moval,str
leadi,eng
cld
search:
repnescasb
jnedisp
movbl,str+1
cmpes:
[di],bl
jeexist
jcxzdisp
lop:
jmpsearch
exist:
incdl
cmpcx,1
jzdisp
jmplop
disp:
ordl,30h
movah,2
int21h
movah,4ch
int21h
codeends
endstart
请编写程序实现以下功能:
设在A、B和C单元中分别存放着一个8位带符号数。
试比较这3个数,若3个数都不是0,则求出3数之和并存放于D单元中;若其中有一个数为0,则把其它两个单元也清零。
参考程序:
DATASEGMENT
aDb10
bdb-10
cdb30
ddb
DATAENDS
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
xordx,dx
cmpa,0
jznext
movdl,a
cmpb,0
jnzlop1
next:
movb,0
movc,0
mova,0
jmpexit
lop1:
adddl,b
cmpc,0
jznext
adddl,c
movd,dl
exit:
movah,4ch
int21h
codeends
endstart
从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类的计数结果。
参考程序:
datasegment
sdb;统计字符
ddb;统计数字
odb;统计其它字符
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
lop:
movah,1
int21h
cmpal,0dh
jzdisp
cmpal,30h
jbother
cmpal,39h
jbeshu
cmpal,41h
jbother
cmpal,5ah
jbestr
cmpal,61h
jbother
cmpal,7ah
jbestr
jmplop
other:
inco
jmplop
shu:
incd
jmplop
str:
incs
jmplop
disp:
movdl,0ah
movah,2
int21h
movdl,0dh
movah,2
int21h
movdl,s
ordl,30h
movah,2
int21h
movdl,d
ordl,30h
int21h
movdl,o
ordl,30h
int21h
movah,4ch
int21h
codeends
endstart