shuiyu 发表于 2017-8-20 00:31:58

实验九

本帖最后由 shuiyu 于 2017-8-20 00:34 编辑

越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

实验九


这两天被实验九折腾得要命,自己太笨琢磨了两天还是没写出来,还是老老实实看下一讲的讲解吧{:10_266:} 以下是我看讲解前的一些思路。

编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串’welcome to masm!’

解:在80*25彩色字符模式下,因为显示器只能显示25行,每行80个字符。

(1)在屏幕中间显示绿色字符串
首先确定位置:题目要求显示在屏幕中间,故我们选在了12行(其实13行也行),偏移6E0~77F对应显示器的第12行;40列为正中间:4E~4F单元对应显示器上的第40列。因为要显示“welcome to masm!”16个字符占32个字节,故要在第32列与47列中输入才能显示在正中间;3E~3F单元对应显示器上的第32列,5C~5D单元对应显示器上的第47列。即要从12行32列 B800:71E(6E0H+3EH=71EH{:5_109:} )这个位置开始输入指令,由于我用的是栈,所以入栈的话就要从12行47列B800:73DH(6E0H+5DH=73DH{:5_109:} )。

然后确定ASCII码和属性字节:“welcome to masm!”的ASCII分别为:77 65 6C 63 6F 6D 65 20(空格) 74 6F 20 6D 61 73 6D 21(感叹号)
绿色的属性字节为:000000010B也就是02H。(PS:刚刚发现的,如果不输入属性字节的话系统会默认成输入ASCII码时的颜色)

输入指令完成任务:如果我们直接在debug下输入指令的话,由于指令太长debug窗口会自动换行。造成我们要显示的字幕不在同一行上了,就是这样:


所以我们要用汇编语言生成EXE文件解决问题,但是在这期间我又发现了问题(我是准备运用栈);就是我一指定SS和SP为显示缓冲区的地址后,它就直接写到地址里面了,如下图:


但是我琢磨了很久还是解决不了(都两天了{:5_90:} ),索性就不写(毕竟小甲鱼下一讲有讲解,在瞎琢磨真的就是浪费时间得不偿失了{:5_99:} )。


(2)屏幕中间显示绿底红色字符串
位置和ASCII码在(1)中已经确定好了。
绿底红色的属性字节为:00100100B。也就是24H
用汇编语言完成任务:



(3)屏幕中间显示白色蓝底字符串
位置在(1)中已经确定好了。
白色蓝底的属性字节为:01110001B。也就是71H
用汇编语言完成任务:

谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}
页: [1]
查看完整版本: 实验九