微机原理与接口技术 第四章 课后答案文档格式.docx
《微机原理与接口技术 第四章 课后答案文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术 第四章 课后答案文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
![微机原理与接口技术 第四章 课后答案文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/c5c13aea-2c10-4bab-91dd-97e12a5e7d48/c5c13aea-2c10-4bab-91dd-97e12a5e7d481.gif)
3.画图说明下列语句所分配的存储空间及初始化的数据值。
⑴BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,?
2DUP(1,2),?
)
41H
0CH
F4H
⑵WORD_VARDW5DUP(0,1,2),?
-5‘BY’,’TE’,256H
(1)
(2)
4.设程序中的数据定义如下:
PARTNODW?
PNAMEDB16DUP(?
COUNTDD?
PLENTHEQU$-PARTNO
问PLENTH的值为多少?
它表示什么意义?
PLENTH的值为22(16H)。
表示当前位置与PARTNO之间有22个字节空间。
5.设程序中的数据定义如下:
LNAMEDB30DUP(?
ADDRESSDB30DUP(?
CITYDB15DUP(?
CODE_LISTDB1,7,8,,3,2
⑴用一条MOV指令将LNAME的偏移地址放入AX;
⑵用一条指令将CODE_LIST的头两个字节的内容放入SI:
⑶写一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。
(1)MOVAX,OFFSETLNAME
(2)MOVSI,WORDCODE_LIST
(3)CODE_LENGTHEQU$-CODE_LIST
6.对于下面数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDBDB?
TABLEADW20DUP(?
TABLEBDB‘ABCD’
⑴MOVAX,TYPEFLDB
⑵MOVAX,TYPETABLEA
⑶MOVCX,LENGTHTABLEA
⑷MOVDX,SIZETABLEA
⑸MOVCX,LENGTHTABLEB
(1)AX=1
(2)AX=2
(3)CX=14H
(4)DX=28H
(5)CX=1
7.内存的一个区域中有100个字符是用小写字母表示的,试编写一个程序,把它们转换成大写字母,并送屏幕显示。
参考程序如下:
MOVCX,0064H
AA:
MOVDL,[SI]
ADDDL,20H
MOV[SI],DL
MOVAH,02H
INT20H
INCSI
LOOPAA
HLT
8.AX寄存器中有4位压缩方式的BCD码数字,试编写一个程序将4个数字分开,并分别存入BH、BL、CH和CL寄存器中。
……
MOVDX,AX
MOVCL,04H
ROLAX,CL
ANDDX,0F0FH
MOVBL,DH
MOVCL,DL
ANDAX,0F0FH
MOVBH,AL
MOVCH,AH
9.编一段程序,使在用STRING开头的数据区中查找字符串WE,数据区以$符作为结束符号。
如查到,给出字符所在地址;
如查不到,给出NOTFOUND提示。
(假设最多有1个WE字符串)
DATASEGMENT
STRING:
DB‘ABCWE5$’
RE:
DB‘NOTFOUND$’
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
BEGIN:
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEASI,STRING
AA:
MOVAL,[SI]
CMPAL,’$’
JZNEXT
CMPAAL,’W’
JNZNEXT1
INCSI
MOVAL,[SI]
CMPAL,’E’
JNZAA
DECSI
MOVBX,SI
MOVCL,04H
MOVDH,04H
AA1:
ROLBX,CL
MOVDL,BL
ANDDL,0FH
MOVAH,02H
INT20H
DECDH
JNZAA1
JMPNEXT2
NEXT1:
JMPAA
NEXT:
LEADX,RE
MOVAH,09H
NEXT2:
MOVAH,4CH
INT21H
CODE:
ENDS
ENDBEGIN
10.从键盘输入的数字和字符都是以ASCII码方式存入内存,现要求从键盘输入两位16进制数,并在屏幕上显示出对应的二进制数。
试编一个程序实现此功能。
参考程序段如下:
MOVAH,07H
CMPAL,3AH
JCBB
SUBAL,07H
BB:
SUBAL,30H
MOVBH,AL
JCBB1
BB1:
MOVBL,AL
MOVCX,0016H
SHLBX,1
JCNEXT1
MOVDL,’0’
HLT
NEXT1:
MOVDL,’1’
MOVAH,02H
INT20H
LOOPAA
HLT
11.一个班级共有学生45人,在内存中有一个按学号排列的成绩表。
试编一个程序,实现按成绩高低并注有学号的有序表,如果有成绩相同的则按学号先后排序。
假设:
成绩表的起始地址符号:
ABC,学号的起始地址符号:
ABC1,参考程序段如下:
LEASI,ABC
MOVDI,OFFSETABC1
MOVCX,002DH
DECCX
AA:
MOVBX,CX
AA1:
MOVAL,[SI]
CMPAL,[SI+1]
JGEAA2
XCHGAL,[SI+1]
MOV[SI],AL
MOVAH,[DI]
XCHGAH,[DI+1]
MOV[DI],AH
AA2:
ADDSI,0001H
ADDDI,0001H
LOOPAA1
MOVCX,BX
LOOPAA
HLT
12.编一个程序,使从键盘上输入一串字符,以回车符结束,然后按字母、数字和其它符号三类统计各自的个数,在屏幕上显示统计结果。
注释:
以下程序中BL用于存放统计的字母个数,字母的ASCII码区间:
41H~5AH及61H~7AH;
BH用于存放统计的数字个数,数字的ASCII码区间:
30H~39H;
DH用于存放统计的其它符号的个数。
MOVBH,00H
MOVSI,1000H
MOV[SI],AL
CMPAL,’$’
INCBH
JMPAA
NEXT:
MOVCL,BH
MOVCH,00H
MOVSI,1000H
MOVBX,0000H
MOVDH,00H
AA0:
CMPAL,30H
JNCNEXT1
AA1:
INCDH
LOOPAA0
JMPNEXTE
NEXT1:
CMPAL,3AH
JNCNEXT2
INCBH
INCSI
LOOPAA0
JMPNEXTE
NEXT2:
CMPAL,41H
JCAA1
CMPAL,5BH
JNCAA2
AA3:
INCBL
LOOPAA0
AA2:
CMPAL,61H
CMPAL,7BH
JNCAA1
JMPAA3
NEXTE:
MOVDL,BL
MOVDL,BH
MOVDL,DH
13.有一个首地址为MEM的100D字数组,试编写程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
movsi,offsetMEM
movcx,0064h
movbl,00h;
记数组中间0项的个数
movbh,01h;
后面存在不为0数的标记
aa:
movax,[si]
cmpax,0000h
jnznext1
cmpbh,01h
jzaa3
jmpaae
aa3:
incbl
pushcx
deccx
movdi,si
movbh,00h
aa1:
movax,[di+2]
mov[di],ax
adddi,0002h
jzaa2
movbh,01h
aa2:
loopaa1
popcx
jmpaa
next1:
addsi,0002h
loopaa
movcx,bx
shlbx,01
subsi,bx
movax,0000h
cc:
mov[si],ax
loopcc
aae:
hlt
14.在STRING到STRING+99单元中存放着一个字符串,试编制一个程序测试该字符串中是否存在数字,如有则把CL的第5位置1,否则将该位置0。
MOVCX,100
MOVSI,OFFSETSTRING
CMPAL,30H
JCNEXT
CMPAL,3AH
JNCNEXT
ORAH,20H
JMPNEXT1
NEXT:
ANDAH,0DFH
INCSI
NEXT1:
MOVCL,AH
15.试编写一个程序把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的4个字节中。
例如:
当AX=2A49H时,程序执行完后,MEM中的4个字节的内容分别是39H、34H、41H、32H.
DATASEGMENT
MEMDB4DUP(?
DATAENDS
CODESEGMENT
ASSUMECS:
START:
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDH,04H
MOVBX,OFFSETMEM
AA1:
ANDDL,0FH
ADDDL,30H
CMPDL,3AH
JCNEXT
ADDDL,07H
NEXT:
MOV[BX],DL
INCBX
RORAX,CL
DECDH
JNZAA1
INT21H
CODEENDS
ENDSTART
16.设在A、B和C单元中分别存放着三个数。
若三个数都不是0,则求出三个数之和存放在D单元中;
若三个数中有一个为0,则把其他两个单元也清0。
试编写此程序。
DATASEGMENT
ADB?
BDB?
CDB?
DDB?
MOVAL,A
CMPAL,00H
JZNEXT
MOVAL,B
MOVAL,C
ADDAL,B
ADDAL,C
MOVD,AL
JMPNEXT1
MOVA,00H
MOVB,00H
MOVC,00H
NEXT1:
INT21H
ENDSTART
17.下面程序段有错吗?
若有,请指出错误。
CRAYPROC
PUSHAX
ADDAX,BX
RET
ENDPCRAY
程序段有错。
在调用子程序时,断点地址压入堆栈,而子程序内部修改了堆栈指针,子程序结束时有可能返回不到原断点处。
18.编写子程序嵌套结构的程序,把整数分别用二进制形式显示出来。
主程序:
把整数字变量VAL1存入堆栈,并调用子程序:
子程序:
从堆栈中取出VAL1;
调用二进制显示程序显示出与其等效的二进制数;
输出8个空格。
子程序名BINDISP;
子程序中的嵌套子程序名DISP,参考程序如下:
BINDISPPROCNEAR
ADDSP,0004H
POPAX
SUBSP,0006H
MOVCX,0010H
AA:
SHLAX,01
CALLDISP
LOOPAA
MOVCX,0008H
AA1:
MOVDL,00H;
空格的ASCII码
MOVAH,02H
INT20H
LOOPAA1
RET
BINDISPENDS
DISPPROCNEAR
JCNEXT
MOVDL,30H;
0的ASCII码
MOVAH,02H
INT20H
JMPNEXT1
NEXT:
MOVDL,31H;
1的ASCII码
POPAX
NEXT1:
RET
DISPENDP