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语言循环越出并不报错。需要你自己查找?
小结:做了很久,啊啊啊啊,还是有一些东西不能很好的自我理解,但对于这方面的知识懂了很多,对于循环
有了更底层的认识。