微机原理实验1文档格式.docx
- 文档编号:15324106
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:17
- 大小:494.29KB
微机原理实验1文档格式.docx
《微机原理实验1文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验1文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
定义数据段
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
输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)