• DOSBox和MASM汇编开发环境搭建



    本文属于《 X86架构指令基础系列教程》之一,欢迎查看其它文章。
    DOSBox可以在X86 windows环境下,模拟Dos系统(16位)。因此,通过本文搭建的环境,只能开发16位的汇编程序。

    1 安装DOSBox

    下载DOSBox和MASM:https://download.csdn.net/download/u011832525/88418043
    在这里插入图片描述
    将DOSBox0.74-3-win32-installer.exe,默认安装到C:\Program Files (x86)\DOSBox-0.74-3。

    2 安装MASM

    选择工作目录,路径中不要有中文,路径越简单越好,我们这里选择D盘。
    因此,将masm32文件夹拷贝到D:/目录下。
    然后,运行DOSBox 0.74-3,输入如下命令:

    mount C D:/masm32
    C:
    
    • 1
    • 2

    在这里插入图片描述
    mount C D:/masm32,表示把D:/masm32的内容挂载到C盘中。
    C:,表示进入C盘,也就是进入D:/masm32目录。

    3 编译测试代码

    在D:/masm32目录下,有一个汇编文件hw.asm,该段代码,主要实现打印一行“hello world!”。如下:

    datas segment
    	;此处输入数据段代码
    	hello db "hello world!",0ah,0dh,'$'
    datas ends
    
    stacks segment
    	;此处输入堆栈段代码
    stacks ends
    
    codes segment
    	      assume cs:codes,ds:datas,ss:stacks
    	start:
    	      mov    ax, datas
    	      mov    ds, ax
    
    	      mov    dx, offset hello
    	      mov    ah, 09H
    	      int    21h
    
    	      mov    ax,4c00h
    	      int    21h
    codes ends
        end start
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    输入如下命令,对该文件,进行编译:

    masm hw.asm
    
    • 1

    一路按回车,会出现以下界面,无报错:
    在这里插入图片描述
    输入如下命令,进行链接:

    link hw.obj
    
    • 1

    一路按回车,出现如下界面:
    在这里插入图片描述
    这时候你就会发现,D:/masm32文件夹下,多了两个新文件:hw.obj和hw.exe。
    masm会先将伪指令计算出来,然后指令替换为二进制代码,将一个个段打包好放到obj文件里面。
    link会将obj文件的一个个段拿出来,按照程序员规定的组合方式进行段组合,确定是否要合并或则颠倒一些顺序,然后生成exe文件。

    4 运行测试代码

    直接输入,如下内容,运行程序:

    hw.exe
    
    • 1

    程序运行结果,如下所示:
    在这里插入图片描述
    打印出了hello world。

    5 调试测试代码

    输入如下内容,对程序进行调试:

    debug hw.exe
    
    • 1

    进入调试界面,如下所示:
    在这里插入图片描述
    然后输入t,可以进行单步执行,可以观察各个寄存器值变化,如下所示:
    在这里插入图片描述
    常见的调试命令,含义如下:

    • U [start] [end]:反汇编,从start位置反汇编到end位置
    • T:执行单条命令(逐行执行)
    • A:把符号指令汇编成机器码。(就是将汇编代码转换成机器码,但是A不能编译伪指令)
    • G:运行程序
    • E [地址] [值]:修改内存(地址指向的地方)的值
    • D [地址] [数量]:从地址处开始,显示内存中数量个字节的内容(默认80h个字节)
    • R:显示或则修改寄存器的内容
    • Q:退出debug模式

    更多功能可以自行尝试。

  • 相关阅读:
    docker网络模式、资源控制
    day6-xpath解析+多线程
    Sui主网升级至V1.18.1版本
    FFmpeg入门详解之68:FFmpeg4.3的开发环境搭建
    Java系列 - 反射
    群体优化算法---蝙蝠优化算法分类Iris数据集
    聊聊大模型"打字机"效果的背后技术——SSE
    JDBC完成对数据库数据操作(增,删,改,查)
    基于Echarts实现可视化数据大屏北斗车联网大数据服务平台首页面
    React汇率小案例
  • 原文地址:https://blog.csdn.net/u011832525/article/details/133786703