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


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

    第一步:编写汇编源程序

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

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

    二、源程序

    1. codesg segment ; 定义一个段,段的名称为“codesg”,这个段从此开始
    2. mov ax,0123H
    3. mov bx,0456H
    4. add ax,bx
    5. add ax,ax
    6. mov ax,4C00H
    7. int 21H
    8. codesg ends ; 名称为“codesg”的段到此结束
    9. 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 命令结束程序 

  • 相关阅读:
    NPM使用技巧
    javaEE -7(网络原理初识 --- 7000字)
    java学习第三周总结。。。
    Java+JSP+MySQL基于SSM的物流公司物流订单管理系统-计算机毕业设计
    文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入
    论文解读(AGC)《Attributed Graph Clustering via Adaptive Graph Convolution》
    带你了解数据库的存储过程
    出差学知识No4:ubuntu vim中的各种必须掌握的经典操作(持续更新......)
    助力质量生产,基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测
    由浅入深Dubbo网络通信深入解析
  • 原文地址:https://blog.csdn.net/2302_82189125/article/details/139263726