一、个人吐槽:
最近,学习16位汇编,头痛的是我竟然在vs2013(32位)上配置汇编(32位)环境,现在把它卸载,所以先记录下来。这里顺便延伸一下16汇编。我找了一大堆资料,后来发现一位网友说得很对,16汇编是最基础的,我们应该使用debug来进行调试以便更了解pc机的基层语言。话不多说,开讲。
二、16位汇编环境搭配及使用
1、首先,我来汇总一下,若你的系统是32位且win7以下,直接进行第三步,否则从第二步开始
2、如果你的电脑是32位机且是win7以下的,可以直接打开系统的命令提示符进行debug,否则需要软件辅助才能进行debug。我向大家推荐一个软件dosbox。
地址:http://pan.baidu.com/s/1bnjuLeJ
安装及使用教程参考:http://jingyan.baidu.com/article/ceb9fb10dc75c38cad2ba098.html
(1)这个教程是别人做的,但我有一点小技巧。打开安装路径->DOSbox-0.74->DOSBox 0.74 Options.bat,在倒数第三行【autoexec】加入mount C G:\masm,注意:G:\masm这个是我放masm软件的路径,masm软件在3中放出,你可以将masm放在其他路径,G:masm改为你的路径,最好不要中文路径。然后换行,再加入C:即可。作用:不用每次打开都要输入这两行。这个软件的作用是将这个将这个目录挂载到c盘上。
3、当然,有了这个软件,我的程序应该怎么调试呢?就像上文我说的G:\masm路径一样。这里我向大家推荐一个软件masm,作用:将.asm->.obj->.exe
地址:http://pan.baidu.com/s/1dDmE7FN
4、[环境配置好了],masm软件有了。我在这总结一下以下几点,
(1)用记事本编写汇编(当然,你也可以用其他任何可编辑文本的软件),保存为.asm文件,并放到masm目录下(重点,不然无法debug)。然后进入命令提示符(win7 32位以下)或dosbox(不能再命令提示符使用debug的),
(2)输入masm xx.asm(xx代表你的文件名),你会看到有三个文件(.obj .list ..crf)让你选择生成,若你一直按回车,只生成.obj文件。
(3)输入masm xx.asm(xx代表你的文件名),你会看到有三个文件(.exe .map .lib)让你选择生成,若你一直按回车,只生成.exe文件。
5、好了,我现在提供一个程序给大家调试,看附件
三、调试
1、新建记事本,将附件内容复制粘贴,保存在masm目录下(不要放错啊),后缀名为.asm(记得改啊)
2、汇编(编译)--------- >目标文件 .OBJ(AAA是你的文件名)
D:\MASM>MASM AAA
3、
D:\MASM>LINK AAA
4、执行--------- >最终可执行文件名 或双击文件名
D:\MASM>AAA
5、调试--------- > 最终可执行文件名
D:\MASM>DEBUG AAA.EXE
四、汇编常用命令
2、debug常用命令
命令 | 名称 | 命令格式 |
A | 汇编 | A[<地址>] |
G | 执行 | g=[起始地址] [断点地址] |
D显示内存D[<地址>]或D[<范围>]
u反汇编u[地址范围]
r显示寄存器r[寄存器名]或rf
G执行G[=<起始地址>][<断点地址>]
H十六进制计算H 数值1 数值2
五、附件(输出how do you do)
<span style="font-family:SimSun;font-size:18px;">DATA SEGMENT ;数据段开始
STR DB "How do you do?$"
DATA ENDS ;数据段结束
STACK SEGMENT STACK ;堆栈段开始
DB 200 DUP(?)
STACK ENDS ;堆栈段结束
CODE SEGMENT ;代码段开始
ASSUME DS:DATA,SS:STACK,CS:CODE ;段分配,声明段
START: MOV AX,DATA ;给DS赋初值
MOV DS,AX
LEA DX,STR ;显示缓冲区首址赋DX
MOV AH,9 ;设置9号调用
INT 21H ;9号调用输出How do you do?
MOV AH,4CH ;设置4CH号调用
INT 21H ;结束程序运行,返回DOS
CODE ENDS ;代码段结束
END START ;程序结束
</span>
六、程序结果