博客
关于我
汇编语言-运行程序
阅读量: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 segment 和 codesg ends 是一对成对使用的伪指令,它们用于定义一个段codesg,分别表示段的开始和结束。一个汇编程序通常由多个段组成,这些段用于存放代码、数据或作为栈空间。

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

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

程序的返回功能通过 mov ax, 4C00H 和 int 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前端之css
    查看>>
    Python制作进度条,原来有这么多方法
    查看>>
    Python制作简单的学生成绩管理系统
    查看>>
    python制作甘特图的基本知识(附Demo)
    查看>>
    python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
    查看>>
    Python到底能做什么?它的优点在哪?
    查看>>
    python利用pytorch库导出图像分割算子
    查看>>
    python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
    查看>>
    python利用excel分析过杀漏失
    查看>>
    python判断汉字数目
    查看>>
    python判断文件是空的,如果是空的,就删除
    查看>>
    python判断密码是否正确_python密码判断是否符合要求的方法
    查看>>
    python判断字符串包含中文_Python 判断字符串是否包含中文
    查看>>
    python删除第一行_Python 乱码指北:一行删掉根目录
    查看>>
    Python删除列表元素的三种方法
    查看>>
    python初步学习-python数据类型-集合(set)
    查看>>
    python列表生成字典_Python中将字典转换为列表的方法
    查看>>
    python列表对应元素合并为列表及判断一个列表是几维
    查看>>
    python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
    查看>>
    python列表前几个_python之列表
    查看>>