微原实验报告二Word格式文档下载.docx
《微原实验报告二Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微原实验报告二Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
LOP:
TESTDH,00001111B;
判断是否显示16个字符换行
JNZNEXT
MOVDL,13;
换行
CALLDISP
MOVDL,10
CALLDISP
NEXT:
MOVDL,DH;
显示字符
MOVDL,'
'
;
两字符间加空格
INCDH;
使用DH计数
LOOPLOP
DONE:
;
退出程序
MOVAH,4CH
INT21H
DISPPROCNEAR;
在屏幕上显示字符
PUSHAX
MOVAH,2
INT21H;
DOS功能调用
POPAX
RET
DISPENDP
CODEENDS
ENDSTART
2.datasegment
inputdatasegmentcodehere
org100h
bufdb259dup(?
countequ$-buf
dataends
stacksegment
inputstacksegmentcodehere
sdb256dup(?
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movax,stack
movss,ax
movsp,offsets
movsi,offsetbuf
movcx,256
xorax,ax
xorbx,bx
xordh,dh
next:
mov[si],al
cmpal,0h
jzzero;
如果这个数为0,则0的个数加一
cmpal,80H
janega;
同理负数个数加一
jmppos
zero:
incdh
deccx
incal
jmpnext2
nega:
incbl
incsi
pos:
incbh
jmpnext2
next2:
loopnext
mov[si],dh;
将等于0的数的多少装入dh,再放在数据块之后
mov[si],bx
movcx,count
zrbh:
movbh,16;
每行显示16个,便于观看
next3:
moval,[si]
movbl,al
shral,1;
右移4位,比较高四位
shral,1
cmpal,0ah;
判断高四位是字母还是数字
jcjia30;
如果是数字,加30h变成对应的ASCII码
addal,07h;
如果是字母,则要加37
jia30:
addal,30h
callDIS;
显示高四位
INT21H
moval,bl;
恢复原来的数
andal,0fh;
屏蔽高四位
cmpal,0ah
jcjia30a
addal,7h
jia30a:
callDIS
moval,20h;
在两个数之间加一个空格,便于显示
loopnext4;
循环完毕,当不再loop时,跳转至程序结束的地方
jmpstop
next4:
decbh
jnznext3
moval,0ah;
若有16个数,则送回车,换行0ah,0dh
MOVAH,0BH
moval,0dh
jmpzrbh;
继续处理下一行
inputcodesegmentcodehere
stop:
movah,4ch
int21h
DISprocnear
movdl,al
movah,2
int21h
movdl,al
DISendp
codeends
endstart
3.datasegment
overdb'
errorcharacter!
$'
sdb512dup(?
)
crlfmacro;
定义宏,送回车换行符
movdl,0dh
movdl,0ah
int21H
endm
main:
callhexbin
crlf
callbindec
jmpmain
;
接受的十六进制数转化为二进制数
hexbinprocnear
newchar:
movah,01h
cmpal,0dh
jzretu;
键入回车,结束本组输入
cmpal,30h
jlexit;
若输入小于30h,不是十六进制的字符
cmpal,10;
与9比较
jbaddto;
此时字符为0~9之间,直接转化为ASCII码来显示即可
SUBAL,30H
JLEXIT
CMPAL,09
JLEADDTO
subal,07;
若键入的字符不是0~9,则在判断是否属于大小写a~f
JLexit
cmpal,0fh
JGNEXT
若输入无误,将输入的数向bx里面存
addto:
movcl,4
shlbx,cl;
键入的字符左移四位,移入高位
movah,0
addbx,ax
jmpnewchar
movah,4ch
subal,20h
jLexit
jGexit
jmpretu;
retu是什么?
输入有误时,提示输入错
exit:
movdx,offsetover
movah,09h
CRLF
retu:
ret;
子程序结束
hexbinendp
将二进制转化为十进制的子程序,通过除十取余来实现
bindecprocnear
movcx,10000
calldiv_d
movcx,1000
movcx,100
movcx,10
movcx,1
ret
bindecendp
将数字显示出来
div_dprocnear
CRLF
movax,bx;
被除数的低十六位
movdx,0;
被除数的高十六位
divcx
movbx,dx;
余数在dx中,然后将其转入bx
addal,30h;
商在ax中
movdl,al;
把商显示出来
ret
div_dendp
3.程序流程图
①、
.
②、
③、
三、实验结果
1.
2.
3.
四、实验总结
本次实验让我对汇编语言有了新的认识,用一种新的眼光去认识汇编语言,也加强了自己对汇编语言的使用能力。
本次实验也遇到了很多困难,通过查资料,相互讨论找到了问题的解答方法。
有很多错误都是细节导致了,这说明我需要让自己更加的细心,认真。
还有些问题是基础知识掌握不牢固,我需要重新多翻看课本。
本学期的实验课程适中,我们实验课程不少但也不太多。
建议课程上老师多演示一些实验例子,谢谢。