汇编程序简介

时间:2022-12-14 22:48:38
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;