汇编语言(assembly language)是特定于某个物理或虚拟计算机体系结构(与大多数高级语言相反)。汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。
【CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如前面提到的加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
最早的时候,编写程序就是手写二进制指令,然后通过各种开关输入计算机,比如要做加法了,就按一下加法开关。后来,发明了纸带打孔机,通过在纸带上打孔,将二进制指令自动输入计算机。把这些文字指令翻译成二进制,这个步骤就称为 assembling(汇编过程),完成这个步骤的程序就叫做 assembler(汇编程序)。
每一种 CPU 的机器指令都是不一样的,因此对应的汇编语言也不一样。目前最常见的 x86 汇编语言,即 Intel 公司的 CPU 使用的那一种。
基础知识可参见阮一峰的:
汇编语言入门教程
汇编语言入门教程 - 阮一峰的网络日志
】
本文重点介绍实验环境的搭建
有很多很好的汇编程序(assembler),如:MASM (Microsoft Macro Assembler)。
MASM是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。
在windows10中MASM环境的搭建:
在windows下搭建汇编语言(Assembly language)编程环境工具包,下载地址:
在windows下搭建汇编语言(Assemblylanguage)编程环境工具包.rar-其它文档类资源-CSDN下载
1)、创建一个用于保存汇编工具(debug.exe、link.exe、masm.exe、edit.com等工具)的目录,如:D:\ MASMdebug(根据你的情况确定)。
2)、安装DOSBox
DOSBox是一个 DOS 模拟程序。debug.exe、link.exe、masm.exe、edit.com等工具是DOS下的工具,要想正确运行就需要DOSBox这个 DOS 模拟程序。
双击安装:
直接一路Next完成安装。
安装完成,在开始菜单中创建文件夹:
在桌面上创建快捷方式:
3)、将1)中建立目录D:\ MASMdebug 挂在到DOSBox的C——输入MOUNT C D:\ MASMdebug回车(即按下Enter键),参见下图:
在DOSBOX中,输入C:回车(即按下Enter键)进入命令符C:\>,此时,可以运行D:\ MASMdebug中的可执行程序——debug.exe、link.exe、masm.exe等工具,参见下图:
进入debug程序,使用r指令查看cup寄存器内容,用q指令将退出debug程序。
运行DOSBOX,在命令符C:\>下,命令的拼写忽略大小写,此时:
【输入命令:EDIT 文件名.asm,启动EDIT.EXE进入代码编辑状态,输入程序代码。可以使用记事本代替EDIT程序。】
输入命令:MASM 文件名.asm,生成目标文件文件名.OBJ(生成过程中可以修改目标文件名,直接回车可保持默认目标文件名)
输入命令:LINK 文件名.OBJ,链接生成可执行文件文件名.EXE。
输入命令:DEBUG 文件名.EXE,在DEBUG的命令提示符“-”出现后开始调试。
编写运行汇编语言程序
有了前面准备工作,现在可以编写运行汇编语言程序了。
打开“记事本“输入如下代码:
assume cs:code,ds:datas
datas segment
str db 'helloWorld!','$'
datas ends
code segment
mov ax,datas
mov ds,ax
lea dx,str ; 获取str的偏移地址
mov ah,9 ; 调用9号功能输出字符串
int 21h
mov ah,4ch
int 21h
code ends
end
保存文件名为test1.asm ,注意扩展名为.asm。为了编译方便放在目录D:\ MASMdebug中,参见下图:
上述过程的示意图如下:
若使用更为简洁的(注意带英文分号;)编译形式:
MASM test1.asm;
参见下图:
3)连接,输入LINK test1.obj ,参见下图:
上述过程的示意图如下:
若使用更为简洁的(注意带英文分号;)连接形式:
LINK test1.obj;
参见下图:
执行exe文件,参见下图:
特别提示,以后进入在DOSBOX中,开始时,需要挂载一下D:\ MASMdebug目录(根据你的情况确定)。
下面再给出一例汇编语言程序代码,你试着编译运行之:
DATA SEGMENT
BUFFER DB "1 STYLE ONE ", 0DH, 0AH
DB "2 STYLE TWO ", 0DH, 0AH
DB "3 EXIT ", 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUFFER ;打印菜单
MOV AH, 09H
INT 21H
MOV AH,4CH ;退出程序
INT 21H
CODE ENDS
END START