微机原理实验1文档格式.docx

上传人:b****1 文档编号:15324106 上传时间:2022-10-29 格式:DOCX 页数:17 大小:494.29KB
下载 相关 举报
微机原理实验1文档格式.docx_第1页
第1页 / 共17页
微机原理实验1文档格式.docx_第2页
第2页 / 共17页
微机原理实验1文档格式.docx_第3页
第3页 / 共17页
微机原理实验1文档格式.docx_第4页
第4页 / 共17页
微机原理实验1文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理实验1文档格式.docx

《微机原理实验1文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验1文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

微机原理实验1文档格式.docx

定义数据段

bufdb256dup(?

countequ$-buf;

将buf定义的字节长度赋值给count

dataends

codesegment;

定义代码段

assumeds:

data,cs:

code

start:

movax,data

movds,ax

movsi,offsetbuf;

设置数据块首地址

movcx,count;

设定循环次数

cld;

地址修改为增量

xorax,ax

xordx,dx

xorbx,bx

hyone:

mov[si],al;

将数据存入数据段

incsi

incal

loophyone

指向数据块首地址

movcx,count-1

hytwo:

movdl,[si];

显示数据段的内容

movah,2

int21h

movdl,20h;

插入空格

movah,2

int21h

incsi

incbl;

设定为换行指示标志

cmpbl,10h;

当显示了16个字符之后就换行

jzhythree

loophytwo

回车换行

hythree:

movdl,0dh

movah,02h

int21h

movdl,0ah

int21h

xorbl,bl;

将换行指示标志重新置为0

cmpcx,0;

判断是否显示完

jnzhytwo;

没有显示完的话继续显示

jzhyfour;

显示完结束程序

hyfour:

movah,4ch;

终止程序

int21h

codeends

endstart

(2)程序流程图:

图1

2.写入数据,统计各类元素个数

datasegment;

org100h;

设定初始偏移量为100h

bufdb259dup(?

);

定义259个数据存放地址

countequ$-buf;

hydb0;

定义变量hy作为空格显示控制标志

dataends

assumecs:

code,ds:

data

movax,data

movds,ax

movsi,offsetbuf;

movcx,count-3;

将循环次数存入cx中

cld;

xorbx,bx

xorax,ax

xordx,dx

mov[si],al;

incsi

incal

loophyone

movsi,offsetbuf;

movcx,count-3;

lodsb;

把si指向的存储单元读入累加器

moval,[si]

andal,al

jzzero;

如果为0的话则跳转到zero

jnspositive;

如果大于0的话则跳转到positive

jsnegtive;

如果小于0的话则跳转到negtive

zero:

incbl;

统计为0的个数,用bl计数

jmphythree

positive:

incbh;

统计大于0的个数,用bh计数

jmphythree

negtive:

incdl;

统计小于0的个数,用dl计数

incsi;

si加一

loophytwo;

继续判断下一个数

decsi;

先执行后判断所以si要减1

将0的个数存入数据块之后的第一个单元

mov[si],bl

incsi

将大于0的个数存入数据块之后的第二个单元

mov[si],bh

将小于0的个数存入数据块之后的第三个单元

mov[si],dl

movcx,count;

设置循环次数

done:

moval,[si];

将数据段的内容赋值给al

movbh,al;

暂存数据

右移4位

shral,1

calldisp

moval,bh;

将暂存的数据送回al

andal,0fh;

屏蔽掉高四位

calldisp

incsi

loopdone

movah,4ch;

int21h

dispproc

cmpal,0ah;

与0ah比较,小于0ah,加30h

jshyfive;

大于0ah,为十六进制数A~F,加37h

addal,7

hyfive:

addal,30h

movdl,al;

dos功能调用显示字符

movah,02

inchy

cmphy,02

jzhyseven

ret

根据空格显示标志符hy的大小判断是否插入空格

hyseven:

movdl,20h;

movah,2

incdh

movhy,0

cmpdh,10h

jzhysix

ret

hysix:

movdl,0dh;

xordh,dh

ret

dispendp

codeends

endstart

(2)程序流程图

图2

3.十六进制数转换成十进制数

(1)源程序(附注释):

namehexdec

codesegment

assumecs:

提示信息

msg1db'

erronumber'

'

$'

msg2db'

Hello!

Pleaseinputthehexadecimalnumber:

'

msg3db'

Toexitthisprogram,youonlyhavesixchances'

msg4db'

numberoverflow'

hydb0

countdb0

crlfmacro;

定义宏指令,回车换行

movdl,0dh

movah,02h

movdl,0ah

endm

movax,segcode

movds,ax;

给数据段赋值,与代码段在同一个段

提示正确调试的机会只有6次

begin:

crlf

movdx,offsetmsg3

movah,09

crlf

main:

movdx,offsetmsg2;

提示输入一个十六进制的数

movah,09

callhexbin;

从键盘接收进制的数并转化为二进制

callbindec;

把二进制转化为十进制数

movhy,0;

重置输入次数标志

inccount;

正确调试次数加1

cmpcount,6;

如果已经正确调试六次则退出程序

jzdone

jmpmain

movah,4ch;

退出程序

接收键盘输入的十六进制数据,并转化为二进制子程序

hexbinprocnear

xorbx,bx

newchar:

movah,01

cmpal,0dh;

若输入回车则结束本程序

jzretu

统计输入的十六进制数长度,如果大于ffffh则溢出报错

inchy

cmphy,5

jzbck;

溢出报错

subal,30h

jlexit;

键入的字符小于0,为非法字符

cmpal,9

jleaddto;

键入的字符大于0,小于9,移位处理

subal,07;

判断是否为字母A~F

cmpal,0ah;

不是大于A的字母为非法字母

jlexit

cmpal,0fh;

判断是否为a~f

jgnext

addto:

movcl,4

shlbx,cl;

键入的字符左移四位,先键入的字符移向高位

movah,0

addbx,ax;

把刚键入的字符与前面的字符和在一起

jmpnewchar

bck:

movhy,0

crlf

movdx,offsetmsg4

crlf

jmpmain

next:

subal,20h;

判断是否为小写a~f

cmpal,0ah

小于a为非法字符

大于f为非法字符

jleaddto

jgexit

jmpretu

retu:

ret

输入

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

当前位置:首页 > 求职职场 > 面试

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

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