李伯成《微机原理》习题 第三章.docx
- 文档编号:30278243
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:16
- 大小:20.66KB
李伯成《微机原理》习题 第三章.docx
《李伯成《微机原理》习题 第三章.docx》由会员分享,可在线阅读,更多相关《李伯成《微机原理》习题 第三章.docx(16页珍藏版)》请在冰豆网上搜索。
李伯成《微机原理》习题第三章
李伯成《微机原理》习题第三章
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理 李伯成微机原理习题 第三章 李伯成 微机 原理 习题 第三