微机原理作业王建军副本.docx
- 文档编号:24150452
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:12
- 大小:239.80KB
微机原理作业王建军副本.docx
《微机原理作业王建军副本.docx》由会员分享,可在线阅读,更多相关《微机原理作业王建军副本.docx(12页珍藏版)》请在冰豆网上搜索。
微机原理作业王建军副本
《微型计算机原理及应用》作业
作业组别:
第28组
班级:
13级机制2班
姓名:
学号:
作业指导教师:
陈子明
作业完成时间:
2016.4.6
作业一
作业内容要求:
一、题目的分析描述及要求
题目:
内存source中存放着一个以0为结束标志的字符串,将该字符串中连续相同的字符仅用一个字符代替,处理结果存放到变量result处,假设字符串长度不超过20个字节。
算法构造:
从source中依次取出两个字节进行比较,如果相同就将取出的第一个存入result中,如果不同就将两个数都存入result中。
预期结果:
source=41H,41H,41H,42H,42H,42H,43H,43H,43H,44H,44H,44H,31H,31H,32H,32H,33H,34H,35H,00H
result=41H,42H,43H,44H,31H,32H,33H,34H,35H
二、寄存器及主存等的应用说明
调用al,ah寄存器用来存储从source中取出数据用于后续的比较,用bx存储器来进行source的循环取数,用si寄存器用来进行result的循环存储。
三、程序框图
四、详细程序(要求有注释)
.modelsmall
.stack
.data
sourcedb'AAABBBCCCDDD1122345',0
resultdb20dup(?
)
.code
.startup
chenxu:
movbx,0;给bx赋值从source中取出第bx个字节
movsi,0;给si赋值将数依次存入result中的第si位
again:
moval,byteptrsource[bx];从source中取出第bx个字节赋值给AL,在通过AL与AH的比较确定两个数是否相同
cmpal,0
jzdone;如果AL取到末尾字符0则直接结束程序
movah,byteptrsource[bx+1];从source中取出第bx+1个字节赋值给AH,在通过AL与AH的比较确定两个数是否相同
cmpal,ah;通过AL与AH的比较确定两个数是否相同
jnzabc;如果不相同就跳转到abc
movbyteptrresult[si],al;两个数相等只将第一个数赋值给result的第si位,这就完成了两个重复的数只取一个
incbx;bx加1,从source中取下一个字节
loopagain;程序回到again处
abc:
movbyteptrresult[si],al;当al与ah不同时,将al赋值给result的第si位
incsi;si增加1,将ah赋值给result的下一位
movbyteptrresult[si],ah
incbx
loopagain;bx加1,程序回到again处继续取数,完成循环
done:
.exit
endchenxu
五、包括程序调试的情况、程序运行的结果的分析
程序调试结果如上图,已达到想要的结果。
一开始调试时发现最后的结果与source中一样,通过单步运行,观察各个寄存器变化,最终发现循环出现错误,经过仔细修改,最终实现了要求的结果。
作业二
作业内容要求:
一、题目的分析描述及要求
题目:
内存source处存放着10个十进制数的ASCII码,请将它们转化成压缩BCD码,例如:
31H,32H转化为21H,存放到变量result处。
算法构造:
依次从source中取出两个数赋值给al和ch,将这两个数与30H做差,再通过或运算使ch的高四位与第四位一致,再通过与运算将ch的第四位置零,再将ch与al相加即得到所需结果,再将其依次存储到result中。
预期结果:
source=31H,32H,33H,34H,35H,36H,37H,38H,39H,30H
result=21H,43H,65H,87H,09H
二、寄存器及主存等的应用说明
用bx存储器来进行source的循环取数,al,ah用来存储从source中取出的数据用来进行下面的运算,因为调用loop循环指令,所以用cx来存储循环次数,调用dl,dh用来存储特定的数进行与或运算,调用si用来依次将计算的结果存放到result中。
三、程序框图
四、详细程序(要求有注释)
.modelsmall
.stack
.data
Sourcedb31H,32H,33H,34H,35H,36H,37H,38H,39H,30H
countequ$-source
resultdbcount/2dup(?
)
.code
.startup
chenxu:
movbx,0;给bx赋值,从source中依次取出第bx个数
movcx,5;设置循环次数位5次
movdl,20H;给dl赋值20h,将sourcede第bx+1位的数的低四位通过或运算转移到高四位
abc:
moval,byteptrsource[bx];将source中的第bx位取出赋值给al,用于后续运算
movah,byteptrsource[bx+1];将source中的第bx+1位取出赋值给ah,用于后续运算
subal,30H
subah,30H;将al,ah与30h作差保留低四位不变
cmpdl,0A0H
jzbcd;为避免计算39H与30H时出现A9H的结果,跳转到bcd为dl重新赋值
movdh,0F0H
orah,dl;通过或运算将让ah的高四位与第四位一致
andah,dh;通过与运算使ah高四位不变,第四位置0
addal,ah;将al,ah相加赋值给al,即得到最总结果
movbyteptrresult[si],al;将al赋值到result的第si个存储单元
addbx,2
incsi;bx,si增加为下次取数做准备
adddl,20H;dl增加20H使dl的高四位与下次取数的第二个数的低四位保持一致
loopabc;cx若不为零则继续跳转到abc,继续循环取数运算
jmpdone;为了防止顺序运行到下面的程序,而直接跳转到结尾
bcd:
movdl,00H
jmpabc;为避免计算39H与30H时出现A9H的结果,跳转到bcd为dl重新赋值00H,再跳转回abc进行循环
done:
.exit
endchenxu
五、包括程序调试的情况、程序运行的结果的分析
程序调试结果如下图,已得到想要的结果。
调试过程中出现了死循环现象,无法跳出程序,经单步运行后发现cx寄存器被赋给了其他值,通过更改下面的寄存器调用,cx寄存器可以实现想要的功能,后来又发现当程序要结束时又顺序运行到bcd程序而不是跳到结尾,于是在bcd前加了无条件跳转指令来解决问题。
作业三
作业内容要求:
一、题目的分析描述及要求
题目:
内存source处存放着一个以0为结尾标志的ASCII码字符串,请对其进行加密处理,加密方法:
将字母“A”变成字母“Z”,“B”变成“Y”,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,小写字母同样处理,而非字母字符不变,要求首先显示原来的字符串,然后再下一行显示加密后的字符串。
算法构造:
将source中的每个字节依次取出,通过比较确定其代表什么,然后进行相应的计算再依次将其输出。
预期结果:
China!
12345ABCXYZabcxyz
Xsrmz!
12345ZYXCBAzyxcba
二、寄存器及主存等的应用说明
调用bx用来进行source的循环取数,调用ah,dx用来调用系统指令进行输出字符串,调用al用来存储从source中取出的字符进行下面的比较运算,调用dl用来输出一个字符。
三、程序框图
四、详细程序(要求有注释)
.modelsmall
.stack
.data
sourcedb'China!
12345ABCXYZabcxyz',0
crlfdb0dh,0ah,'$'
.code
.startup
chenxu:
movbx,0;为bx赋初值从source依次取出第bx个字节
movah,09h
movdx,offsetsource;source的首地址赋值给dx
int21h;调用系统功能将source输出并回车换行
again:
moval,byteptrsource[bx];将source的第bx个字节赋值给al,用于比较并确定其所代表的字符再进行相应的运算
cmpal,0
jzdone;将al与末尾的字符0比较,如果相等就结束程序
cmpal,30h
jbabc;若al小于30H,则进入abc运行相应的运算法则
cmpal,39h;通过比较确定al是否代表0~9之间的数
jabcd;al大于39H时,进入bcd再次比较确认其范围,再进行相应的运算
movdl,al
movah,02h
int21h;将al赋值给dl,调用系统功能输出一个字符
incbx;增加bx进行循环取数
jmpagain;重新回到again处取出下一个字节进行运算
abc:
movdl,al
movah,02h
int21h;当该字节代表的不是大写字母,小写字母时,直接调用系统指令输出
incbx;
jmpagain;增加bx,进入下次循环取出下个字节
bcd:
cmpal,41h;将al与41H比较,判断其是否代表大写字母
jbabc;小于41H则跳转到abc输出
cmpal,5ah;将al与5aH比较确定其是否在大写字母范围内
jadef;若al超过大写字母范围,跳转到def继续确定其范围
subal,40h;al与40H做差,确定它是第几个大写字母
movah,27
subah,al;进行密码转换,将第i个转化为第(26-i+1)个字母
addah,40h;将第ah个大写字母转化成它的ASCII码
movdl,ah
movah,02h
int21h;调用系统指令将转化后的字母输出
incbx
jmpagain;增加bx进入下次循环取出下个字节
def:
cmpal,61h;将al与61H比较确定其是否在小写字母范围内
jbabc;不在小写字母范围内跳转到abc直接输出
cmpal,7ah;将al与7aH比较确定其是否在小写字母范围内
jaabc;不在小写字母范围内跳转到abc直接输出
subal,60h;al与60H做差,确定它是第几个大写字母
movah,27
subah,al;进行密码转换,将第i个转化为第(26-i+1)个字母
addah,60h;将第ah个小写字母转化成它的ASCII码
movdl,ah
movah,02h
int21h;调用系统指令将转化后的字母输出
incbx
jmpagain;增加bx进入下次循环取下个字节
done:
;结束程序
.exit
endchenxu
五、包括程序调试的情况、程序运行的结果的分析
程序调试结果如下图,完成预期要求。
程序调试过程中出现死循环和算法错误,通过单步运行观察寄存器变化,看哪步错误进行修改,通过多次调试,最终的得到想要的密码转换。
体会和建议
通过微机原理的学习,让我明白了计算机的发展和工作基础。
通过微机原理上机作业让我们把书本知识更好的熟悉运用,让我们对课本的知识有了更深的了解,对平时比较模糊的知识点有了更清晰的理解。
而且在上机过程中遇到困难时我们相互帮助,一起解决困难,更是提高了我们的团队协作能力。
上机让我们体会到了编程的魅力,一台没有生命的机器通过编程就让它可以按照我们的想法去运行,实现我们的要求。
建议:
希望学校可以给学生提供一些可以在自己电脑上可以模拟汇编的软件,让学生可以有更多的时间进行汇编语言的学习。
增加实验上机的课时,可以更好的学习课本上的其他内容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 作业 建军 副本
![提示](https://static.bdocx.com/images/bang_tan.gif)