微计算机原理第二版潘名莲习题答案48之后文档格式.docx
《微计算机原理第二版潘名莲习题答案48之后文档格式.docx》由会员分享,可在线阅读,更多相关《微计算机原理第二版潘名莲习题答案48之后文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![微计算机原理第二版潘名莲习题答案48之后文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/20/96b82731-11b7-46a3-9ef9-0f42245c4756/96b82731-11b7-46a3-9ef9-0f42245c47561.gif)
MOVDI,OFFSETDN
MOVCX,CN
REPMOVSDN,SN
ENDM
4-10设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误,并改正之。
(1)ADDVAR1,VAR2(无两内存单元加法指令)
(2)SUBAL,VAR1(字节变量不能和字变量直接相加)
(3)JMPLAB[SI](标号不是立即数)
(4)JNZVAR1(不是程序标号)
(5)JMPNEARLAB(同3)
(6)MOVAL,VAR2(AL不能存字变量)
(1)MOVAX,VAR1
(2)MOVAH,0(3)JMPOFFSETLAB[SI]
ADDAX,VAR2SUBAX,VAR1
(4)MOVSI,VAR1(5)JMPNEARPTRLAB(6)MOVAX,VAR2
JNZTARGET
……
TARGET:
JMP[SI]
4-11已知数据定义如下,问L1和L2等于多少?
B1DB1,2,3,’123’
B2DB0
L1EQU$-B1
L2EQUB2-B1
解:
$=7,∴$-B1=7-0=7
即L1等于7
L2=B2的偏移地址6-B1的偏移地址0=6
4-15用查表法将存放于数据段中的一个有序的十六进制数串(范围:
0~FH)翻译成ASCII码表仍放于数据段中。
DATASEGMENT
XDHEXDB0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
TBASCIIDB‘0123456789ABCDEF’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCFAR
START:
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,16
MOVSI,OFFSETXDHEX
MOVBX,OFFSETTBASCII
MOVAH,0
AGAIN:
MOVAL,[SI]
MOVDI,AX
MOVAL,[BX+DI]
MOV[SI],AL
INCSI
LOOPAGAIN
RET
MAINENDP
CODEENDS
ENDSTART
4-16试编写一程序,把X和Y中的大者存于BIG单元,若X=Y,则把其中之一存入BIG单元。
XDW?
YDW?
BIGDW?
DATAENDS
;
------------------------------
MAINPROCFAR
PUSHDS
MOVAX,X
CMPAX,Y
JNCSTOBIG;
无符号数判断,有符号数用JGE
MOVAX,Y
STOBIG:
MOVBIG,AX
ENDMAIN
4-17试编写一程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同显示“MATCH”,反之,则显示“NOMATCH”。
STRING1DB50DUP(?
)
STRING2DB50DUP(?
MATDB‘MATCH$’
NMATDB‘NOMATCH$’
DATAENDS
CODEEGMENT
ASSUMECS:
DATA,ES:
MAINPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVCX,LENGTHSTRING1
LEASI,STRING1
LEADI,STRING2
LEADX,MAT
REPECMPSB
JEPLAY
LEADX,NOMAT
PLAY:
MOVAH.09
INT21H
RET
MAINENDP
CODEENDS
ENDMAIN
4-19假设已编好5个乐曲程序,它们的入口地址(含段首址和偏移地址)存放在数据段中的跳越表MUSICTAB中。
试编写一个管理程序,其功能是:
根据键盘输入的乐曲编号00~04转到所点乐曲入口,执行乐曲程序。
MUSICTABDWOFFSETMUSIC0,SEGMUSIC0
DWOFFSETMUSIC1,SEGMUSIC1
DWOFFSETMUSIC2,SEGMUSIC2
DWOFFSETMUSIC3,SEGMUSIC3
DWOFFSETMUSIC4,SEGMUSIC4
CODEEGMENT
;
---------------------------------------------------------------
KEYIN:
MOVAH,1
INT21H
SUBAL,30H
MOVCL,4
ROLAL,CL
MOVBL,AL
ADDAL,BL
ADDAX,AX
LEABX,MUSICTAB
MOVSI,AX
JMPDWORDPTR[BX][SI];
见教科书116页,④段间间接寻址
MUSIC0:
…
MUSIC1:
…
MUSIC2:
…
MUSIC3:
MUSIC4:
EXIT:
ENDMAIN
4-21在数据段中存有一字符串(≤80个字符),以回车CR结束。
编一程序统计此字符串的长度,并将它存入数据区LENTH单元,也显示在屏幕上。
设字符串为STRING字节单元开始,程序采用DO_WHILE的循环结构,CX寄存器用作字符串长度计数。
循环结束条件两个:
(1)找到CR,屏幕上显示字符串长度-LENTH。
(2)未找到CR,屏幕上显示“ERROR”。
STRINGDB'
12345678'
DB0DH
DB71DUP(?
LENTHDB?
ERRDB'
ERROR$'
-------------------------------------
MOVES,AX
-------------------------------------------------
MOVDI,OFFSETSTRING
CLD
MOVCX,80
MOVAL,0DH
REPNZSCASB
JNZPLAYER
MOVAX,80
SUBAX,CX
MOVCL,10
DIVCL
MOVDL,AL
ORDL,30H
PUSHAX
MOVAH,2
INT21H
POPAX
MOVDL,AH
MOVAH,02
INT21H
PLAYER:
MOVDX,OFFSETERR
MOVAH,9
----------------------------------------------------
4-22试用串操作指令将一个数组BLOCK(均为字节数)中的奇数和偶数分开存放。
1设数组BLOCK在数据段,程序运行后把数组中的奇数存放在数据段数组PODATA、偶数存放在数据段数组PEDATA中。
2程序分两次扫描,第一次搜索奇数,并存放于PODATA中、第二次搜索偶数,并存放于PEDATA中。
3两次搜索均用FOR语句结构。
DATA
SEGMENT
BLOCK
DB
1,2,3,4,5,6,7,8,9,90,21,33
COUNT
EQU
$-BLOCK
PODATA
DUP(?
PEDATA
ENDS
---------------------------------
CODE
MAIN
PROC
FAR
ASSUME
CS:
DATA,DS:
PUSH
DS
MOV
AX,0
AX
AX,DATA
DS,AX
ES,AX
SI,OFFSET
BLOCK
DI,OFFSET
PODATA