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)汇编指令

汇编指令将在编译连接完成后变为机器码;

例如下图所示:

汇编bic temp 汇编程序是什么_伪指令

 

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;