内存、数据、栈和代码

编译和链接:

先将一个个asm编译,如果出错则只需要修改其中一个源代码,全部ok了再链接,可以节省很多时间。

程序的跟踪:debug + 程序名

CX = 程序的长度(指令字节的长度)

p 执行 int 指令

q 推出

PSP区:从 ds:0 开始的256个字节(用来系统和程序之间进行通信的)。

inc 指令(increase):自增指令:占用空间小,只有一个字节;运算速度快,资源占用小。

标识:在语句前加上一个 ”标识:“ 可以设置其指令位置为标识,使用例:jmp setNumber 就会跳转到那个地方 IP 的地址

loop 指令:

mov cx,次数

到达loop时:先减1,再判断是否等于0;注意:减之前已经循环过一次了。而且如果设置成0,会减成 FFFF,会发生越界问题。

例:mov cx,次数

loop 会跳转 次数-1 次,但是之前就已经运行了一次前面的,所以运行了 次数 次。

到loop时按下p指令:直接快进loop结束。也就是cx变成0之后,的下一句。

g指令:g 地址 直接快进到指定指令地址。

ds:数据从哪里来

es:数据到哪里去(反过来也可以);

复制内存地址:

1.字节一个个复制。但是浪费资源,可以直接用字型也就是利用16位寄存器直接一次复制2个字节。

1.mov

2.push;pop(还能节省寄存器)

注:数据首字母非零时,需要前面加个零。例:0FFFFH。

定义的数据段、栈段、代码段各占整数行,相差n * 10H的起始空间。

dw:定义字型数据;

db:定义字节型数据。

定义 segment 使得我们编程时逻辑更加清晰,各段所占空间都为10H的整数倍,多余的空间为 00H 。

本章小结:

如何在 系统分配给我们的内存中 安排自己的数据、安排自己的栈、安排自己的代码。

masm link exe文件 系统会根据exe文件中的一些描述信息,进行内存的分配。

⬆︎TOP