8086 汇编笔记(三):第一个程序

简介: 8086 汇编笔记(三):第一个程序

一、一个源程序从写出到执行的过程

第一步:编写汇编源程序

第二步:对源程序进行编译连接

第三步:执行可执行文件中的程序

二、源程序

codesg segment         ; 定义一个段,段的名称为“codesg”,这个段从此开始
 
    mov ax,0123H
    mov bx,0456H
    add ax,bx
    add ax,ax
 
    mov ax,4C00H
    int 21H
 
codesg ends            ; 名称为“codesg”的段到此结束
 
end

伪指令: 


       1. segment 和 ends 的功能是定义一个段,segment 说明一个段开始,ends 说明一个段结束。一个段必须有一个名称来标识

       2.  end 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指 end 就结束对源程序的编译

标号:

       汇编源程序中,除了汇编指令和伪指令外,还有一些标号,比如 “codesg“ 一个标号指代了一个地址。

程序返回:

       mov ax,4C00H

       int 21H

三、编译

完成对源程序的编辑后,可以对其进行编译,生成包含机器代码的目标文件

VS Code 中下载插件 MASM/TASM

打开DOSBox 挂载

编译过程:

解析:

       1. 运行 masm 程序,第一个默认文件后缀名是 .asm,所以直接输入 1 (在同一目录下)

       2. 提示输入要编译出的目标文件的名(回车默认为 1.obj)

       3. 提示输入列表文件的名称(回车跳过)

       4. 提示输入交叉引用文件的名称(回车跳过)

1. 源文件(.asm)

源文件是你编写的汇编代码,通常扩展名为 .asm。这是编译过程的输入文件,其中包含了你的汇编语言指令。

作用

  • 包含程序的汇编源代码。
  • 由 MASM 编译器读取和处理,生成目标文件。

2. 目标文件(.obj)

目标文件是汇编源文件经过编译后生成的中间文件,通常扩展名为 .obj。它包含了机器码,但还不是一个可执行文件。

作用

  • 包含了机器码和重定位信息,可以被链接器处理。
  • 由 MASM 编译器生成,用于后续的链接步骤。

3. 列表文件(.lst)

列表文件是编译过程中可选生成的文件,通常扩展名为 .lst。它包含了源代码、生成的机器码、符号表以及其他调试信息。

作用

  • 用于调试和查看编译过程中的详细信息。
  • 方便开发者检查源代码与生成的机器码的对应关系。

4. 交叉引用文件(.crf)

交叉引用文件也是编译过程中可选生成的文件,通常扩展名为 .crf。它列出了源代码中每个符号(变量、标签等)的定义和使用位置。

四、连接

连接过程

解析:

       1. 运行 link 程序,第一个默认文件后缀名是 .obj,所以直接输入 1 (在同一目录下)

       2. 提示输入要生成的可执行文件的名称,默认为 1.exe

       3. 提示输入映像文件的名称(回车跳过)

       4. 提示输入库文件的名称(回车跳过)

       5. 最后一个警告是没有栈段

1. 目标文件(.obj)

作用

  • 包含汇编代码编译后的机器码和重定位信息。
  • 被 LINK 程序读取并链接成可执行文件。

2. 可执行文件(.exe)

作用

  • 最终生成的可执行程序文件。
  • 可以在操作系统下运行。

3. 映像文件(.map)

作用

  • 可选文件,用于调试。
  • 包含程序的内存映像和符号信息。
  • 帮助开发者理解程序的内存布局和符号地址。

4. 库文件(.lib)

作用

  • 可选文件,包含预编译的函数和程序代码。
  • 在链接过程中,LINK 程序可以使用库文件中的代码。
  • 有助于重用代码和减少可执行文件的大小。

五、以简化方式进行编译和连接

注意:同一目录下才不用加路径

六、程序执行过程的跟踪

为了观察程序的运行过程,可以使用 Debug

使用 T 命令单步执行每一条命令,到了 int 21H 用 P 命令结束程序

相关文章
|
23天前
|
安全 编译器
8086 汇编笔记(四):[BX] 和 loop 指令
8086 汇编笔记(四):[BX] 和 loop 指令
|
23天前
|
存储
8086 汇编笔记(二):寄存器(内存访问)
8086 汇编笔记(二):寄存器(内存访问)
|
23天前
|
存储
8086 汇编笔记(一):寄存器
8086 汇编笔记(一):寄存器
|
1月前
|
存储 编译器
C51汇编程序
C51汇编程序
27 5
|
存储 编译器 C语言
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(下)
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(下)
|
存储 编译器 C语言
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】(上)
【多级指针】带你从反汇编角度认识指针,C语言指针,多级指针【滴水逆向三期(36)笔记】
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
100 0
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)