李伯成《微机原理》习题 第三章.docx

上传人:b****3 文档编号:4628940 上传时间:2023-05-07 格式:DOCX 页数:18 大小:21.06KB
下载 相关 举报
李伯成《微机原理》习题 第三章.docx_第1页
第1页 / 共18页
李伯成《微机原理》习题 第三章.docx_第2页
第2页 / 共18页
李伯成《微机原理》习题 第三章.docx_第3页
第3页 / 共18页
李伯成《微机原理》习题 第三章.docx_第4页
第4页 / 共18页
李伯成《微机原理》习题 第三章.docx_第5页
第5页 / 共18页
李伯成《微机原理》习题 第三章.docx_第6页
第6页 / 共18页
李伯成《微机原理》习题 第三章.docx_第7页
第7页 / 共18页
李伯成《微机原理》习题 第三章.docx_第8页
第8页 / 共18页
李伯成《微机原理》习题 第三章.docx_第9页
第9页 / 共18页
李伯成《微机原理》习题 第三章.docx_第10页
第10页 / 共18页
李伯成《微机原理》习题 第三章.docx_第11页
第11页 / 共18页
李伯成《微机原理》习题 第三章.docx_第12页
第12页 / 共18页
李伯成《微机原理》习题 第三章.docx_第13页
第13页 / 共18页
李伯成《微机原理》习题 第三章.docx_第14页
第14页 / 共18页
李伯成《微机原理》习题 第三章.docx_第15页
第15页 / 共18页
李伯成《微机原理》习题 第三章.docx_第16页
第16页 / 共18页
李伯成《微机原理》习题 第三章.docx_第17页
第17页 / 共18页
李伯成《微机原理》习题 第三章.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

李伯成《微机原理》习题 第三章.docx

《李伯成《微机原理》习题 第三章.docx》由会员分享,可在线阅读,更多相关《李伯成《微机原理》习题 第三章.docx(18页珍藏版)》请在冰点文库上搜索。

李伯成《微机原理》习题 第三章.docx

李伯成《微机原理》习题第三章

李伯成《微机原理》习题第三章

本章作业参考书目:

1.周明德:

微型计算机IBM-PC系统原理与应用清华大学出版社1991

2.王永山等:

微型计算机原理与应用西安电子科大出版社1998

3.张怀莲:

IBMPC汇编语言程序设计电子工业出版社1990

注:

本习题解中的程序仅为代码片段,可在Emu8086version2.57环境下仿真运行,如果在MASM下进行汇编,需添加段设置以及相应的伪指令。

 

3.1

MOVAX,00H;立即寻址

SUBAX,AX;寄存器寻址

MOVAX,[BX];寄存器间接寻址

MOVAX,TABLE;直接寻址

MOVAL,ARAY1[SI];寄存器相对寻址

MOVAX,[BX+6];寄存器相对寻址

 

3.2若1KB的数据存放在TABLE以下,试编写程序将该数据拌到NEXT之下。

程序片段如下:

ORG100h

MOVCX,03FFH;数据个数

LEASI,TABLE;源区首地址

LEADI,NEXT;目的区首地址

AGAIN:

MOVAL,[SI];

MOV[DI],AL;搬移

INCSI

INCDI;移动地址指针

DECCX;循环计数器递减

JNZAGAIN;循环未结束转

HLT;暂停

TABLEDB1024dup('A');源数据区

NEXTDB1024dup(0);目的数据区

 

3.3编写10个字(16位二进制数)之和的程序

 

ORG100h

LEASI,ADD1;

LEADI,ADD2;

LEABX,SUM;

MOVCL,CONT;

MOVCH,0;循环初始化

CLC;进位清零

MADD1:

MOVAX,[SI];读加数1

ADCAX,[DI]

ADDSI,2;移动源区地址指针

ADDDI,2;移动目的区地址指针

MOV[BX],AX;回存计算结果

ADDBX,2;移动“和”存储区地址指针

