【8086汇编-Day5】第三次实验
-
练习一
结果展示:
这个程序执行下来貌似打印了数字36,但其实是两个数字3、6;
这段就是用来打印3;首先ah里放2,跟后面的int 21h结合起来就是调用21号中断例程的2号子程序,用来打印到标准输出。mov dl,3可以理解,我们是想打印数字3,可是事实上并没有那么简单,我们打印字符其实需要的是字符3的ACSII码值即51d 即33h所以在3的基础上add 30h。那么打印6同理。如何让输出与输出有换行呢?
mov ah,2 mov dl,0ah int 21h
既然我已经分析的如此清晰了,那我就不改动line 4,line 9了,实际上道理就是这样的,数字本身跟他的十六进制ASCII值形式上刚好差30h,所以add一行不用换,想打印什么数字直接改mov dl的就好了。
过程:
查看cx(在这里cx用来表示机器码占用的字节数)可以自己数下反汇编出来的机器码长度
单步调试,最后调用中断例程退出程序
-
练习二
过程:
改变line7 line 10数据,观察现象
其实讲到这里就够了,这个汇编程序其实就是在想现存写入数据,哪还记得上一次实验中向显存写入数据实现多种多样的显示么?这里的字符样式、颜色、前景、背景涉及到那些比特位,我在上一篇实验博客里做过补充,在此不再赘述,有兴趣可以参考我上一篇博文,在这里做不同实现。
!!!
dosbox下这一点确实有点坑,操作数搭配结构不合法的时候,不影响程序执行,在老师指导下在m4w环境下做了实验,意识到错误,如下
修改后则正常了,如下