微机原理作业.docx
- 文档编号:28018284
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:11
- 大小:216.09KB
微机原理作业.docx
《微机原理作业.docx》由会员分享,可在线阅读,更多相关《微机原理作业.docx(11页珍藏版)》请在冰豆网上搜索。
微机原理作业
《微型计算机原理及应用》作业
作业组别:
第30组
班级:
12级轧钢二班
姓名:
贾闯
学号:
120101020023
指导教师:
李艳文
完成时间:
2015年05月
30.1
一、题目及题目分析描述及要求
题目:
内存中SOURCE处存放着10个字节型数据,请记录每个字节数据中二进制位1的个数,并按照数据字节在前,1的个数在后的顺序将处理结果存放到RESULT处。
分析:
逐一取出内存中的10个数据,对每个字节型数据进行左移或右移八次,由带进位加法指令adc对一的个数进行求和,最后把所求和放入变量RESULT中。
预期结果:
SOURCE=FEH,90H,FFH,DDH,42H,30H,81H,F3H,18H,25H
RESULT=FEH,07H,90H,02H,FFH,08H,DDH,06H,42H,02H,30H,02H,81H,02H,F3H,
06H,18H,02H,25H,03H
二、寄存器及主存等的应用说明
本题原始数据存放在内存SOURCE中,执行结果存放在内存RESULT中。
由si和di分别取得它们的偏移地址,dl存放由SOURCE所取的字节型数据,al用来存放每个字节型数据中二进制位1的个数。
三、程序框图
四、详细程序
.MODELSMALL
.STACK
.DATA
SOURCEDB0FEH,90H,0FFH,0DDH,42H,30H,81H,0F3H,18H,25H
COUNTEQU$-SOURCE;取得source中字节个数
RESULTDB2*COUNTDUP(?
)
.CODE
.STARTUP
movdi,offsetsource;取得source处的偏移地址
movsi,offsetresult;取得result处的偏移地址
movch,0
movcl,count;循环次数
again:
movdl,[di];逐一取出source中的数据
callhtoasc;调用子程序
incdi;地址加1
loopagain
.exit
htoascproc;子程序
moval,0
mov[si],dl;存放dl到result
next:
shrdl,1;右移
adcal,0;带进位加法,确定1的个数
cmpdl,0;dl为零停止循环
jnznext
mov[si+1],al;存放1的个数到result
incsi;地址加2
incsi
ret;返回主程序
htoascendp
end
五、程序调试的情况、程序运行的结果的分析
刚开始调试时,总感觉寄存器不够用,经过翻阅课本,发现si,di也可以用来取偏移地址。
程序执行结果如下:
另外后来又学习到通过堆栈保护寄存器可以避免寄存器不够用的尴尬,以后可以用堆栈对其加以保护。
30.2
一、题目及题目分析描述及要求
题目:
内存SOURCE中存放着10个0至9之间的数字的ascii码或者空白符的ascii码,要求将0至9之间的数字的ascii码转换为相应的八位二进制数,并将空白字符的ascii码转换为“$”字符的ascii码。
处理结果存放到result处。
分析:
分别取出source中的数据或空白字符,与空白字符的ascii码进行比较,若相等则转换为“$”字符的ascii码,若不等则将其减去30h转换为相应的二进制数。
预期结果:
SOURCE=20H,30H,31H,33H,35H,20H,39H,38H,37H,34H
RESULT=24H,00H,01H,03H,05H,24H,09H,08H,07H,04H
二、寄存器及主存等的应用说明
本题原始数据存放在内存SOURCE中,执行结果存放在内存RESULT中。
由si和di分别取得它们的偏移地址,dl存放由SOURCE所取的字节型数据,al用来作为中间过渡量。
三、程序框图
四、详细程序
.MODELSMALL
.STACK
.DATA
SOURCEDB20H,30H,31H,33H,35H,20H,39H,38H,37H,34H
COUNTEQU$-SOURCE;取得source中字节数
RESULTDBCOUNTDUP(?
)
.CODE
.STARTUP
movch,0
movcl,count;设定循环次数
movsi,offsetsource;取得source的偏移地址
movdi,offsetresult;取得result的偏移地址
again:
movdl,[si];逐一取出source中的数据
cmpdl,20h;如果取出的数据为20h则跳转到next1
jznext1否则减去30h
subdl,30h
moval,dl
jmpnext2
next1:
moval,24h
next2:
mov[di],al;存放al数值到result处
incsi;si地址加1
incdi;di地址加1
loopagain
.EXIT
END
五、程序调试的情况、程序运行的结果的分析:
程序调试情况如下:
达到了预期的结果:
本题与第一题有相似之处,故完成起来比较简单。
本题仍可加以改进,对其进行堆栈保护,这样可以避免寄存器不够用甚至寄存器串用的问题。
30.3
一、题目及题目分析描述及要求
题目:
内存中numa与numb处各存放着10个字节型无符号整数,请将它们按元素对应的逐个进行比较。
如果numa中的元素大于numb中的相应的元素的数目多于numb中的元素大于numa中的相应的元素的数目,则显示numa>numb,否则请显示numa 分析: 逐一比较numa与numb中相应的的数据,最后统计numa>numb或numa 预期结果: 信息框输出执行结果 二、寄存器及主存等的应用说明 本题原始数据存放在内存numa、numb中。 由si和di分别取得它们的偏移地址,然后逐一比较numa与numb中的相应数据的大小,最后执行09号功能进行输出。 三、程序框图 四、详细程序 .MODELSMALL .STACK .DATA NUMADB10H,11H,12H,13H,00H,95H,86H,97H,08H,89H COUNTEQU$-NUMA;取得numa中字节数 NUMBDB90H,81H,66H,3AH,4CH,37H,64H,1EH,27H,59H STR1DB'NUMA>NUMB$' STR2DB'NUMA STR3DB'NUMA=NUMB$' .CODE .STARTUP movsi,offsetnuma;取得numa偏移地址 movdi,offsetnumb;取得numb偏移地址 movch,0 movcl,count;确定循环次数 movbl,0;al,bl赋初值为0 moval,0 again: movdl,[di];dl作为中间寄存器以进行比较 cmp[si],dl;比较numa与numb中相应数值大小 incsi;si地址加1 incdi;di地址加1 janext1;numa>numb跳到next1进行累加 jbnext2;numa jmpnext3 next1: addbl,1 jmpnext3 next2: addal,1 next3: loopagain cmpbl,al;比较bl与al jalabel1 jblabel2 movdx,offsetstr3 jmplabel3 label1: movdx,offsetstr1 jmplabel3 label2: movdx,offsetstr2 jmplabel3 label3: movah,09h;执行09号功能显示执行结果 int21h .EXIT END 五、程序调试的情况、程序运行的结果的分析: 程序运行情况如下: 执行结果如下: 该题主要是对numa与numb中的数据进行比较,最后执行09号功能进行显示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 作业