内存、数据、栈和代码
编译和链接:
先将一个个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文件中的一些描述信息,进行内存的分配。