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

上传人:b****6 文档编号:7342614 上传时间:2023-01-23 格式:DOCX 页数:12 大小:198.28KB
下载 相关 举报
燕山大学微机原理作业.docx_第1页
第1页 / 共12页
燕山大学微机原理作业.docx_第2页
第2页 / 共12页
燕山大学微机原理作业.docx_第3页
第3页 / 共12页
燕山大学微机原理作业.docx_第4页
第4页 / 共12页
燕山大学微机原理作业.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《燕山大学微机原理作业.docx》由会员分享,可在线阅读,更多相关《燕山大学微机原理作业.docx(12页珍藏版)》请在冰豆网上搜索。

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

燕山大学微机原理作业

《微型计算机原理及应用》作业

 

作业组别:

24

 

班级:

12级机设1班

姓名:

杨亚成

学号:

120104050011

作业指导教师:

(任课教师、实验室教师)

陈子明王鑫朱学军张庆玲赵玉勤王志松唐艳华

作业完成时间:

2015/4/12

一.题24.1问题描述

内存source处存放着20个ASCII码字符,从键盘输入一个字符,若输入的是为‘a’-‘z’之间的字符(例如g),则将source处的20个ASCII码字符传送至result处,传送时要求将‘a’-‘z’之间的字符转换成大写字符,而其他字符不变,并统计与输入字符(‘g’)相同的字符的个数,存入变量num中,程序结束;若输入的是其他字符,则在下一行显示‘ERROR!

’,程序结束。

1.1寄存器及主存的应用说明

内存:

source处存放待检测的字符

count处存放字符数量

result处存放修改过的新的字符

num处存放与输入字符相同的字符的个数

error处存放回车换行及字符串ERROR!

寄存器:

bx用于使result指向的地址每次加1以存放下一个字符

al用于存放输入的字符

si用于存放地址

dl用于存放si指向的字符

cx用于计数

1.2程序框图(见第四页)

1.3详细程序

.modelsmall

.stack

.data

sourcedb'abcdgggg456789AB+-*/'

countequ$-source

