ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:198.28KB ,
资源ID:7342613      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7342613.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(燕山大学微机原理作业.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

燕山大学微机原理作业.docx

1、燕山大学微机原理作业微型计算机原理及应用作业作业组别:24班级:12级机设1班姓名:杨亚成学号:120104050011作业指导教师:(任课教师、实验室教师)陈子明 王鑫 朱学军 张庆玲 赵玉勤 王志松 唐艳华作业完成时间:2015/4/12一 题24.1问题描述内存source处存放着20个ASCII码字符,从键盘输入一个字符,若输入的是为a-z之间的字符(例如g),则将source处的20个ASCII码字符传送至result处,传送时要求将a-z之间的字符转换成大写字符,而其他字符不变,并统计与输入字符(g)相同的字符的个数,存入变量num中,程序结束;若输入的是其他字符,则在下一行显示E

2、RROR!,程序结束。1.1寄存器及主存的应用说明内存:source处存放待检测的字符 count处存放字符数量 result处存放修改过的新的字符 num处存放与输入字符相同的字符的个数 error处存放回车换行及字符串ERROR! 寄存器:bx用于使result指向的地址每次加1以存放下一个字符 al用于存放输入的字符 si用于存放地址 dl用于存放si指向的字符 cx用于计数1.2程序框图(见第四页)1.3详细程序.model small.stack.data source db abcdgggg456789AB+-*/ count equ $-source result db coun

3、t dup(?) num db 0 error db 0dh,0ah,ERROR!$.code.startup xor bx,bx ;bx清零 mov ah,1 ;输入一个字符 int 21h cmp al,a ;输入的字符与a比较,如果比a jb done ;小或比z大则跳转至done cmp al,z ja done lea si,source ;把首地址赋值给si mov cx,count ;cx赋值循环次数again: mov dl,si ;si指向的字符赋值给dl cmp dl,a ;若此字符比a小或比z大,则跳 jb one ;转至one cmp dl,z ja one cmp d

4、l,al ;若此字符在a-z之间,则与输入 jnz two ;的字符比较,不相等则跳至two add num,1 ;若相等则num加1two:sub dl,20h ;将小写字符转换成大写字符one:mov resultbx,dl ;将此字符存入result处 inc bx ;地址加1以存放下一个字符 inc si ;指向下一个待检测字符 loop again ;循环 jmp three ;跳转至threedone: mov dl,0dh ;回车,换行,显示ERROR! mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h mov dx,offset erro

5、r mov ah,9 int 21hthree: ;结束.exitend1.4程序调试情况第一次错误:语句one编写如下,mov result,dlinc resultinc siloop again原以为inc result会使地址加1,结果是result存储的值加1,导致第一个数加了20而其他数值没变,运行结果如图:其中source和result有20个字符,由于图片清晰度问题,所以没有全部截图出来第二次错误:刚开始给cx赋值为20,而实际应该赋值count,如果source存入21个字符,运行结果将只有20个字符。正确的运行结果如下图:二 题24.2问题描述内存中source处存放着一个

6、以0为结束标志的ASCII码字符串,该字符串表示的是一个字型有符号整数。请将其转换为对应的有符号整数,存放到自变量result处。转换过程中,若遇到0-9及+,-以为的字符,或者转换结果超过了字型有符号数的范围(-32768-+32767),则显示ERROR!,程序结束。2.1寄存器及主存的应用说明内存source 处存放待检测字符result处存放转换后的字型error处存放字符串寄存器:bx存放取出的数值cx存放标志数值si存放地址2.2程序框图(见第八页)2.3详细程序.model small.stack.data source db -12345,0 result dw ? error

7、 db ERROR!$.code.startup lea si,source ;首地址赋值给si xor bx,bx ;bx,dx分别清零 xor dx,dx cmp byte ptrsi,0 ;第一个字符是0,则跳转至done jz done cmp byte ptrsi,- ;若不是0则与-比较 mov cx,-1 ;cx赋值-1作为标志 jz one ;跳转至one cmp byte ptrsi,+ ;与+比较 mov cx,0 ;cx赋值0作为标志 jz one ;跳转至one cmp byte ptrsi,31h ;若既不是-也不是+则 jb four ;与1比较,比1小,跳至fou

8、r cmp byte ptrsi,39h ;若比1大,则与9比较,比9 ja four ;大,则跳转至four dec si ;第一个字符为数字,则si减1one:inc si ;si加1指向下一个字符 cmp byte ptrsi,0 ;与0比较,相等则结束 jz two shl bx,1 ;以下5句将bx通过移位乘10 mov dx,bx ;但第一次bx为0 shl bx,1 shl bx,1 add bx,dx mov ax,si ;si指向的数赋值给ax xor ah,ah ;只保留低位 sub ax,30h ;ASCII码减30取出第一个数 add bx,ax ;赋值给bx jmp

9、one two:cmp cx,-1 ;cx与-1比较 jnz five ;不相等跳转至five cmp bx,32768 ;cx=-1,则bx与32768比较 ja four ;比32768大则跳转至four jmp nega ;否则跳转至negafive:cmp bx,32767 ;cx=0,则bx与32767比较 ja four ;大于32767则跳转至four jmp three ;否则跳转至threenega:not bx ;bx取反 add bx,1 ;b加1three: mov result,bx ;bx赋值给result jmp done ;跳转至donefour: mov dx

10、,offset error ;显示错误 mov ah,9 int 21hdone: ;结束.exitEnd2.4程序调试状况第一次错误:寄存器ax的高8位没有清零,使ax存储的数据不正确,结果出现错误。第二次错误:与1和9比较大小时应用它们的ASCII码31h和39h,而不是直接用1和9。正确运行结果截图:三 题24.3问题描述内存中source处存放着一个以0为结束标志的ASCII码字符串。请统计该字符串中字母,数字,空格和其他字符的个数,统计结果分别存放到字节型变量result处。3.1寄存器及主存的应用说明内存:source处存放待检测字符串 Result处存放各种字符数量寄存器:si存

11、储地址 cl存放si指向的字符3.2程序框图(见第十一页)3.3详细程序.model small.stack.data source db ABC abc 123 +-*/,0 result db 4 dup(0).code.startup lea si,source-1 ;si赋值source的首地址减1again: inc si ;地址加1指向下一个字符 mov cl,si ;将指向的字符赋值给cl cmp cl,0 ;与0比较,如果是0,结束 jz done cmp cl,2BH ;分别于加减乘除比较,如果是其中的 jz others ;一个字符,跳转到others cmp cl,2DH

12、 jz others cmp cl,2AH jz others cmp cl,2FH jz others cmp cl,20h ;与空格比较,相等则跳转到space jz space cmp cl,39h ;以上字符都不是则与9比较, jbe num ;小于等于9则跳转到num jmp words ;如果以上都不是则为字母,跳转到wordsothers: add result+3,1 ;其他字符数量加1并存到result第四个字节处 jmp again ;继续执行搜索下一个字符space: add result+2,1 ;空格数量加1并存到result第三个字节处 jmp again ;继续执

13、行搜索下一个字符num: add result+1,1 ;数字数量加1并存到result第二个字节处 jmp again ;继续执行并搜索下一个字符words: add result,1 ;字母数量加1并存到result第一个字节处 jmp again ;继续执行并搜索下一个字符done: ;结束.exitend3.4程序调试情况错误:最后的一段程序没有写jmp again,导致无法循环,运行结果只有记录字母的数值是1,其他都为0,如下图:由于图片清晰度原因,source字符数量没有全部截图正确结果截图:四 体会和建议 体会:通过这次实际编程,我更加深刻的理解了课本及老师所讲的知识,更熟练的使用各种语句及命令,同时也体会到了编程时一些小技巧的重要性,有时,很简单的一段语句可以解决一个很麻烦的问题,实践真的很重要,感谢老师给的实践机会 建议:尽量避免程序化的东西,多让同学们实践,这样才能将所学知识理解的更加透彻,能力才能得到提高。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1