LOOPMADD1;循环控制

HLT;暂停

ADD1DB0FEH,86H,7CH,44h,56H,1FH,24H,01H,02H,33H;加数1

ADD2DB56H,49H,4EH,0FH,9CH,22H,45H,11H,45H,21H;加数2

SUMDB10DUP(0);和存储单元

CONTDB5;循环次数

 

3.4某16位二进制数,放在DATA连续的两个单元中,试编程求其平方根和余数,将其分别存放在ANS和REMAIN中。

ORG100h

MOVBL,2;除数初值

AGAIN:

MOVCX,NUM;预计最大循环次数

MOVAL,BL;0、1的平方根除外

MULBL;得到2的平方

CMPAX,CX;大于原始数据么?

JGEXIT;若原始数据小于4转EXIT

MOVAX,CX;读数

DIVBL;试除

INCBL;除数递增

JMPAGAIN;继续除

EXIT:

DECBL;去除除数自加

MOVANS,BL;存商

MOVAL,BL;恢复余数

MULBL;

SUBCX,AX;

MOVREMAIN,CL;

HLT

NUMDW7;

ANSDB?

;

REMAINDB?

;

3.5在DATA1之下顺序存放着以ASCII码表示的千位数,将其转换成二进制数。

MOVCL,4;移位次数

MOVCH,CL;循环次数

MOVSI,OFFSETASCBIN

CLD

XORAX,AX

XORDX,DX

ASCB1:

LODSB

ANDAL,7FH

CMPAL,'0';不大于‘0’结束转换

JLERR

CMPAL,'9'

JGASCB2;大于‘9’转ASCB2

SUBAL,30H;数字形式二进制数减30H

JMPASCB3

ASCB2:

CMPAL,'A';大于‘9’又小于‘A’结束转换

JLERR

CMPAL,'F'

JGERR;大于‘F’为不合理数,结束转换

SUBAL,37H;字符形式ASCII数减37H

ASCB3:

ORDL,AL

ROLDX,CL

DECCH

JNZASCB1

ROLDX,CL

MOVBIN,DX;存储转换结果

ERR:

NOP

HLT

ASCBINDB'1','B,'4','3'

BINDW?

3.7编写程序将MOLT中的一个8位数乘以20,乘积放在ANS中(用3种方式)。

解:

第一种方法:

常规乘法运算

ORG100h

MOVAL,MOLT

MOVBL,20

MULBL

MOVANS,AX

HLT

MOLTDB2

ANSDW?

 

第二种方法,将MOLT连加20次

ORG100h

MOVCX,20

MOVBX,MOLT

XORAX,AX

CLC

ADD1:

ADCAX,BX

LOOPADD1

MOVANS,AX

HLT

MOLTDW5

ANSDW?

第三种方法,将“20”连加MOLT次

ORG100h

MOVCX,MOLT

MOVBX,20

XORAX,AX

CLC

ADD1:

ADCAX,BX

LOOPADD1

MOVANS,AX

HLT

MOLTDW5

ANSDW?

3.8在DATA之下存放100个无符号的8位数,找出其最大者并将其存放在KVFF单元。

ORG100h

XORDL,DL

LEADI,KVFF;

NEXT0:

LEASI,BUFFER;

MOVCL,99;比较次数为N-1次

NEXT1:

MOVAL,[SI];

INCSI;

CMPDL,AL;

JNCNEXT2;

MOVDL,AL;DL中始终存目前最大值

NEXT2:

DECCL;

JNZNEXT1;

MOV[DI],DL;最大值存储

HLT

BUFFERDB;自行定义100个数据

KVFFDB?

 

3.9若将数据按大小顺序排序,试编写程序..

解:

此处采用“冒泡法”予以处理:

ORG100h

LEADI,BUFFER;数据区

MOVBL,99;外循环次数

NEXT0:

MOVSI,DI;

MOVCL,BL;内循环次数

NEXT3:

MOVAL,[SI];读数