resultdbcountdup(?

numdb0

errordb0dh,0ah,'ERROR!

$'

.code

.startup

xorbx,bx;bx清零

movah,1;输入一个字符

int21h

cmpal,'a';输入的字符与a比较,如果比a

jbdone;小或比z大则跳转至done

cmpal,'z'

jadone

leasi,source;把首地址赋值给si

movcx,count;cx赋值循环次数

again:

movdl,[si];si指向的字符赋值给dl

cmpdl,'a';若此字符比a小或比z大,则跳

jbone;转至one

cmpdl,'z'

jaone

cmpdl,al;若此字符在a-z之间,则与输入

jnztwo;的字符比较,不相等则跳至two

addnum,1;若相等则num加1

two:

subdl,20h;将小写字符转换成大写字符

one:

movresult[bx],dl;将此字符存入result处

incbx;地址加1以存放下一个字符

incsi;指向下一个待检测字符

loopagain;循环

jmpthree;跳转至three

done:

movdl,0dh;回车,换行,显示ERROR!

movah,2

int21h

movdl,0ah

movah,2

int21h

movdx,offseterror

movah,9

int21h

three:

;结束

.exit

end

1.4程序调试情况

第一次错误:

语句one编写如下,

movresult,dl

incresult

incsi

loopagain

原以为incresult会使地址加1,结果是result存储的值加1,导致第一个数加了20而其他数值没变,运行结果如图:

其中source和result有20个字符,由于图片清晰度问题,所以没有全部截图出来

第二次错误:

刚开始给cx赋值为20,而实际应该赋值count,如果source存入21个字符,运行结果将只有20个字符。

正确的运行结果如下图:

二.题24.2问题描述

内存中source处存放着一个以0为结束标志的ASCII码字符串,该字符串表示的是一个字型有符号整数。

请将其转换为对应的有符号整数,存放到自变量result处。

转换过程中,若遇到‘0’-‘9’及‘+’,‘-’以为的字符,或者转换结果超过了字型有符号数的范围(-32768-+32767),则显示‘ERROR!

’,程序结束。

2.1寄存器及主存的应用说明

内存

source处存放待检测字符

result处存放转换后的字型

error处存放字符串

寄存器:

bx存放取出的数值

cx存放标志数值

si存放地址

2.2程序框图(见第八页)

2.3详细程序

.modelsmall

.stack

.data

sourcedb'-12345',0

resultdw?

errordb'ERROR!

$'

.code

.startup

leasi,source;首地址赋值给si

xorbx,bx;bx,dx分别清零

xordx,dx

cmpbyteptr[si],0;第一个字符是0,则跳转至done

jzdone

cmpbyteptr[si],'-';若不是0则与‘-’比较

movcx,-1;cx赋值-1作为标志

jzone;跳转至one

cmpbyteptr[si],'+';与‘+’比较

movcx,0;cx赋值0作为标志

jzone;跳转至one

cmpbyteptr[si],31h;若既不是‘-’也不是‘+’则

jbfour;与1比较,比1小,跳至four

cmpbyteptr[si],39h;若比1大,则与9比较,比9

jafour;大,则跳转至four

decsi;第一个字符为数字,则si减1

one:

incsi;si加1指向下一个字符

cmpbyteptr[si],0;与0比较,相等则结束

jztwo

shlbx,1;以下5句将bx通过移位乘10

movdx,bx;但第一次bx为0

shlbx,1

shlbx,1

addbx,dx

movax,[si];si指向的数赋值给ax

xorah,ah;只保留低位

subax,30h;ASCII码减30取出第一个数

addbx,ax;赋值给bx

jmpone

two:

cmpcx,-1;cx与-1比较

jnzfive;不相等跳转至five

cmpbx,32768;cx=-1,则bx与32768比较

jafour;比32768大则跳转至four

jmpnega;否则跳转至nega

five:

cmpbx,32767;cx=0,则bx与32767比较

jafour;大于32767则跳转至four

jmpthree;否则跳转至three

nega:

notbx;bx取反

addbx,1;b加1

three:

movresult,bx;bx赋值给result

jmpdone;跳转至done

four:

movdx,offseterror;显示错误

movah,9

int21h

done:

;结束

.exit

End

2.4程序调试状况

第一次错误:

寄存器ax的高8位没有清零,使ax存储的数据不正确,结果出现错误。

第二次错误:

与1和9比较大小时应用它们的ASCII码31h和39h,而不是直

接用1和9。

 

正确运行结果截图:

三.题24.3问题描述

内存中source处存放着一个以0为结束标志的ASCII码字符串。

请统计该字符串中字母,数字,空格和其他字符的个数,统计结果分别存放到字节型变量result处。

3.1寄存器及主存的应用说明

内存:

source处存放待检测字符串

Result处存放各种字符数量

寄存器:

si存储地址

cl存放si指向的字符

3.2程序框图(见第十一页)

3.3详细程序

.modelsmall

.stack

.data

sourcedb'ABCabc123+-*/',0

resultdb4dup(0)

.code

.startup

leasi,source-1;si赋值source的首地址减1

again:

incsi;地址加1指向下一个字符

movcl,[si];将指向的字符赋值给cl

cmpcl,0;与0比较,如果是0,结束

jzdone

cmpcl,2BH;分别于加减乘除比较,如果是其中的

jzothers;一个字符,跳转到others

cmpcl,2DH

jzothers

cmpcl,2AH

jzothers

cmpcl,2FH

jzothers

cmpcl,20h;与空格比较,相等则跳转到space

jzspace

cmpcl,39h;以上字符都不是则与9比较,

jbenum;小于等于9则跳转到num

jmpwords;如果以上都不是则为字母,跳转到words

others:

add[result+3],1;其他字符数量加1并存到result第四个字节处

jmpagain;继续执行搜索下一个字符

space:

add[result+2],1;空格数量加1并存到result第三个字节处

jmpagain;继续执行搜索下一个字符

num:

add[result+1],1;数字数量加1并存到result第二个字节处

jmpagain;继续执行并搜索下一个字符

words:

add[result],1;字母数量加1并存到result第一个字节处

jmpagain;继续执行并搜索下一个字符

done:

;结束

.exit

end

 

 

3.4程序调试情况

错误:

最后的一段程序没有写jmpagain,导致无法循环,运行结果只有记录字母的数值是1,其他都为0,如下图:

由于图片清晰度原因,source字符数量没有全部截图

正确结果截图:

四.体会和建议

体会:

通过这次实际编程,我更加深刻的理解了课本及老师所讲的知识,更熟练的使用各种语句及命令,同时也体会到了编程时一些小技巧的重要性,有时,很简单的一段语句可以解决一个很麻烦的问题,实践真的很重要,感谢老师给的实践机会

建议:

尽量避免程序化的东西,多让同学们实践,这样才能将所学知识理解的更加透彻,能力才能得到提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

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

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