一、实验目的
1.熟练掌握8086/8088常用汇编指令的使用方法
2.熟练掌握循环结构程序编程技巧
3.熟练掌握汇编语言程序运行调试方法
二、实验要求
认真分析实验题目,设计程序流程图,独立完成代码编写及运行调试。
三、实验题目
给出不大于255的十个正整数,分别计算出其中偶数和奇数的平均值,并以十进制的方式输出,保留到小数点后两位。
四、程序流程图
略。
五、程序代码
sseg segment stack
stp db 100 dup(0)
sseg ends
dseg segment
dta db 12,14,12,14,12,16,57,21,25,11
dtb db 0;偶数计数器
dtc db 0;奇数计数器
jishu db 0,0
oushu db 0,0
num db ?
flag db 1
dseg ends
cseg segment
assume cs:cseg,ds:dseg
assume ss:sseg
print macro add al,30hmov dl,almov ah,02hint 21h
endm
huanhang macromov al,0ahmov dl,almov ah,02hint 21h
endm
shijinzhi macro
local a,b,cmov num,al;判断是否大于100cmp num,100jc a;num<100,cf =1,跳amov ah,0mov al,nummov bl,100div bl;al为商,ah为余数mov num,ahprintmov flag,0
a: ;判断是否大于10cmp num,10jc bmov ah,0mov al,nummov bl,10div bl;al为商,ah为余数mov num,ahprintmov flag,1
b: cmp flag,1;flag的作用是防止余数小于10jnc cmov al,0print
c: mov al,numprint
endm
panduan procmov dl,2ehmov ah,02hint 21hmov al,nummov ah,0cmp ah,aljc notzeroprintret
notzero: mov al,nummov num,100mul num;存在ax中div blshijinzhiret
panduan endp
start: mov ax,dsegmov ds,axmov ax,ssegmov ss,axmov sp,size stpmov cx,10mov si,0
again: mov al,[si]shr al,1;cf = 1奇,cf = 0偶jc dmov bl,[si]add oushu,bladc byte ptr oushu+1,0inc dtbjmp e
d: mov bl,[si]add jishu,bladc byte ptr jishu+1,0inc dtc
e: inc siloop againmov ah,oushu+1mov al,oushudiv dtb;al中存平均值,ah存余数mov oushu,almov oushu+1,ahmov ah,jishu+1mov al,jishudiv dtc;mov jishu,almov jishu+1,ah;按十进制输出mov al,oushushijinzhimov al,oushu+1mov num,almov bl,dtbcall panduanhuanhangmov al,jishushijinzhimov al,jishu+1mov num,almov bl,dtccall panduanmov ah,4chint 21h
cseg ends
end start
运行截图:
六、实验总结
本次实验中,我对循环结构程序又有了更新一层认识,对汇编指令的使用规则及方法掌握的更熟练了。在本次实验中,我同时也遇到了一些困难:
- 在最后的几次调试时,发现小数位是不对的,且只有一位数。经过调试发现是我直接将余数打印了出来,并没有处理成小数。要想将余数转化成小数,将余数乘以10的倍数再除以除数即可。
- 在写宏定义时,也想运用循环结构,不知是否可行。在老师的帮助下,发觉需要在头部声明:local x,x,x。原因是当宏在主程序中被二次展开时,标号会重名,所以要提前声明一下防止出错。
- 在写程序的过程中也犯了一些基础的错误,如不能直接div 数值,需将数值放在寄存器中;adc oushu+1,0是不行的,需要指明数值类型是字还是字节,应修改为:adc byte ptr oushu+1,0;以及mov 存储器,存储器这种低级的错误。
经过这段时间的训练,一点点地编写代码与调试,对于汇编语言有了更高一层的理解与掌握,也认识到了它身为低级语言的重要性,希望我在未来的学习中能更加深刻的学习与掌握相关知识,搭建好人与机器沟通的桥梁。