第4章习题及参考解答.docx
- 文档编号:3493056
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:22
- 大小:23.11KB
第4章习题及参考解答.docx
《第4章习题及参考解答.docx》由会员分享,可在线阅读,更多相关《第4章习题及参考解答.docx(22页珍藏版)》请在冰豆网上搜索。
第4章习题及参考解答
第4章习题及参考解答
1.试编一程序,把地址偏移量为100H单元开始的256个单元分别写入00H,01H,02H,03H,…,FFH数据。
解 源程序如下
DATASEGMENT
ORG100H
BUF1DB256DUP(?
)
COUNTEQU $-BUF1
DATAENDS
STKSEGMENTSTACK
DB100DUP(?
)
STKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF1;戓LEASI,BUF1
MOVCX,COUNT
XORAL,AL;或MOVAL,00H
NEXT:
MOV[SI],AL
INCAL
INCSI
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.统计上题写入的数据块中0元素、正元素、负元素的个数,并分别把统计结果送入上述数据块之后的三个单元中。
解
DATASEGMENT
ORG100H
BUF1DB00H,01H.02H,…,0FEH,0FFH;共256个数据
COUNTEOU$-BUF1
DB3DUP(?
)
DATAENDS
STKSEGMENTSTACK
DB100DUP(?
)
STKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVS1,OFFSETBUF1
MOCCX,COUNT
XORBX,BX;BL与BH分别存放正、负元素的个数
XORDH,DH;DH寄存器存放0元素个数
NEXT2:
MOVAL,[SI]
CMPAL,0
JZZER0;若ZF=1,则为0,转至ZERO,DH+1
JSNEGAT;若SF=0则为负数,BH+1
INCBL;既不是0又不是负,则为正数,BL+1
JMPNEXT3
ZERO:
INCDH;0的个数加1
JMPNEXT3
NEGAT:
INCBH;负数个数加1
NEXT3:
INCSI;修改地址指针SI
LOOPNEXT2;未完,继续循环
MOV[SI],DH;存入0元素个数统计结果
INCSI
MOV[SI],BX;存入正、负数个数统计结果
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.把地址偏移量为STRG1单元开始的128个单元的内容传送到地址偏移量为STRG2开始的单元中。
解
DATASEGMENT
STRGlDBXXH,XXH,XXH,….XXH ;128个数据
COUNTEOU$-STRGl
STRG2DB128DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETSTRG1
MOVDI,OFFSETSTRG2
MOVCX,COUNT
CLD
REPMOVSB
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5.寄存器SI做地址指针,自SI所指的内存单元开始连续存放三个无符号数(以字为单位),编一程序求它们的和,并将结果存放在这三个数之后的单元中。
解
DATASEGMENT
BUFDWXXH,YYH,ZZH
SUMDW?
,?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVDI,OFFSETSUM
MOVAX,[SI]
ADDAX,[SI+2]
MOV[DI],AX
MOVAX,0
ADDCAX,0
MOV[DI+2],AX
MOVAX,[DI]
ADDCAX,[SI+4]
MOV[DI],AX
MOVAX,0
ADDCAX,[DI+2]
MOV[DI+2],AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.读下面程序段,问:
在什么情况下本段程序的执行结果是AH=0?
START:
IN AL,5FH
MOVAH,0
JZBRCH
MOVAH,0
JMPSTOP
BRCH:
MOVAH,0FFH
STOP:
INT20H
解当标志寄存器的ZF=0时,执行结果AH=0。
(JZ之前的两条指令对零标志没有影响)
7.下面语句在存储器中分别为变量分配多少字节?
0NEDW10
TW0DW4DUP(?
),5
THREEDB2DUP(?
,8DUP(0))
COUNTEQU10
FOURDDCOUNTDUP(?
)
FIVEDB ‘HOWAREYOU?
’
解
ONEDW10;为ONE分配2个字节
TWODW4DUP(?
),5;为TWO分配10个字节
THREEDB2DUP(?
,8DUP(0));为THREE分配18个字节
COUNTEQU10;不给COUNT分配存储单元
FOURDDCOUNTDUP(?
);为FOUR分配40个字节
FIVEDB‘HOWAREYOU?
’;为FIVE分配12个字节
8.数据定义语句如下所示:
FIRSTDB90H,5FH,6EH,69H
SECONDDB5DUP(?
)
THIRDDB5DUP(?
)
FORTHDBDUP(?
)
自FIRST单元开始存放的是一个四字节的十六进制数(低位字节在前),要求:
(1)编一段程序将这个数左移两位后存放到自SECOND开始的单元(注意保留移出部分);
(2)编一段程序将这个数右移两位后存放到自THIRD开始的单元(注意保留移出部分);
(3)编一段程序将这个数求补后存放到自FORTH开始的单元。
解
DATASEGMENT
FIRSTDB90H,5FH,6EH,69H
SECONDDB5DUP(?
)
THIRDDB5DUP(?
)
FORTHDBDUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CALLSUBP1
CALLSUBP2
CALLSUBP3
MOVAH,4CH
INT21H
SUBP1PROC
MOVSI,OFFSETFIRST
MOVDI,OFFSETSECOND
XORBL,BL
MOVCL,2
MOVAX,[SI]
MOVDX,[SI+2]
LOP1:
SHLAX,1
RCLDX,1
RCLBL,1
DECCL
JNZLOP1
MOV[DI],AX
MOV[DI+2],DX
MOV[DI+4],BL
RET
SUBP1ENDP
SUBP2PROC
MOVSI,OFFSETFIRST
MOVDI,OFFSETTHIRD
XORBL,BL
MOVCL,2
MOVAX,[SI]
MOVDX,[SI+2]
LOP2:
SHRDX,1
RCRAX,1
RCRBL,1
DECCL
JNZLOP2
MOV[DI],BL
MOV[DI+1],AX
MOV[DI+3],DX
RET
SUBP2ENDP
SUBP3PROC
MOVSI,OFFSETFIRST
MOVDI,OFFSETFORTH
MOVAX,[SI]
MOVDX,[SI+2]
NOTAX
NOTDX
ADDAX,1
ADCDX,0
MOV[DI],AX
MOV[DI+2],DX
RET
SUBP3ENDP
CODEENDS
ENDSTART
9.指令语句ANDAX,OPD1ANDOPD2中,OPD1和OPD2是两个已赋值的变量,问两个AND操作分别在什么时间进行?
有什么区别?
解 前面的AND是指令,在程序运行时执行,后面的AND是运算符,在汇编的时候由汇编程序计算,表达式计算结果出现在执行程序中。
二者的区别在于,前者是指令,程序运行时执行,后者是运算符,汇编时计算。
10.如下指令或程序是否有错,若有错,请指出错在哪里?
(1)KIEOU1024
┇
MOVK1,AX
(2)MOVDS,100
MOV[1000],[2000]
(3)IMPDB?
┇
MOVIMP,AX
(4)A1DB?
A2DB10
┇
CMPA1,A2
(5)将1000送入X1单元,用如下程序:
X1DB?
┇
MOVBX,X1
MOV[BX],1000
解
(1)MOVK1,AX错。
因为K1为立即数,它不能作为目的操作数。
(2)这两条指令都是错的。
第一条立即数不能直接送给段寄存器;第二条两个操作数不能同时为内存操作数。
(3)MOVIMP,AX错。
两操作数类型不匹配,IMP是一字节内存单元,而AX寄存器中为16位数据。
(4)CMPA1,A2错。
两个操作数A1与A2不能同时为内存操作数。
(5)MOV[BX],1000错。
两操作数类型不匹配,[BX]只定义了一字节单元,而1000是16位数据。
11.8086汇编语言程序中段的类型有几种?
各段如何定义?
段定义语句中,定位类型、组合类型、类别各起什么作用?
各有什么含义?
解 8086汇编语言中,段的类型有三种,即代码段、堆栈段、数据段(附加数据段可归属于数据段)。
各段可用段定义语句(SEGMENT与ENDS)和段名赋给段寄存器语句(ASSUME)来定义。
段定义语句中,定位类型表示此段的起始边界要求,可允许4种段的起始边界,即PAGE、PARA、WORD或BYTE。
它们分别表示段的起始值为以页、节、字、字节为边界,若此项省略,则默认值为PARA。
组合类型用来告诉连接程序本段与其他段的关系,分别为NONE、PUBLIC、COMMON、AT表达式、STACK或MEMORY。
每一种的含义请参看主教材。
类别是连接程序(LINK)需要的。
它可以是任何合法的名称,必须用单引号括起来,连接程序只使同类别的段发生关联。
典型类别如‘CODE’、'STACK'。
12.使用DOS功能调用0AH从键盘输入40个字符的字符串并将其送入一输入缓冲区。
在按下Enter键后,显示这些字符。
解
NAMEKBDINPUT
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
ORG100H
START:
JMPBEGIN
BUFDB 41
NUMBDB?
CHARSDB41DUP(?
)
MSG1 DB 'Typeanything,followedbyenter.',0DH,0AH,'$'
MSG2DB0DH,0AH,'ContentsoftheKBDinputbuf:
',0DH,0AH,'$'
BEGIN:
MOVAX,CS
MOVDS,AX
MOVDX,OFFSETMSG1
MOVAH,9
INT21H
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
MOVDX,OFFSETMSG2
MOVAH,9
INT21H
XORBX,BX
MOVBL,NUMB
MOVCHARS[BX],'$'
MOVDX,OFFSETCHARS
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
说明
本题把数据区放在代码段中,没有单独定义数据段。
并且用ORG100H语句把程序起始地址的偏移量放在100H开始的单元,用JMPBEGIN指令跳过数据区,这样可以把该程序经汇编、连接后的执行程序(.EXE)用EXE2BIN软件生成.COM文件。
或:
DATASEGMENT
BUFDB 41
NUMBDB?
CHARSDB41DUP(?
)
MSG1 DB 'Typeanything,followedbyenter.',0DH,0AH,'$'
MSG2DB0DH,0AH,'ContentsoftheKBDinputbuf:
',0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMSG1
MOVAH,9
INT21H
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
MOVDX,OFFSETMSG2
MOVAH,9
INT21H
XORBX,BX
MOVBL,NUMB
MOVCHARS[BX],'$'
MOVDX,OFFSETCHARS
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
13.某软件共可接收10个键盘命令(分别为A,B,C,…,J),完成这10个命令的程序分别为过程P0,P1,…,P9。
编一程序从键盘接收命令,并转到相应的过程去执行。
要求用两种方法:
(1)用比较、转移指令实现;
(2)用跳转表实现。
解
(1)用比较、转移指令实现
CODESEGMENT
ASSUMECS:
CODE
ORG100H
START:
JMPBEGlN
MSGDB'Errorcharacter!
',0DH,OAH,'$'
BEGlN:
MOV AX,CS
MOV DS,AX
MOVAH,1
INT21H
CMPAL,'A'
JZPS0
CMPAL,'B'
JZPS1
CMPAL,'C'
JZPS2
CMPAL,'D'
JZPS3
CMPAL,'E'
JZPS4
CMPAL,'F'
JZPS5
CMPAL,'G'
JZPS6
CMPAL,'H'
JZPS7
CMPAL,'I'
JZPS8
CMPAL,'J'
JZPS9
MOVDX,OFFSETMSG
MOVAH,9
INT21H
JMPBEGIN
PS0:
CALLP0
JMPBEGIN
PS1:
CALLP1
JMPBEGIN
PS2:
CALLP2
JMPBEGIN
┇
PS9:
CALLP9
JMPBEGIN
MOVAH,4CH
INT21H
P0PROC
┇
RET
P0ENDP
P1PROC
┇
RET
P1ENDP
┇
P9PROC
┇
RET
P9ENDP
CODEENDS
ENDSTART
或:
DATASEGMENT
MSGDB'Errorcharacter!
',0DH,OAH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
ORG100H
START:
MOV AX,DATA
MOV DS,AX
MOVAH,1
INT21H
CMPAL,'A'
JZPS0
CMPAL,'B'
JZPS1
CMPAL,'C'
JZPS2
CMPAL,'D'
JZPS3
CMPAL,'E'
JZPS4
CMPAL,'F'
JZPS5
CMPAL,'G'
JZPS6
CMPAL,'H'
JZPS7
CMPAL,'I'
JZPS8
CMPAL,'J'
JZPS9
MOVDX,OFFSETMSG
MOVAH,9
INT21H
JMPBEGIN
PS0:
CALLP0
JMPBEGIN
PS1:
CALLP1
JMPBEGIN
PS2:
CALLP2
JMPBEGIN
┇
PS9:
CALLP9
JMPBEGIN
MOVAH,4CH
INT21H
P0PROC
┇
RET
P0ENDP
P1PROC
┇
RET
P1ENDP
┇
P9PROC
┇
RET
P9ENDP
CODEENDS
ENDSTART
(2)用跳转表实现
DATASEGMENT
PTABDW0000H;Firstprogramentrance
DW0100H
DW0200H
DW0300H
DW0400H
DW0500H
DW0600H
DW0700H
DW0800H
DW0900H;Nineteenthprogramentrance
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETPTAB
MOVAH,1
INT21H
XORAH,AH
SUBAL,41H
LOP:
SHLAX,1
ADDBX,AX
JMPWORDPTR[BX]
讨论
实现该题的功能用两种方法都可以,显然,用跳转表实现要简单快捷得多。
所以遇到多分支程序结构时采用跳转表比用条件转移指令更方便。
14.内存自BUFF单元的缓冲区连续放着512个学生的英文分数,编程序统计其中90~100,60~89,60分以下者各有多少人,并把结果连续存放到RESULT开始的单元中。
解
DATASEGMENT
BUFlDB86,92,65,78,45,88,55,100,…,76;共有512个字节数据,数据范围为0~100
COUNTEOU$-BUF1
RESULTDW3DUP(?
)
DATAENDS
STACKSEGMENTSTACK'STACK'
STAPNDB100HDUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOV DS,AX
MOVSI,OFFSETBUF1
MOVDI,OFFSETRESULT
MOVCX,COUNT
CLD
XORBX,BX;BX存放90~100分的学生个数
XORDX,DX;DX存放60~89分的学生个数
XORBP,BP;BP存放00~59分的学生个数
NEXT:
LODSB;取学生分数
CMPAL,90;是否大干等于90分
JNCNEXT1;大于等于90分,转到BX+1
CMPAL,60;是否大于等于60分
JNCNEXT2;大干等于60分,转到DX+1
INCBP;小于60分,BP+1
JMPDONE
NEXT1:
INCBX;90~100分的个数加1
JMPDONE
NEXT2:
INCDX;60~89分的个数加1
DONE:
LOOPNEXT
MOV[DI],BX
ADDDI,2
MOV[DI],DX
ADDDI,2
MOV[DI],BP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
15.设有一数据块,共有100个字节,试找出数据块中最大者,并把它送至MAX单元中。
解
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
0RG100H
START:
JMPBEGIN
BUFDB12H,56H,0ABH,…,0FDH,00H;共100个字节无符号数
COUNTEQU$-BUF
MAXDB?
BEGIN:
MOVAX,CS
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
MOVAL,[SI]
LOP1:
INCSI
CMPAL,[SI]
JGLOP2
XCHGAL,[SI];用MOV AL,[SI]似乎要好一些,不会破坏原始数据。
LOP2:
LOOPLOP1
MOVMAX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
或:
DATASEGMENT
BUFDB12H,56H,0ABH,…,0FDH,00H;共100个字节无符号数
COUNTEQU$-BUF
MAXDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
0RG100H
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
MOVAL,[SI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 习题及参考解答 习题 参考 解答
![提示](https://static.bdocx.com/images/bang_tan.gif)