DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建

  • [1 安装DOSBox](#1 安装DOSBox)
  • [2 安装MASM](#2 安装MASM)
  • [3 编译测试代码](#3 编译测试代码)
  • [4 运行测试代码](#4 运行测试代码)
  • [5 调试测试代码](#5 调试测试代码)

本文属于《 X86指令基础系列教程》之一,欢迎查看其它文章。

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,输入如下命令:

cpp 复制代码
mount C D:/masm32
C:

mount C D:/masm32,表示把D:/masm32的内容挂载到C盘中。

C:,表示进入C盘,也就是进入D:/masm32目录。

3 编译测试代码

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

cpp 复制代码
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

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

cpp 复制代码
masm hw.asm

一路按回车,会出现以下界面,无报错:

输入如下命令,进行链接:

cpp 复制代码
link hw.obj

一路按回车,出现如下界面:

这时候你就会发现,D:/masm32文件夹下,多了两个新文件:hw.obj和hw.exe。

masm会先将伪指令计算出来,然后指令替换为二进制代码,将一个个段打包好放到obj文件里面。

link会将obj文件的一个个段拿出来,按照程序员规定的组合方式进行段组合,确定是否要合并或则颠倒一些顺序,然后生成exe文件。

4 运行测试代码

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

cpp 复制代码
hw.exe

程序运行结果,如下所示:

打印出了hello world。

5 调试测试代码

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

cpp 复制代码
debug hw.exe

进入调试界面,如下所示:

然后输入t,可以进行单步执行,可以观察各个寄存器值变化,如下所示:

常见的调试命令,含义如下:

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

更多功能可以自行尝试。

相关推荐
aq553560013 小时前
三大编程语言深度对比:C# vs 易语言 vs 汇编
开发语言·汇编·c#
aq553560016 小时前
编程语言对比:从汇编到PHP的四大层级解析
开发语言·汇编·php
独小乐3 天前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
C++ 老炮儿的技术栈3 天前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
cch89184 天前
Java vs 汇编:高级与低级的终极对决
java·开发语言·汇编
2301_789015624 天前
C++:智能指针
c语言·开发语言·汇编·c++·智能指针
独小乐5 天前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
Lzh编程小栈8 天前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
cch89189 天前
汇编与C语言:底层对话VS高效指挥
c语言·开发语言·汇编
jwn9999 天前
PHP vs 汇编:编程语言的两极对决
开发语言·汇编·php