INCSI;移动指针

CMPAL,[SI];比较

JNCNEXT5;大于转NEXT5

MOVDL,[SI];

MOV[SI-1],DL;

MOV[SI],AL;不大于互换

NEXT5:

DECCL;内循环次数减一

JNZNEXT3;

DECBL;外循环次数减一

JNZNEXT0

HLT

BUFFERDB自行定义100个字节型数据

3.10在BVFF单元中有一个BCD数A,试根据下列关系编写程序,计算结果存在DES中.

A<20,Y=3*A;A<60,Y=A-20;A>=60,Y=80.

ORG100h

MOVAL,BVFF

CMPAL,20

JLEX1

CMPAL,60

JLEX2

MOVAL,80

JMPSTOP

EX1:

MOVBL,3

MULBL

JMPSTOP

EX2:

SUBAL,20

STOP:

MOVDES,AL

HLT

BVFFDB8

DESDB?

3.11址为DATAB开始的80个单元中,存放某班80个学生的某课程成绩,要求:

统计>=90分、80~89分、70~79分、60~69分、60分以下的人数,结果存放在BTRX开始的5个单元中

求平均成绩,结果存放在LEVEL中。

解:

寄存器使用分配:

90分以上在DH,80分以上在DL,70分以上在BH,60分以上在BL,60分以下在AH,总分、均分都在[DI]。

 

ORG100h

XORAH,AH

XORDX,DX;统计结果清零

XORBX,BX;统计结果清零

LEASI,DATA

LEADI,LEVEL

MOVCL,CONT;总人数送循环计数器CX

goon:

MOVAL,[SI];读原始数据

ADC[DI],AL;累加总分

ADC[DI+1],0;计算进位

CMPAL,90

JLPP8;不高于90分者转PP8

INCDH;90--100分的人数加一

JMPSTOR

PP8:

CMPAL,80

JLPP7;不高于80分转PP7

INCDL;80----89分的人数加一

JMPSTOR

PP7:

CMPAL,70

JLPP6;不高于70分者转PP6

INCBH;70---79分的人数加一

JMPSTOR

PP6:

CMPAL,60

JLPP5;不高于60分者转PP5

INCBL;60---69分的人数加一

JMPSTOR

PP5:

INCAH;低于60分的人数加一

STOR:

INCSI;读下一个分数

LOOPGOON

;CX=CX-1,CX不为零转GOON,继续统计

LEASI,BUFFER;回存统计结果

MOV[SI],DH

INCSI

MOV[SI],DL

INCSI

MOV[SI],BH

INCSI

MOV[SI],BL

INCSI

MOV[SI],AH

MOVAX,WORDPTR[DI];计算平均成绩

MOVCL,CONT

DIVCL

MOVLEVEL,AL;回存平均成绩

HLT

CONTDB10

DATADB30,65,99,80,75,89,100,45,60,70

BUFFERDB?

?

?

?

?

LEVELDB?

?

 

3.12求两个有符号数(DATA1,DATA2)差的绝对值,结果存入DATA3.

ORG100h

MOVAL,DATA1;读入被减数

SUBAL,DATA2;减去减数

JCCHANGE;

JMPSTOR

CHANGE:

NEGAL

STOR:

MOVDATA3,AL

HLT

DATA1DB3

DATA2DB5

DATA3DB?

3.13存从40000H到4BFFH的个单元均写入55H,并再逐个读出,验证是否一致,若一致,置AL为7EH,否则置AL为81H.

ORG100h

MOVAX,4000H;

MOVDS,AX;

MOVSI,0

START:

MOVCX,0BFFFH

BEGIN:

MOV[SI],55H

MOVAL,[SI]

INCSI

CMPAL,55H

JNZERR

LOOPBEGIN

MOVAL,7EH

JMPSTOP

ERR:

MOVAL,81H

STOP:

HLT

