博客
关于我
汇编语言-运行程序
阅读量:418 次
发布时间:2019-03-06

本文共 1465 字,大约阅读时间需要 4 分钟。

汇编语言-一个程序

程序从写出到执行

源程序

在汇编语言源程序中,包含两种指令:汇编指令和伪指令。汇编指令是有对应的机器码,可以被编译为机器指令,由CPU执行;而伪指令没有对应的机器码,不直接被CPU执行,而是由编译器处理。

以下是示例汇编程序的代码:

assume cs:codesgcodesg segment    mov ax, 0123H    mov bx, 0456H    add ax, bx    add ax, ax    mov ax, 4C00H    int 21Hcodesg endsend

codesg segmentcodesg ends 是一对成对使用的伪指令,它们用于定义一个段codesg,分别表示段的开始和结束。一个汇编程序通常由多个段组成,这些段用于存放代码、数据或作为栈空间。

end 是汇编程序的结束标记,编译器在遇到 end 时会停止编译。在编写程序时,应在程序结尾处加上 end,否则编译器无法识别程序的结束位置。

assume 伪指令的作用是假设某一段寄存器和程序中的某一个用 segment...ends 定义的段相关联。编译器根据 assume 指令将段寄存器与指定段联系起来。

程序的返回功能通过 mov ax, 4C00Hint 21H 实现。以8086 CPU为例,开机后运行的Command控制台在运行程序时会将控制权交给程序,程序运行结束后会返回控制权给Command。关于这两条指令如何实现控制权的返回,会在之后的章节详细说明。

编译和链接源程序

当你写好程序后,将其保存为 file.asm 文件,然后通过 masm 编译器编译,编译器会将代码编译成 obj 文件。接着进行链接操作,使用 link file.obj 命令即可生成 exe 文件。

在2021年,重新实现8086 CPU并不现实。以下是一些可以替代的方法:

  • emu8086:集成无需控制指令,提供完整的图形化界面。
  • DOSbox:仿 DOS界面,具体操作可参考相关文档。
  • 执行程序

    在 DOSbox 中,链接出 exe 文件后,直接输入文件名即可运行(无需输入 exe 后缀)。如果需要调试程序,可以使用 debug file.exe(文件全名)。

    在命令控制台中执行程序时,程序会被加载到内存中,CPU的控制权交给程序,程序运行结束后又会返回控制权给初始调用程序。

    调试程序

    调试程序时,需要一个程序去调用目标程序并将控制权交给它。调试过程中,控制权仍然在调试器(如Command)中,无法直接操作程序的命令。通过调试器,可以观察程序在内存中的加载情况和执行过程。

    关于 hello.exe 的调试示例:

    程序加载后,ds 寄存器存放了程序所在内存区的段地址,内存区的偏移地址为 0,因此程序在物理内存中的地址为 SA x 16 + 0

    由于PSP占用 256 字节(100H),程序的物理地址为 SA x 16 + 256,即 SA + 10H:0

    INT21H 指令执行后,会显示 "Program terminated normally",并将控制权返回到调试器(如Debug)。使用 Q 命令退出调试器后,控制权会返回到命令控制台。

    在 DOS 中运行程序时,Command 会加载程序到内存中,程序运行结束后返回到Command。调试时,使用 debug hello.exe 会加载程序到内存中,程序运行结束后返回到Debug,退出调试后再返回到Command。

    转载地址:http://wrgkz.baihongyu.com/

    你可能感兴趣的文章
    python 怎么验证是否安装成功 scrapy
    查看>>
    Python 手写数字识别-1
    查看>>
    Python实现接口自动化测试库(JSON与Requests)详解
    查看>>
    Python 手写数字识别-3-sklearn中的几种算法
    查看>>
    python实现SSIM和MSSSIM计算 (附完整源码)
    查看>>
    Python 打开文件注意事项
    查看>>
    python 批量修改文件名_python windows下批量修改文件名
    查看>>
    Python 抓取网页乱码问题 以及EXCEL乱码
    查看>>
    python 抓取网页内容
    查看>>
    python 按照当前日期创建文件
    查看>>
    Python 接口并发测试详解
    查看>>
    Python 接口自动化 —— requests框架
    查看>>
    python 接口自动化数据结构(如列表、字典、元组)
    查看>>
    Python 接口自动化测试中的深拷贝与浅拷贝~
    查看>>
    Python 接口自动化测试中的高阶函数
    查看>>
    python 控制 cmd 命令行颜色
    查看>>
    Python 操作 Azure Blob Storage
    查看>>
    Python 操作 Excel 全攻略 | 包括读取、写入、表格操作、图像输出和字体设置
    查看>>
    Python 操作 JMeter 探索:pymeter 实操指南
    查看>>
    Python 操作 Redis
    查看>>