前言本学期学校安排有汇编语言这门课,需要自己搭建汇编语言开发环境,特此写下本文记录搭建过程. 关于搭建汇编语言开发环境的教程,我也找了许多,可看下来却依旧一头雾水,经过本人摸索,同时结合网上教程,欲写下这篇易懂的文章. 准备工作1.下载DOSBox工具介绍:DOSBox是一个DOS模拟程序,由于它采用的是SDL库,所以可以很方便的移植到其他的平台.目前,DOSBox已经支持在Windows、Linux、Mac OS X、BeOS 、palmOS、Android 、webOS、os/2等系统中运行.不少DOS下的游戏都可以直接在该平台上运行. 工具官网:DOSBox, an x86 emulator with DOS 项目主页: 下载链接1(32位): 下载链接2(这个是我下载好的,可能会快一点): 2.下载汇编工具包下载链接: 汇编工具截图 安装教程1.安装DOSBox双击运行DOSBox安装程序 点击next 选择安装位置(我选择都是D:\DOSBox)然后点击install即可 安装位置要记得,后面要用 2.创建工作目录安装完毕创建一个工作目录(目录位置及目录名可自定义) 我的是在D:/DOSBox/Debug 之后再在Debug下创建两个文件夹ASM(放自己写的汇编程序)和MASM(放汇编工具) 将汇编工具放入MASM文件夹 3.挂载工作目录打开DOSBox安装目录(我的在D:\DOSBox) 打开后找到DOSBox 0.74 Options.bat这个批处理文件 直接双击运行会出现一个记事本 使用快捷键Ctrl+F查找其中的[autoexec]部分(一般在文件末尾) 在文件中添加下列内容并保存 MOUNT F D:\DOSBox\Debug 命令解释: #挂载工作目录挂载到虚拟盘符F(虚拟盘符可自定义,命令不区分大小写) 如果不加cls,打开会是这样 加上cls,打开会是这样(我觉得更美观,依个人喜好) 注意:不进行此种配置的话,每次打开DOSBox是需要手动输入上述命令,非常麻烦 使用说明DOSBox常用快捷键
注意:以上快捷键我并没有全部测试,更多详细信息参见README.txt(在DOSBox安装目录中的Documentation里面) 调整窗口大小初始的界面很小,且不能直接拉伸界面,所以有需要的可以按照下面的方法调整一下 使用快捷键Ctrl+F查找windowresolution字段 将 windowresolution=original 改为 windowresolution=800x500 #800x500为自定义大小,可修改 注意:不用删除原来的语句,在前面加上#注释掉即可 保存后,重启DOSBox生效 创建并编辑文件关于创建并编辑文件,如果你的工作目录(挂载的目录)有EDIT.COM文件(我提供的汇编工具包中有),那么你就可以在DOSBox中创建并编辑文件,如果没有请使用我提供的工具包或者耐心往下看. 使用DOSBox创建并编辑文件(不推荐)打开DOSBox使用下面命令创建并编辑test.asm文件 edit test.asm 回车后进入下面界面即可进行编辑(注意:鼠标箭头只能在编辑器里活动,想将鼠标退出来的话可以用Ctrl+F10组合键退出) 使用记事本创建并编辑文件(其他编辑器也可以)下面以此种方式创建test.asm文件 新建文本文档,将下面代码复制到里面并保存 datas segment 之后重命名为test.asm 编译调试打开DOSBox输入下面命令 masm test.asm 回车后会询问文件名,建议直接回车 编译程序提示输入交叉引用文件的名称,这个文件同列表文件一样,是编译器将源程序编译为目标文件过程中产生的中间结果.可以让编译器不生成这个文件,直接按Enter键即可 可以像上图一样分别输入文件名,打开ASM查看如下 本文全部默认即不分别输入文件名直接回车 打开ASM文件夹查看如下 继续输入命令 link test.obj 运行完毕,查看ASM文件夹 继续执行下列命令 debug test.exe debug的简单使用debug是Dos、Windows提供的实模式(8086方式)程序的调试工具
R命令查看CPU寄存器的内容
改变标志位的值 rf 改变CPU寄存器的内容改变ax的值直接回车退出修改 改变CS:IP的值D命令使用D命令,debug将输出3部分内容:
在一进入debug后,用D命令直接查看,将列出debug预设的地址处的内容 使用d 段地址:偏移地址查看(以d 1000:0为例) 格式:d 段地址:偏移地址 在使用'd 段地址:偏移地址'之后,接着使用D命令,可列出后续的内容 也可以指定D命令的查看范围,此时采用'd 段地址:起始偏移地址 结尾偏移地址'的格式 若输入的地址不是16的倍数,则输出效果是这样的 E命令将内存1000:0-1000:9单元中的内容分别写为0、1、2、3....、9,可以用'e 段地址:起始地址 数据 数据 数据 ……'的格式来进行 用E命令以提问的方式来逐个地修改从某一地址开始的内存单元中的内容
可以用E命令向内存中写入字符 也可以用E命令向内存中写入字符串 用E命令向内存中写入机器码,用T命令执行内存中的机器码 e 1000:0 b8 01 00 b9 02 00 01 c8
用E命令向从1000:0开始的内存单元中写入了8个字节的机器码 U命令对机器代码反汇编显示 按地址反汇编u 地址 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一个指令的下一个单元开始显示32个字节 按范围反汇编u 范围 T命令?命令输入?查看更多命令 结果如下: |
|