微机原理接口四习题附标准答案Word文件下载.docx

上传人:b****1 文档编号:4033506 上传时间:2023-05-02 格式:DOCX 页数:23 大小:26.31KB
下载 相关 举报
微机原理接口四习题附标准答案Word文件下载.docx_第1页
第1页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第2页
第2页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第3页
第3页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第4页
第4页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第5页
第5页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第6页
第6页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第7页
第7页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第8页
第8页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第9页
第9页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第10页
第10页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第11页
第11页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第12页
第12页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第13页
第13页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第14页
第14页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第15页
第15页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第16页
第16页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第17页
第17页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第18页
第18页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第19页
第19页 / 共23页
微机原理接口四习题附标准答案Word文件下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理接口四习题附标准答案Word文件下载.docx

《微机原理接口四习题附标准答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理接口四习题附标准答案Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。

微机原理接口四习题附标准答案Word文件下载.docx

A1DD2DUP(7,1,?

A2DB10DUP(0,4,3DUP

(2),5)

……

09H

ARA1(0006H)

00H

11H

?

ARA2(000AH)

‘4’

‘6’

0FFH

ARA3(0010H)

ARA4(0016H)

05H

‘$’

9AH

VAR2(0024H)

56H

41H(‘A’)

42H(‘B’)

题4-7图

CNTEQU20H

A3DW100DUP(?

DSEGENDS

请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出

A1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。

(SEGA1)=0300H,(OFFSETA1)=2000H,(TYPEA1)=4,

(LENGTHA1)=2,(SIZEA1)=2×

4=8;

(SEGA2)=0300H,(OFFSETA2)=2018H,(TYPEA2)=1,

(LENGTHA2)=10,(SIZEA2)=10×

1=60;

(SEGA3)=0300H,(OFFSETA3)=2054H,(TYPEA3)=2,

(LENGTHA3)=100,(SIZEA3)=100×

2=200

6.已知符号定义语句如下:

ALPHAEQU100

BETAEQU25

GAMMAEQU2

分别求下列各表达式的值。

(1)ALPHA*4GTBETA=100*4GT25=0FFFFH

(2)ALPHAMODGAMMA+BETA=100MOD2+25=25

(3)(BETA/3)LE5=(25/3)LE5=0

(4)ALPHAANDBETA=100AND25=64H&

19H=0

(5)GAMMAXOR(BETAEQ25)=2(25EQ25)=0FFFDH

7.已知数据段定义如下:

DSEGSEGMENT

ORG6

ARA1DD110009H

ARA2DW2DUP(?

),‘64’

CONT1EQU$-ARA2

COUT2EQUARA2-ARA1

ARA3DBCONT1DUP(0FFH)

ARA4DB2DUP(?

CONT2DUP(5),’$’)

ORG$+2

VAR2DW569AH

DB‘AB’

DSEGENDS

用示意图说明该数据段的存贮单元分配情况。

有关存储单元的内容如右图所示。

8.下列程序是否有错?

如有错,请改正。

该程序完成什么功能?

DATASEGMENT

INBUFDW100DUP(?

OUTBUFDW100DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

MOVAX,DATA

MOVDS,AX

INIT:

MOVSI,OFFSETINBUF

LEADI,OUTBUF

MOVCX,100

REPMOVSB

MAINENDP

CODEENDS

ENDMAIN

改正之后的源程序清单如下(下划波浪线的语句是原来没有的或有错之处):

DATASEGMENT

INBUFDW100DUP(?

OUTBUFDW100DUP(?

DATA,ES:

DATA;

原ASSUME语句未说明ES

PUSHDS;

补充的三条指令为主程序返回提供正确的地址

XORAX,AX

PUSHAX

MOVES,AX;

MOVS指令以ES:

DI为目的串指针,故应对ES赋值

LEADI,OUTBUF

CLD;

从首址开始传送,应使DF=0

REPMOVSW;

应传送的是100个字而非字节

RET;

程序结束,返回DOS

该程序完成的功能是:

将INBUF表内的10个字数据复制到以OUTPUT开始的连续的内存单元中。

9.读下面程序,在其中的空处添上适当内容。

该程序完成了什么功能?

程序运行后,变量RS的值是多少?

BUFDB-13,24,5,-62,77,20,-7,145,0

CNTDB$-BUF

RSDB0

STACKSEGMENTPARASTACK‘STACK’

DB256DUP(?

STACKENDS

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

STARTPROCFAR

PUSHDS

MOVAX,0

PUSHAX

LEABX,BUF

MOVCH,0

MOVCL,

LP:

MOVAL,[BX]

TESTAL,80H

JECONT

INCRS

CONT:

INCBX

LOOPLP

RET

STARTENDP

ENDSTART

程序空处可填CNT,字节变量RS的最后结果是04H。

该程序实现的功能是:

统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。

需要注意的是:

十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。

10.编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。

一种可能的程序如下实现:

BLOCKDB35,-27,-13,6,-47,52,9,-3

COUNTEQU$-BLOCK

BUFFERDBCOUNTDUP(?

STACKSEGMENTPARASTACK‘STACK’

DW40DUP(?

DATA,ES:

STACK

BEGIN:

MOVAX,DATA

MOVES,AX;

需用STOS串操作指令

MOVCX,COUNT

LEASI,BLOCK;

源数据区指针

LEADI,BUFFER;

正数存放区指针

CLD;

自动增量

AGAIN:

LODSB;

取源数据,并修改SI

TESTAL,80H;

取符号位,不影响AL

JSGO;

符号位=1,是负数,不存

STOSB;

存正数并修改DI

GO:

LOOPAGAIN

MOVAH,4CH;

退出循环,返回DOS

INT21H

ENDBEGIN

11.已知有一个长100个字的数据块,存放在以3DA0H:

1000H开始的存储区域内。

试编写一个完整的汇编语言程序,将该数据块复制到以3DA0H:

1008H开始的存储区内。

DATASEGMENTAT3DA0H

ORG1000H

BLOCKDW104DUP(?

SSEGSEGMENTPARASTACK‘SSEG’

DB100DUP(?

SSEGENDS

CODE,SS:

SSEG,DS:

PUSHDS

MOVAX,SEGBLOCK

MOVES,AX

MOVCX,200;

重复次数

LEASI,BLOCK

ADDSI,199;

SI=10C7H

MOVDI,SI

ADDDI,8;

DI=10CFH

STD;

自动减量

REPMOVSB

简析:

由题意可知,源数据区(占用地址3DA0:

1000H~3DA0:

10C7H,共200个字节)与目标数据区(占用地址3DA0:

1008H~3DA0:

10CFH,共200个字节)是重叠的。

若从首址开始增量传送(DF=0),将破坏1008H以后的源数据,所以必须从末址向首址减量传送(DF=1)。

数据段初始化时,有以下几点需注意:

段基址规定为3DA0H,故应在段定义伪指令SEGMENT后加上AT语句;

源数据区首址的偏移量规定为1000H,故应使用ORG语句指明;

对源、目标数据区进行定义时,应注意目标数据区首址的偏移量是1008H。

如果定义为:

ORG1000H

SOURDW100DUP(?

);

源数据区

DESTDW100DUP(?

目标数据区

则目标数据区首址的偏移量实际上是10C8H,不合题意。

可将它们统一定义为足够长度(至少104字或208字节)的变量,如参考程序所示。

指针初始化时,可以将SI、DI分别置为10C7H、10CFH,且CX=200,即进行字节的传送,使用MOVSB;

亦可将SI、DI分别置为10C6H、10CEH,且CX=100,即进行字的传送,相应使用MOVSW。

12.从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、2AH、66H、0E0H、3FH。

编程找出它们的中间值并放入RES单元,且将结果以“(RES)=?

”的格式显示在屏幕上。

BUFDB13H,0D8H,92H,2AH,66H,0E0H,3FH

RESDB?

中间数的存放单元

STRDB‘(RES)=’

STR1DB?

,?

,‘$’;

结果字符串

SSEGSEGMENTPARASTACK‘SSEG’

MAINPROCFAR;

主程序

XORAX,AX

有STOS指令,需用ES

MOVCX,6;

外循环次数,比6次

AGN:

MOVSI,OFFSETBUF

MOVDI,SI

INCDI;

SI、DI指向相邻2数

MOVDX,6;

内循环次数,比6次

AGN1:

MOVAL,[SI]

CMPAL,[DI];

两个无符号数相比较

JBUNCH;

小于则转,不互换

EXCH:

XCHGAL,[DI];

前1单元较大,则互换

MOV[SI],AL;

大数放在后面

UNCH:

INCSI;

修改指针,指向下一个数

INCDI

DECDX

JNZAGN1;

未处理完,继续内循环

LOOPAGN;

外循环

DONE:

MOVAL,[SI-3];

排序完成,取中间数

MOVRES,AL

ANDAL,0F0H;

分离高半字节

MOVCL,4

SHRAL,CL

CALLBATR;

调子程序,将AL值转换为ASCII码

LEADI,STR1;

DI指向结果单元

CLD

存放转换结果

MOVAL,RES

ANDAL,0FH;

分离并转换低半字节

CALLBATR

STOSB

LEADX,STR;

显示整个字符串

MOVAH,09H

MAINENDP;

主程序MAIN结束

子程序BATR,实现16进制数到ASCII码的转换

BATRPROCNEAR

CMPAL,10;

入口参数为AL

JBNUM;

是数字,则转NUM

ADDAL,’A’-10-’0’;

字母

NUM:

ADDAL,’0’

BATRENDP;

子程序结束

本例的基本思路是:

先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。

然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。

数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。

内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。

外循环实现所有数之间的两两相较。

共7个数据,故内、外循环中的比较次数均为6次。

编程时需注意:

无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到UNCH;

若要从大到小排列,则用JA代替JB即可。

对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。

在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;

显示时使DX直接指向STR,以STR1末尾的“$”为结束符。

中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。

13.设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;

2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:

3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。

编写一段查表送显的程序,要求:

先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据“0FFH”为止。

TABDB3FH,06H,5BH,4FH,66H

DB6DH,3DH,07H,7FH,6FH;

0~9的七段码

DW50DUP(?

STACK,DS:

START:

LEABX,TAB;

BX指向表首址

NEXT:

INAL,1;

从测试口输入

CMPAL,0FFH

JESTOP;

是0FFH,结束

XLATTAB;

不是0FFH,查表转换

OUT2,AL;

向显示口输出七段码

JMPNEXT;

继续测试

STOP:

MOVAH,4CH

INT21H

14.编程实现以下操作:

从键盘输入4个数字,分别作为2个10~99之间的十进制数。

求它们的和,并把结果以三位十进制数的形式显示在屏幕上。

要求:

输入回显的两个加数与送显的和之间有适当的分隔,以示区别。

格式可自行拟定。

NUM1DB?

加数1,高位在前,以非组合BCD码存放

NUM2DB?

加数2,高位在前,以非组合BCD码存放

SUMDB?

存放结果的ASCII码,以‘$’为结束符

STACKSEGMENTPARASTACK‘STACK’

FIRST:

MOVAX,SEGNUM1

自动增量,先输入高位

MOVCX,2

LEADI,NUM1;

输入加数1

IN1:

MOVAH,1;

DOS功能调用,单字符输入

ASCII码转换为非组合BCD码

LOOPIN1

MOVDL,‘+’;

输出加号,以分隔2个加数

MOVAH,2

LEADI,NUM2;

输入加数2

IN2:

MOVAH,01H

ANDAL,0FH

LOOPIN2

MOVDL,‘=’;

输出等号,分隔加数与结果

MOVAH,02H

LEASI,NUM1

INCSI;

SI指向加数1的低位

LEABX,NUM2

INCBX;

BX指向加数2的低位

LEADI,SUM

ADDDI,2;

DI指向结果的末单元

自动减量,由低向高相加

MOVCX,2;

相加次数

CLC;

清进位,准备用ADC

AD:

取加数1的低位,修改SI

ADCAL,[BX];

2数相加,带进位

AAA;

未组合BCD码的十进制调整

PUSHF

ADDAL,30H;

BCD码向ASCII码转换

POPF

因未组合BCD码的高4位为0,故加30H不会影响CF

存和,并修改DI。

CF不变

DECBX;

指向加数2的高位。

LOOPAD

ADCBYTEPTR[DI],30H;

高位相加若产生进位,则使SUM单元加1(表示百位),故使用ADC指令

LEADX,SUM;

输出结果

MOVAH,4CH;

返回DOS

CODEENDS

ENDFIRST

按照本参考程序,屏幕显示格式如“73+46=119”的样式。

基本思路是:

首先调用DOS功能,从键盘输入2个0~9之间的数字(字符串输入的AH调用号为10,单个字符输入的AH调用号为1),然后向CRT输出“+”(单个字符输出的AH调用号为2);

再由键盘输入2个数,然后输出“=”。

将两次输入的数分别作为2个加数相加,得到的和经十进制调整后,向CRT输出(字符串输出的AH调用号为9)。

以下几处需进行码制转换:

调用单个字符输入功能后,AL中的出口参数为各数字键所对应的ASCII码,故应转换为BCD码才能进行加运算。

转换方式:

与0FH相与,所得为未组合BCD码。

2个未组合BCD码相加,和应该用AAA指令

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2