1.汇编编程大概流程
1)编写源程序
记事本等工具编写汇编代码;
保存为xx.asm;
2)编译连接
将源程序编译连接成可执行文件xx.exe;
例如:用masm编译连接源a.asm;
编译:将 .asm 文件编译成 .obj 文件;
masm a.asm
连接:将 .obj文件连接成 .exe文件;
连接的作用:
1】可将多个源文件连接成一个可执行文件
2】如果源文件调用了库文件,将库文件和源文件连接成一个可执行文件;
3】.obj文件还不能直接执行,需要连接处理后才能生成可执行文件;
link a.obj
编译连接:也可以同时进行编译连接
ml a.asm
3)运行
运行生成的可执行文件;
例如:运行a.exe
a
2.汇编源程序
一段简单的汇编代码:
assume cs:demo
demo segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
demo ends
end
汇编代码由两种指令组成:
1】伪指令 ->不编译成机器码,由编译器执行,用来控制编译工作
2】汇编指令 ->编译成机器码,然后由cpu来执行
1)伪指令
segment 和 ends ->是一对伪指令;用来定义一个段;格式为:段名 segment ... 段名 ends
demo segment
...
demo ends
end ->汇编程序的结束指令;编译器在编译过程中,遇到了伪指令end将结束编译;
assume ->将段寄存器和代码段关联;例如:段寄存器cs 和 代码段 demo关联:
assume cs:demo
2)汇编指令
汇编指令将在编译连接完成后变为机器码;
例如下图所示:
3)标号
标号就是段的名称;
例如demo segment 中的 demo就是标号;
标号将最终转换成一个段的段地址;
4)程序返回
在一个单任务操作系统中,例如dos;
程序p2想要执行,必须有一个程序p1将p2从可执行文件中加载到内存,然后将cpu的控制权交给p2;
p2执行时p1暂停,当p2执行完后,再将cpu的控制权交给p1,p1继续执行;
当一个程序结束后,将cpu的控制权交给使它运行的程序的过程称为程序返回;
程序返回的实现代码:
mov ax,4c00H
int 21H
3.debug调试
可以用debug来调试 .asm编译连接后生成的 .exe文件;
例如:
debug a.exe
在dos中,运行一个程序时,由command将可执行文件加载入内存,设置cs:ip指向该程序的入口;
当cs:ip指向程序入口时,command将cpu控制权交给程序,直到程序结束;
为了观察程序执行的过程,可以利用debug;
debug会将程序加载入内存,设置cs:ip指向程序的入口,但是不会放弃cpu的控制权;
debug调试时可能用到的命令:
r ->查看寄存器信息;
u ->查看下一条指令;
t ->单步执行;
p ->int 21 这条指令需要用 p 来执行;
q ->退出debug;