第4章习题及参考解答精选Word格式.docx

上传人:b****5 文档编号:21775143 上传时间:2023-02-01 格式:DOCX 页数:22 大小:22.81KB
下载 相关 举报
第4章习题及参考解答精选Word格式.docx_第1页
第1页 / 共22页
第4章习题及参考解答精选Word格式.docx_第2页
第2页 / 共22页
第4章习题及参考解答精选Word格式.docx_第3页
第3页 / 共22页
第4章习题及参考解答精选Word格式.docx_第4页
第4页 / 共22页
第4章习题及参考解答精选Word格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第4章习题及参考解答精选Word格式.docx

《第4章习题及参考解答精选Word格式.docx》由会员分享,可在线阅读,更多相关《第4章习题及参考解答精选Word格式.docx(22页珍藏版)》请在冰豆网上搜索。

第4章习题及参考解答精选Word格式.docx

DB100DUP(?

CODESEGMENT

ASSUMECS:

START:

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开始的单元中。

STRGlDBXXH,XXH,XXH,….XXH ;

128个数据

COUNTEOU$-STRGl

STRG2DB128DUP(?

MOVAX,DATA

MOVDS,AX

MOVSI,OFFSETSTRG1

MOVDI,OFFSETSTRG2

CLD

REPMOVSB

CODEENDS

5.寄存器SI做地址指针,自SI所指的内存单元开始连续存放三个无符号数(以字为单位),编一程序求它们的和,并将结果存放在这三个数之后的单元中。

BUFDWXXH,YYH,ZZH

SUMDW?

,?

START:

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

ADDCAX,[DI+2]

INT21H

6.读下面程序段,问:

在什么情况下本段程序的执行结果是AH=0?

IN AL,5FH

MOVAH,0

JZBRCH

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开始的单元。

FIRSTDB90H,5FH,6EH,69H

SECONDDB5DUP(?

THIRDDB5DUP(?

FORTHDBDUP(?

CODESEGMENT

CALLSUBP1

CALLSUBP2

CALLSUBP3

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

MOVDI,OFFSETTHIRD

MOVCL,2

MOVDX,[SI+2]

LOP2:

SHRDX,1

RCRAX,1

RCRBL,1

JNZLOP2

MOV[DI],BL

MOV[DI+1],AX

MOV[DI+3],DX

SUBP2ENDP

SUBP3PROC

MOVDI,OFFSETFORTH

MOVDX,[SI+2]

NOTAX

NOTDX

ADDAX,1

ADCDX,0

SUBP3ENDP

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

CODE

JMPBEGIN

BUFDB 41

NUMBDB?

CHARSDB41DUP(?

MSG1 DB '

Typeanything,followedbyenter.'

,0DH,0AH,'

$'

MSG2DB0DH,0AH,'

ContentsoftheKBDinputbuf:

'

BEGIN:

MOVAX,CS

MOVDX,OFFSETMSG1

MOVAH,9

MOVDX,OFFSETBUF

MOVAH,0AH

MOVDX,OFFSETMSG2

XORBX,BX

MOVBL,NUMB

MOVCHARS[BX],'

MOVDX,OFFSETCHARS

说明

本题把数据区放在代码段中,没有单独定义数据段。

并且用ORG100H语句把程序起始地址的偏移量放在100H开始的单元,用JMPBEGIN指令跳过数据区,这样可以把该程序经汇编、连接后的执行程序(.EXE)用EXE2BIN软件生成.COM文件。

或:

DATAENDS

MOVAX,DATA

XORBX,BX

13.某软件共可接收10个键盘命令(分别为A,B,C,…,J),完成这10个命令的程序分别为过程P0,P1,…,P9。

编一程序从键盘接收命令,并转到相应的过程去执行。

要求用两种方法:

(1)用比较、转移指令实现;

(2)用跳转表实现。

(1)用比较、转移指令实现

ORG100H

JMPBEGlN

MSGDB'

Errorcharacter!

,0DH,OAH,'

BEGlN:

MOV AX,CS

MOV DS,AX

MOVAH,1

CMPAL,'

A'

JZPS0

B'

JZPS1

C'

JZPS2

D'

JZPS3

E'

JZPS4

F'

JZPS5

G'

JZPS6

H'

JZPS7

CMPAL,'

I'

JZPS8

J'

JZPS9

MOVDX,OFFSETMSG

MOVAH,9

INT21H

JMPBEGIN

PS0:

CALLP0

JMPBEGIN

PS1:

CALLP1

PS2:

CALLP2

PS9:

CALLP9

INT21H

P0PROC

RET

P0ENDP

P1PROC

P1ENDP

P9PROC

P9ENDP

ENDSTART

DATASEGMENT

MSGDB'

MOV AX,DATA

(2)用跳转表实现

DATASEGMENT

PTABDW0000H;

Firstprogramentrance

DW0100H

DW0200H

DW0300H

DW0400H

DW0500H

DW0600H

DW0700H

DW0800H

DW0900H;

Nineteenthprogramentrance

MOVAX,DATA

MOVBX,OFFSETPTAB

MOVAH,1

XORAH,AH

SUBAL,41H

LOP:

SHLAX,1

ADDBX,AX

JMPWORDPTR[BX]

讨论

实现该题的功能用两种方法都可以,显然,用跳转表实现要简单快捷得多。

所以遇到多分支程序结构时采用跳转表比用条件转移指令更方便。

14.内存自BUFF单元的缓冲区连续放着512个学生的英文分数,编程序统计其中90~100,60~89,60分以下者各有多少人,并把结果连续存放到RESULT开始的单元中。

BUFlDB86,92,65,78,45,88,55,100,…,76;

共有512个字节数据,数据范围为0~100

COUNTEOU$-BUF1

RESULTDW3DUP(?

STACKSEGMENTSTACK'

STAPNDB100HDUP(?

STACKENDS

DATA,SS:

STACK

MOV DS,AX

MOVSI,OFFSETBUF1

MOVDI,OFFSETRESULT

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:

MOV[DI],BX

ADDDI,2

MOV[DI],DX

MOV[DI],BP

15.设有一数据块,共有100个字节,试找出数据块中最大者,并把它送至MAX单元中。

0RG100H

BUFDB12H,56H,0ABH,…,0FDH,00H;

共100个字节无符号数

COUNTEQU$-BUF

MAXDB?

CMPAL,[SI]

JGLOP2

XCHGAL,[SI];

用MOV AL,[SI]似乎要好一些,不会破坏原始数据。

LOOPLOP1

MOVMAX,AL

CODEENDS

XCHGAL,[SI];

MO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1