实验4:

1.附上代码图==

 

也就是先把ds的值赋为0b80,之后再对其进行偏移:ds:ip=b800:07b8;对cx赋值为16,loop循环地址后

的16个地址,inc bx相当于mov dx,1;add bx,dx;就是实现了对bx的值加一。

然后打开dosbox编译调试:

type

masm,link;

根据要求cls处理之后再执行t3;

16个红爱心,还是在屏幕中间位置左右的。

                                                爱心变成了大写的A

结论的话和前面一样呀,对显卡内存的赋值其后两位控制这个符号,前两位控制它的颜色;

2.

代码如下:

进入其debug环境==,用d查看0:200地址的内存内容,0到63已经输入其中;

 

cx=0016,即代码占用的字节为16.用反汇编命令u查看机器码;

g命令不知该如何操作==

因为int 21h以及后面的代码每个程序都有,我觉得就是相当于return 0吧。不管它,所以我选了

g=0014代表的是第14个字节的代码的cpu寄存器内容

其他的话就都是程序正常完结了;

3.程序要实现“mov ax,4c00h”之前的指令复制到内存0:200处,

所以补全程序为:

经过大佬指导,前面先填cs即将你之前的地址给到,然后在cx,循环几次并不知道,我随便写了一个6.

对其进行反汇编:

可见mov ax,4c00循环是到0017,所以那里应该输17.

试了好几遍但我这个是cx,6的编译出来的与cx为其他值出现的内容都相同==或许循环是一个固定句式??

与其次数没有很大的关系?就如c语言循环越出并不报错。需要你自己查找?

 

小结:做了很久,啊啊啊啊,还是有一些东西不能很好的自我理解,但对于这方面的知识懂了很多,对于循环

有了更底层的认识。

 

posted on 2018-11-19 21:31  柯朵莉  阅读(172)  评论(0编辑  收藏  举报