大二选了汇编这门神奇的课,学了一个多月都是纸上谈兵,很是不爽。最近趁着闲给自己的 mbp 配了一下汇编的环境,顺带给自己的博客搭了一个文件服务器,然后写篇博客整理一下。

下载安装 DOSBox 链接到标题

这一步我们选择最优雅的方式:通过 Homebrew 下载。

$ brew install dosbox

然后我们通过终端运行就可以启动 DOSBox 了。

$ dosbox

img1

挂载 DOS 的盘符 链接到标题

DOSBox 需要有一个自己的工作路径,我们可以通过

Z:>MOUNT C {path}

指令来挂载,然后就可以切换了。

img2

当然这一步也可以直接写到 DOSBox 的配置文件中,让之后我们每一次启动它都可以直接执行这两句话。

首先我们先打开它的配置文件,一般是 ~/Library/Preferences/DOSBox\ 0.74-3\ Preferences

然后在这个文件的底部加上这么几行:

# 挂载 ~/Program/assembly_language 目录为 C 盘 
mount C ~/Program/assembly_language 
# 进入 C 盘(~/Program/assembly_language 目录) 
C:

就可以自动挂载了。

下载常用工具 链接到标题

常用工具下载

下载下来后解压到我们刚刚挂载 C 盘的那个目录下,此时启动 DOSBox 就可以使用这些工具了。

img3

工具的使用方法 链接到标题

编译运行一个汇编文件 链接到标题

step1: 在挂载的文件夹内新建一个文件 TEST.ASM

step2: 写入下面的数据

DATAS SEGMENT
    ;此处输入数据段代码  
    ;13、10都是十进制,分别表示垂直制表符、退格,'$'表示字符串结尾
    STRING  DB  'Hello World!',13,10,'$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    LEA  DX,STRING
    MOV  AH,9
    INT  21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

step3: 使用 dir 指令确保文件已在 img4

step4: 使用 masm {fileName} 指令将代码文件(.asm)汇编成目标码文件(.obj)(这里输入三个空格即可) img5

step5: 使用 link {fileName} 指令将目标码文件链接为机器码文件(.exe)(这个 warning 不用管,我们的代码里没声明堆栈段导致的) img6

step6: 执行 TEST.EXE 文件即可 img7

DOSBox 的调试功能 链接到标题

step1: 使用 debug {fileName} 指令进入调试模式 img8

step2: 通过参数 r 查看、修改寄存器内的值 img9

step3: 通过参数 u {lineNum} 查看汇编指令,行数省略时默认 10 行 img10

step4: 通过参数 t 执行下一条汇编指令并打印各个寄存器的值 img11

step5: 通过参数 d {memory_segmentation:offset_address} 查看指定内存单元 img12

step6: 通过参数 q 退出调试模式 img13

彩蛋 链接到标题

既然已经给 Mac 配上了 dos 环境,那古早的 dos 游戏就不得不品尝了。

img14

img15

仙剑奇侠传 dos 版下载