微机原理与接口技术楼顺天第二版第四章习题解答.docx
- 文档编号:4585615
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:63
- 大小:494.03KB
微机原理与接口技术楼顺天第二版第四章习题解答.docx
《微机原理与接口技术楼顺天第二版第四章习题解答.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术楼顺天第二版第四章习题解答.docx(63页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术楼顺天第二版第四章习题解答
微机原理与接口技术(楼顺天第二版)习题解答
第4章汇编语言程序设计
4.1、已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。
答:
BUFDB"BONJOUR_BELLE"
BUFRDB100DUP(?
)
MOVCX,N
LEASI,BUF
LEADI,BUFR
ADDDI,CX
DECDI
L1:
MOVAL,[SI]
MOV[DI],AL
INCSI
DECDI
LOOPL1
4.2、利用移位、传送和相加指令实现AX的内容扩大10倍。
答:
将扩大后的结果放在DX:
AX中,注意到10×AX=8×AX+2×AX。
XORDX,DX
SHLAX,1
RCLDX,1
MOVBX,AX
MOVCX,DX
SHLAX,1
RCLDX,1
SHLAX,1
RCLDX,1
ADDAX,BX
ADCDX,CX
4.3、在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
答:
VARDW1236,-432,3900
XORSI,,SI
MOVAX,VAR[SI]
CMPAX,VAR[SI+2]
JAEL1
XCHGAX,VAR[SI+2]
L1:
CMPAX,VAR[SI+4]
JAEL2
XCHGAX,VAR[SI+4]
L2:
MOVVAR[SI],AX
MOVAX,VAR[SI+2]
CMPAX,VAR[SI+4]
JAEL3
XCHGAX,VAR[SI+4]
L3:
MOVVAR[SI+2],AX
4.4、编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=1011011010011001B。
答:
利用移位指令完成。
XORDX,DX
MOVCX,8
L1:
SHRAL,1
RCRDX,1
SHRBL,1
RCRDX,1
LOOPL1
4.5、在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:
(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;
(2)当两数均为奇数时,两个变量的内容不变;
(3)当两数均为偶数时,两数缩小一倍后存入原处。
答:
当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。
DATASEGMENT
VAR1DB28
VAR2DB36
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAL,VAR1
MOVBL,VAR2
TESTAL,1
JZEVEN1
JMPOVER
EVEN1:
TESTBL,1
JZEVEN2
MOVVAR1,BL
MOVVAR2,AL
JMPOVER
EVEN2:
SHRAL,1
MOVVAR1,AL
SHRBL,1
MOVVAR2,BL
OVER:
MOVAH,4CH
MOVAL,0
INT21H
CODEENDS
ENDSTART
4.6、已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。
答:
在数据段中定义:
VAR1DW5A34H
VAR2DW5A35H
VAR3DW3A34H
在代码段中编写程序段:
MOVAX,-1
MOVBX,VAR1
CMPBX,VAR2
JZL2
CMPBX,VAR3
JZL1
MOVAX,BX
LEASI,VAR1
JMPOVER
L1:
MOVAX,VAR2
LEASI,VAR2
JMPOVER
L2:
CMPBX,VAR3
JZOVER
MOVAX,VAR3
LEASI,VAR3
OVER:
4.7、分析下列程序段的功能:
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
解:
程序段完成DX:
AX组成的32位无符号数左移4位,低位补零(也即除以16)。
4.8、阅读下列程序段,指出它完成什么运算。
CMPAX,0
JGEEXIT
NEGAX
EXIT:
…
答:
取AX的绝对值。
4.9、答:
将DX中的值转换为相应的ASCII码字符存入DISP对应的4字节存储单元中。
例如DX=3F0BH,则在DISP中存放'3','F','0','B'。
4.10、答:
将FIRST和SECOND数据相加,结果存入FIRST中,FIRST中的结果为:
10H,61H,01H。
4.11、答:
将从390H端口读入的数据的低4位转换为对应16进制数的ASCII码,然后往390H端口输出。
例如读入的数据为29H,则输出'9',读入的数据为1BH,则输出'B'。
4.12、答:
实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。
4.13、答:
完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。
4.14、答:
(1)AX=FFF3H,DX=FFFAH;
(2)AX=1FF2H,DX=0002H
4.15、答:
AX=FFFCH,BX=200AH,CX=0008H,DX=2010H,SI=2000H
4.16、答:
LEASI,BUFFERS
LEADI,BUFFERT
MOVCX,N
ADDDI,N
ADDDI,N
SUBDI,2
L1:
MOVAX,[SI]
MOV[DI],AX
ADDSI,2
SUBDI,2
LOOPL1
4.17、答:
ENCRPYTIONPROCNEAR
LEASI,ARRAY
XORDX,DX
MOVAX,[SI]
MOVBX,5
DIVBX
MOVCX,AX
ADDSI,2
L1:
MOVAX,[SI]
XORAX,0AAAAH
MOV[SI],AX
ADDSI,10
LOOPL1
RET
ENCRPYTIONENDP
4.18、答:
DATASEGMENT
ARRAYDB12,28,128,35,46,69,120,89,93,100,112,125,200
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
XORCX,CX
MOVCL,ARRAY;数据个数存入AX
MOVSI,OFFSETARRAY+1;SI存放第一个数的偏移地址
XORDX,DX
XORAX,AX;AX用来存放和,首先清零
XH:
XORBX,BX
MOVBL,[SI]
ADDAX,BX
JNCBUYICHU
ADDDX,1
BUYICHU:
INCSI
LOOPXH
CMPDX,0
JZOVER
MOVDX,-1
OVER:
HLT
CODEENDS
ENDSTART
4.19、答:
程序如下:
MOVCX,N
LEASI,BUF
MOVAX,[SI]
MOVDX,AX
ADDSI,2
L1:
CMPAX,[SI]
JBENOCHG1
XCHGAX,[SI]
NOCHG1:
CMPDX,[SI]
JAENOCHG2
XCHGDX,[SI]
NOCHG2:
ADDSI,2
LOOPL1
如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:
JBENOCHG1改成:
JLENOCHG1
JAENOCHG2改成:
JGENOCHG2
4.20、答:
设BUFFER中存放的是字节型数据。
采用双指针方法:
SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。
LEASI,BUFFER
XORCX,CX
MOVCL,[SI]
INCSI
MOVDI,SI
XORBH,BH
XORAL,AL
L1:
CMP[SI],AL
JZL2
MOVBL,[SI]
MOV[DI],BL
INCDI
INCBH
L2:
INCSI
LOOPL1
MOVBUFFER,BH
4.21、答:
MOVCX,N
MOVBX,BUF1
MOVSI,0
MOVDI,OFFSETPRODUCT
XH:
MOVAX,BUFN[SI]
PUSHAX
MULBX
MOV[DI],AX;乘积低位字
ADDDI,2
MOV[DI],DX;乘积高位字
POPAX
XORDX,DX
DIVBX
MOVQUOTIENT[SI],AX;商
MOVREMAINDER[SI],DX;余数
ADDSI,2
LOOPXH
4.22、答:
统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为:
COUNTBYTEPROCNEAR
PUSHAX
PUSHCX
MOVCX,8
XORBL,BL
COU1:
SHRAL,1
ADCBL,0
LOOPCOU1
POPCX
POPAX
RET
COUNTBYTEENDP
在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。
设BUF中有N个字节型数据,结果保持在BH中。
MOVCX,N
LEASI,BUF
XORBH,BH
L1:
MOVAL,[SI]
CALLCOUNTBYTE
CMPBL,4
JNZL2
INCBH
L2:
INCSI
LOOPL1
4.23、答:
4.24、答:
4.25、答:
;产生N个伪随机数
MOVCX,N
MOVSI,OFFSETNUM
XORAH,AH
MOVAL,23
XH:
MOV[SI],AL
PUSHAX
ADDAX,0
JNPFEIJISHU
INCCNT
ADDSUMODD,AX
FEIJISHU:
POPAX
ADDAL,17
INCSI
LOOPXH
4.26、答:
4.27、答:
4.28、答:
4.29、答:
4.30、答:
4.31、答:
4.32、答:
4.33、答:
STACKSEGMENTSTACK'STACK'
DW100HDUP(?
)
TOPLABELBYTE
STACKENDS
DATASEGMENT
BUFFERDB3;首字节为字符串长度
DB'ABC';字符串
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,STACK
MOVSS,AX
LEASP,TOP
MOVAX,DATA
MOVDS,AX
MOVES,AX
LEADI,BUFFER
XORCX,CX
MOVCL,[DI]
INCDI
CALLSETEVEN
MOVAH,4CH;返回DOS
MOVAL,0
INT21H
SETEVENPROCNEAR;加偶校验子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDI
SETEVEN1:
MOVAL,[DI]
CALLCOUNTBYTE
ANDBL,01H
JZSETEVEN2
ORAL,80H
MOV[DI],AL
SETEVEN2:
INCDI
LOOPSETEVEN1
POPDI
POPCX
POPBX
POPAX
RET
SETEVENENDP
COUNTBYTEPROCNEAR
PUSHAX
PUSHCX
MOVCX,8
XORBL,BL
COU1:
SHRAL,1
ADCBL,0
LOOPCOU1
POPCX
POPAX
RET
COUNTBYTEENDP
CODEENDS
ENDSTART
4.34、答:
MOVAX,SI[2*N]
TESTAX,8000H
JZOVER
MOVCX,N
XH:
MOVAX,[SI]
NEGAX
MOV[SI],AX
ADDSI,2
LOOPXH
OVER:
NOP
4.35、答:
设奖斐波那契数列存放在字变量RESULT中。
在数据段中定义
RESULTDW100HDUP(?
)
在代码段中编写子程序
FIBONACCIPROCNEAR
XORDI,DI
MOVRESULT[DI],1;前两个数为1
MOVRESULT[DI+2],1
ADDDI,4
MOVCX,N
L1:
MOVAX,RESULT[DI-4]
ADDAX,RESULT[DI-2]
MOVRESULT[DI],AX
ADDDI,2
LOOPL1
RET
FIBONACCIENDP
4.36、答:
在数据段中定义变量:
TABLEDWINFORM1,INFORM2,INFORM3,INFORM4,INFORM5
DWINFORM6,INFORM7,INFORM8,INFORM9,INFORM10
在代码段中编写程序段:
MOVCX,10
XORSI,SI
L1:
MOVDX,TABLE[SI]
MOVAH,9
INT21H
ADDSI,2
CALLWAIT
LOOPL1
这里,WAIT为延时子程序,用于在显示信息之间的停顿。
4.37、答:
先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。
DISPALDPROCNEAR
PUSHAX
PUSHCX
PUSHDX
XORAH,AH
MOVCL,100
DIVCL
PUSHAX
MOVDL,30H
ADDDL,AL
MOVAH,2
INT21H
POPAX
MOVAL,AH
XORAH,AH
MOVCL,10
DIVCL
PUSHAX
MOVDL,30H
ADDDL,AL
MOVAH,2
INT21H
POPAX
MOVDL,30H
ADDDL,AH
MOVAH,2
INT21H
POPDX
POPCX
POPAX
RET
DISPALDENDP
在此基础上,根据题目要求,需要用到3个指针:
SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。
MOVCX,20
XORDX,DX
LEASI,ARRAY
LEADI,ARRAYP
LEABX,ARRAYN
L1:
MOVAL,[SI]
ANDAL,AL
JSL2
MOV[DI],AL
INCDI
INCDL
JMPL3
L2:
MOV[BX],AL
INCBX
INCDH
L3:
INCSI
LOOPL1
MOVAL,DL
CALLDISPALD
MOVAL,DH
CALLDISPALD
4.38、答:
设BUFFER中存放的是有符号数。
MOVCX,100
LEASI,BUFFER
MOVAX,7FFFH
L1:
ANDWORDPTR[SI],1
JNZL2
CMP[SI],AX
JGEL2
MOVAX,[SI]
L2:
ADDSI,2
LOOPL1
4.39、答:
BL用于存放项数。
STACKSEGMENTSTACK'STACK'
DW100HDUP(?
)
TOPLABELWORD
STACKENDS
DATASEGMENT
DB100HDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASP,TOP
MOVBL,1
MOVCX,0
COUNT:
MOVAL,BL
MULBL
ADDCX,AX
CMPCX,2000
JAEXIT
INCBL
JMPCOUNT
EXIT:
4.40、答:
设数据段的段名为SEGNAME,则有
SEGINTODSMOCROSEGNAME
MOVAX,SEGNAME
MOVDS,AX
ENDM
SEGINTOESMOCROSEGNAME
MOVAX,SEGNAME
MOVES,AX
ENDM
4.41、答:
设输入字符串保存在BUFIN中,则有:
INSTRMACROBUFIN
MOVAH,10
LEADX,BUFIN
INT21H
ENDM
应该注意,BUFIN为键盘缓冲区,应该满足格式要求,详见INT21H的10号功能说明。
4.42、答:
CRLFMACRO
MOVAH,02
MOVDL,10
INT21H
MOVDL,13
INT21H
ENDM
4.43、答:
设DF=0
(1)L1:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPL1
(2)L1:
MOVAL,[SI]
INCSI
LOOPL1
(3)L1:
MOVES:
[DI],AL
INCDI
LOOPL1
(4)L1:
MOVAL,[SI]
CMPAL,ES:
[DI]
INCSI
INCDI
LOOPL1
4.44、答:
STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。
(1)CLD
MOVCX,17
LEASI,STR1
LEADI,STR2
REPMOVSB
(2)MOVCX,17
LEASI,STR1
LEADI,STR2
ADDSI,CX
DECSI
L1:
MOVAL,[SI]
MOV[DI],AL
DECSI
INCDI
LOOPL1
(3)LEASI,STR1
MOVDX,[SI+6]
(4)MOVCX,17
LEASI,STR1
MOVAL,20H
L1:
CMP[SI],AL
JZL2
INCSI
LOOPL1
L2:
4.45、答:
STRING中保存了30个字符。
MOVCX,30
LEASI,STRING
MOVAL,’&’
L1:
CMP[SI],AL
JNZL2
MOVBYTEPTR[SI],’/’
L2:
INCSI
LOOPL1
4.46、答:
将缓冲区FIRST中100个字节传送到SECOND中。
4.47、答:
在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。
4.48、答:
设DS和ES均指向字符串OLDS和NEWS所在的段。
CLD
MOVCX,5
LEASI,OLDS
LEADI,NEWS
REPZCMPSB
JNZNEW_LESS
4.49、答:
设STRING中的字符个数为N。
MOVCX,N
LEASI,STRING
MOVAL,5FH
L1:
AND[SI],AL
INCSI
LOOPL1
4.50、答:
利用字符串操作指令比较方便,也可以采用循环完成。
(1)TASK1MOVCX,50
MOVAL,20H
LEADI,STUDENT_PRINT
REPSTOSB
(2)TASK2MOVCX,9
MOVAL,‘_’
LEADI,STUDENT_ADDR
REPNZSCASB
JZFOUND
NOT_FOUND:
……
FOUND:
……
(3)TASK3MOVCX,9
MOVAL,‘_’
LEADI,STUDENT_ADDR
ADDDI,CX
STD
REPNZSCASB
JZFOUND
NOT_FOUND:
……
FOUND:
……
(4)TASK4MOVCX,30
MOVAL,20H
LEADI,STUDENT_NAME
R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 楼顺天 第二 第四 习题 解答