微机原理Word文件下载.docx
- 文档编号:22914004
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:17
- 大小:19.38KB
微机原理Word文件下载.docx
《微机原理Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
MOVCL,CONT;
MOVCH,0;
循环初始化
CLC;
进位清零
MADD1:
MOVAX,[SI];
读加数1
ADCAX,[DI]
ADDSI,2;
移动源区地址指针
ADDDI,2;
移动目的区地址指针
MOV[BX],AX;
回存计算结果
ADDBX,2;
移动“和”存储区地址指针
LOOPMADD1;
循环控制
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;
存商
恢复余数
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
9'
JGASCB2;
大于‘9’转ASCB2
SUBAL,30H;
数字形式二进制数减30H
JMPASCB3
ASCB2:
大于‘9’又小于‘A’结束转换
F'
JGERR;
大于‘F’为不合理数,结束转换
SUBAL,37H;
字符形式ASCII数减37H
ASCB3:
ORDL,AL
ROLDX,CL
DECCH
JNZASCB1
MOVBIN,DX;
存储转换结果
ERR:
NOP
ASCBINDB'
1'
'
B,'
4'
3'
BINDW?
3.7编写程序将MOLT中的一个8位数乘以20,乘积放在ANS中(用3种方式)。
解:
第一种方法:
常规乘法运算
ORG100h
MOVAL,MOLT
MOVBL,20
MULBL
MOVANS,AX
MOLTDB2
ANSDW?
第二种方法,将MOLT连加20次
MOVCX,20
MOVBX,MOLT
CLC
ADD1:
ADCAX,BX
LOOPADD1
MOLTDW5
第三种方法,将“20”连加MOLT次
MOVCX,MOLT
MOVBX,20
3.8在DATA之下存放100个无符号的8位数,找出其最大者并将其存放在KVFF单元。
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;
最大值存储
BUFFERDB;
自行定义100个数据
KVFFDB?
3.9若将数据按大小顺序排序,试编写程序..
解:
此处采用“冒泡法”予以处理:
LEADI,BUFFER;
数据区
MOVBL,99;
外循环次数
NEXT0:
MOVSI,DI;
MOVCL,BL;
内循环次数
NEXT3:
移动指针
CMPAL,[SI];
比较
JNCNEXT5;
大于转NEXT5
MOVDL,[SI];
MOV[SI-1],DL;
MOV[SI],AL;
不大于互换
NEXT5:
内循环次数减一
JNZNEXT3;
外循环次数减一
JNZNEXT0
BUFFERDB自行定义100个字节型数据
3.10在BVFF单元中有一个BCD数A,试根据下列关系编写程序,计算结果存在DES中.
A<
20,Y=3*A;
A<
60,Y=A-20;
A>
=60,Y=80.
MOVAL,BVFF
CMPAL,20
JLEX1
CMPAL,60
JLEX2
MOVAL,80
JMPSTOP
EX1:
MOVBL,3
EX2:
SUBAL,20
STOP:
MOVDES,AL
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]。
XORAH,AH
XORDX,DX;
统计结果清零
XORBX,BX;
LEASI,DATA
LEADI,LEVEL
总人数送循环计数器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分的人数加一
PP7:
CMPAL,70
JLPP6;
不高于70分者转PP6
INCBH;
70---79分的人数加一
PP6:
JLPP5;
不高于60分者转PP5
INCBL;
60---69分的人数加一
PP5:
INCAH;
低于60分的人数加一
STOR:
INCSI;
读下一个分数
LOOPGOON
CX=CX-1,CX不为零转GOON,继续统计
LEASI,BUFFER;
回存统计结果
MOV[SI],DH
MOV[SI],DL
MOV[SI],BH
MOV[SI],BL
MOV[SI],AH
MOVAX,WORDPTR[DI];
计算平均成绩
MOVCL,CONT
DIVCL
MOVLEVEL,AL;
回存平均成绩
CONTDB10
DATADB30,65,99,80,75,89,100,45,60,70
BUFFERDB?
?
LEVELDB?
?
3.12求两个有符号数(DATA1,DATA2)差的绝对值,结果存入DATA3.
MOVAL,DATA1;
读入被减数
SUBAL,DATA2;
减去减数
JCCHANGE;
CHANGE:
NEGAL
STOR:
MOVDATA3,AL
DATA1DB3
DATA2DB5
DATA3DB?
3.13存从40000H到4BFFFH的个单元均写入55H,并再逐个读出,验证是否一致,若一致,置AL为7EH,否则置AL为81H.
MOVAX,4000H;
MOVDS,AX;
MOVSI,0
START:
MOVCX,0BFFFH
BEGIN:
MOV[SI],55H
MOVAL,[SI]
CMPAL,55H
JNZERR
LOOPBEGIN
MOVAL,7EH
ERR:
MOVAL,81H
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
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
TESTAL,00100100B;
测试状态位BIT5、BIT2
JZBEGIN;
不同时为1继续测试
MOVDX,02E7H
INAL,DX;
输入数据
MOV[SI],AL;
存到指定区域
INCSI;
LOOPBEGIN;
循环
3.17在内存40000H开始的16K的单元中存放着一组数据,将其顺序搬移到起始地址为A0000H的区域。
利用字符串操作指令MOVSB,16K即16*1024=3FFFH。
MOVAX,4000H
MOVAX,A000H
MOVES,AX
MOVSI,0
MOVDI,0
MOVCX,3FFFH
REPMOVSB
3.18上题的基础上,将两个区域的数据逐个进行比较,若有错将BL置0,全对将BL置FFH。
MOVCX,03FFH
AAB:
CMPSB
JNZSTOP
LOOPAAB
MOVBL,0FFH
JMPEX1
MOVBL,0;
EX1:
3.19统计由40000H单元开始的16K个单元中所存字符‘A’的个数,统计结果存放在DX寄存器中。
MOVSI,0;
MOVCX,3FFFH;
数据个数
MOVDX,0;
统计结果寄存器清零XORDX,DX
LODSB
CMPAL,‘A’;
JZAAC;
字符为‘A’转计数
LOOPAAB;
JMPSTOP;
处理完毕转结束
AAC:
INCDX;
统计结果加1
循环次数减1
JCXNZAAB;
CX<
>
0继续
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个单元的数据加上偶校验。
MOVAX,8000H
MOVCX,100H
PAR0:
LODSB;
(MOVAL,[SI];
INCSI)
TESTAL,AL
JNPPAR1
LOOPPAR0
PAR1:
ORAL,80H;
MOV[SI-1],AL
DECCX
JNZPAR0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理