定义一个段
- segment和ends是一对成对使用的伪指令
- segment和ends用于定义一个段,segment说明段的开始,ends说明段的结束
- end segment = ends
- 一个段必须有一个名称来标识,
段名 segment
段名 ends
- 一个汇编程序是由多个段组成,用来存放代码、数据或栈空间
end是一个汇编程序的结束标记
assume
- 假设某一段寄存器和程序中某一个用segment。。。ends定义的段相关联。
assume cs:codeseg
代码段是codeseg
标号
- 一个标号指代一个地址,例如上文的codesg
start:
代表程序入口end start
,这里的start是可以改的,关键是要和end后边保持一致。
程序的返回
- 在程序末尾添加返回的程序段
mov ax, 4c00H
int 21H
以上指令实现的功能就是程序返回。
- 如果没有返回,cpu的控制权没法从程序归还到操作系统中。
编译链接
masm pow.asm
编译,可以在最后加上分号masm pow.asm;
,生成pow.obj文件- 链接
link pow.obj
,同样可以在最后加上分号link pow.obj;
,生成pow.exe可执行文件
编译:伪指令和汇编指令转化为机器指令
链接:多个源程序编译成目标文件后,可以连接在一起生成一个可执行文件。
- 程序中调用了某个库文件的子程序,需要将这个库文件和该程序生成的目标文件连接起来,生成一个可执行文件。
DEBUG xxx.exe用debug执行程序
- 将程序加载进内存
- 用
t命令
单步执行,最后int 21
用p命令执行,但是我这个版本的debug不支持p命令
,只能使用t命令
而且也能正常退出。