3.14~3.15端口03FBH的BIT5为状态标志,当该位为1时,表示外设忙,不能接收数据;当为0时,表示外设闲,可以接收数据;当CPU向端口03F8H写入一个字节的数据时,03FBH的BIT5置1,当它变为0状态时,又可以写入下一个数据。

据此编写将起始地址为SEDAT的50个数据输出到03F8H端口的程序。

WAIT:

MOVDX,03FBH

INAL,DX

TESTAL,00100000B;(20H)

JZSEND

JMPWAIT

SEND:

MOVDX,3F8H

MOVAL,[SI];

CMPAL,0AH;输出字串结束标志符

JZSTOP

OUTDX,AL

JMPWAIT

STOP:

HLT

3.16口02E0H的BIT2和BIT5同时为1,表示端口02E7H有一个字节型数据准备好可以用以输入,当CPU从该端口读入数据后,02E0端口的BIT2和BIT5就不再同时为1;只有当02E7H端口的数据再次准备好时,它们才会再次同时为1,据此编写从02E7H端口输入32个数据然后存入A1000H单元开始的区域。

 

MOVAX,0A000H

MOVDS,AX

MOVSI,1000H;设置存储区地址

MOVCL,20H;输入数据个数

BEGIN:

MOVDX,0E20H

INAL,DX

TESTAL,00100100B;测试状态位BIT5、BIT2

JZBEGIN;不同时为1继续测试

MOVDX,02E7H

INAL,DX;输入数据

MOV[SI],AL;存到指定区域

INCSI;移动地址指针

LOOPBEGIN;循环

HLT

3.17在内存40000H开始的16K的单元中存放着一组数据,将其顺序搬移到起始地址为A0000H的区域。

解:

利用字符串操作指令MOVSB,16K即16*1024=3FFFH。

MOVAX,4000H

MOVDS,AX

MOVAX,A000H

MOVES,AX

MOVSI,0

MOVDI,0

MOVCX,3FFFH

CLD

REPMOVSB

HLT

3.18上题的基础上,将两个区域的数据逐个进行比较,若有错将BL置0,全对将BL置FFH。

MOVAX,4000H

MOVDS,AX

MOVAX,A000H

MOVES,AX

MOVSI,0

MOVDI,0

MOVCX,03FFH

CLD

AAB:

CMPSB

JNZSTOP

LOOPAAB

MOVBL,0FFH

JMPEX1

STOP:

MOVBL,0;

EX1:

NOP

HLT

3.19统计由40000H单元开始的16K个单元中所存字符‘A’的个数,统计结果存放在DX寄存器中。

MOVAX,4000H

MOVDS,AX

MOVSI,0;

MOVCX,3FFFH;数据个数

MOVDX,0;统计结果寄存器清零XORDX,DX

CLD

AAB:

LODSB

CMPAL,‘A’;比较

JZAAC;字符为‘A’转计数

LOOPAAB;循环

JMPSTOP;处理完毕转结束

AAC:

INCDX;统计结果加1

DECCX;循环次数减1

JCXNZAAB;CX<>0继续

STOP:

HLT

 

3.20编写对AL中的数据进行“偶校验”的一个过程,并将校验结果放入AL寄存器。

PJYPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVAL,DAT

ANDAL,AL

JNPPJY1

MOVAL,00H;表示为偶

JMPEXIT

PJY1:

MOVAL,FFH;表示为奇

EXIT:

POPDX

POPCX

POPBX

POPAX

RET

PJYENDP

DATDB?

3.21对80000H开始的256个单元的数据加上偶校验。

ORG100h

MOVAX,8000H

MOVDS,AX

MOVSI,0

MOVCX,100H

CLD

PAR0:

LODSB;(MOVAL,[SI];INCSI)

TESTAL,AL

JNPPAR1

LOOPPAR0

JMPSTOP

PAR1:

ORAL,80H;

MOV[SI-1],AL

DECCX

JNZPAR0

STOP:

HLT

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

当前位置:首页 > 工作范文 > 行政公文

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

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