1. 这里主要是在8086CPU的环境下学习的汇编语言,所以需要模拟这样的环境。
**2. 下载 dosbox 和 masm ,dosbox 是一个dos模拟程序,我们现在用的操作系统和CPU大多数64位的,8086CPU和16位操作系统已经成为古董了,那么 dosbox 可以模拟这样的环境。masm 是汇编语言的编译和 link 的工具,且必须在 dosbox 环境下使用(如果有支持window32位或者64位下直接使用的编译工具,相应的汇编语言也是不同于8086CPU的汇编指令,这样的工具应该也是有的,有需要可以自行了解一下)。 **
下载地址(如果地址不对可以自己去相应的官网下载,或者给我留言,我发给你):
dosbox :
http://www.dosbox.com/download.php?main=1
http://sourceforge.net/projects/dosbox/files/
masm 5.0 :
http://www.x86asm.com/download/tool/masm/masm500.zip
**3. 安装dosbox,这个安装过程没什么要注意的,直接安装默认位置就好,文件很小,一路next。 **
4. 将masm加压到D:\masm\masm文件夹下,另外在D:\masm创建一个code文件夹用来存放asm源代码文件,以后写代码就在D:\masm\code下新建asm文件,然后将代码写到里面。(最好是先按照这样的路径,待熟悉了再琢磨路径的问题,这里不说这些东西,只是实现快速搭建环境)
以下就是我的masm的加压的路径,可以看到有几个exe文件,其中debug和masm以及link是学习汇编的过程中常用的。
5. 配置dosbox下源代码和编译工具的路径
找到dosbox的配置文件,有三种方式
1.桌面-DOSBox 0.74(快捷方式)-右键-属性-快捷方式-打开文件所在的位置(如果没有,找起始位置,C:\Program Files\DOSBox-0.74,在运行中输入打开文件夹),双击DOSBox 0.74 Options.bat
2.菜单-DOSBox 0.74 Options(windows 10 系统的用这个方法比较方便)
3.直接打开 C:\Users\Administrator\AppData\Local\DOSBox\dosbox-0.74.conf (Administrator是你当前用户名称)
在XP下 C:\Documents and Settings\用户名\Local Settings\Application Data\DOSBox\dosbox-0.74.conf
**配置:**找到 [autoexec] 一般就在文件底部,添加如下配置(双冒号是注释作用)
mount c: c:\ #真实机器的路径C:\ 挂载成 dosbox里C:盘
mount d: d:\ #真实机器的路径D:\ 挂载成 dosbox里D:盘
path d:\masm\masm #设置dosbox下环境变量PATH,就是你masm解压的位置,masm.exe等存放的位置
d: #切换到dosbox下的D:盘
cd d:\masm\code #切换到dosbox下的源代码目录(asm源代码文件所在的目录)
cls #清屏
注意:在dosbox中的命令或者文件名不论大小写。
这里实现在屏幕上输出:Hello world
1. 编写代码
在D:\masm\code下创建一个后缀位asm的hello.asm文件,在里面编写代码如下:
assume cs:code
data segment
db 'Hello world.' ; 定义字节,表示其后每个操作数占有一个字节(1Byte)单元
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h ; 显存起始地址
mov es,ax
mov bx,0 ; db内容的起始位置
mov si,6e0h ; 对应显示的位置
mov cx,12 ; 循环次数,对应显示多少个字符
s:mov al,[bx]
mov es:[si+60+320],al
mov byte ptr es:[si+61+320],71h ; 以上显示白底蓝字
inc bx ; bx + 1, inc相当于自增
add si,2 ; si + 2
loop s ; 循环执行s:后面的代码cx次
mov ax,4c00h
int 21h ; 这两句作用是调用 INT 21H 的 4CH 号中断,安全退出程序
code ends
end start
2. 编译和连接
打开dosbox,会出现两个窗口,我们一般使用的是如下窗口:
编译命令: masm hello
这里的hello相当于hello.asm文件
然后会提示要求输入obj的名称等等,这里不用理会,直接三次回车(表示默认与asm文件同名),假如没有出错(假如出错,一般是文件找不到或者语法错误),则编译成功结果如下:
连接命令:link hello
这里的 hello 指的是编译成功后产生的 hell.obj 文件,这里同样的不用理会提示输入exe名称等,直接三次回车,然后看到一个warnning:no stack segment,不用理会,连接成功如下:
3. 运行
执行命令: hello
需要注意的是,这里的exe文件都是在dosbox下模拟8086CPU汇编程序编译连接而来,所以必须在dosbox环境下执行。
这里的 hello 指的是 hello.exe,结果将会在dosbox的窗口下打印“Hello world.” :
4. debug
debug命令: debug.exe hello.exe
**注意:**这里必须把 .exe 写出来,不能省略后缀,否则会报错extend error2。
在debug中 r 命令表示查看或改变寄存器中的值,d 命令查看内存中的值, e 命令改写内存中的值,t 命令执行一条指令(t n 表示执行n条指令)
感谢您的阅读,个人网站:分享时刻【www.itison.cn】