📅  最后修改于: 2021-01-07 05:46:22             🧑  作者: Mango
开发了汇编语言来为机器级代码指令提供助记符或符号。汇编语言程序由助记符组成,因此应将其翻译为机器代码。负责此转换的程序称为汇编程序。汇编语言通常被称为低级语言,因为它直接与CPU的内部结构配合使用。要使用汇编语言进行编程,程序员必须知道CPU的所有寄存器。
诸如C,C++,Java和其他各种语言之类的不同编程语言被称为高级语言,因为它们不处理CPU的内部细节。相反,汇编程序用于将汇编语言程序转换为机器代码(有时也称为目标代码或操作码)。类似地,编译器将高级语言翻译成机器代码。例如,要用C语言编写程序,必须使用C编译器将程序翻译为机器语言。
汇编语言程序是一系列语句,它们可以是诸如ADD和MOV之类的汇编语言指令,也可以是称为指令的语句。
一条指令告诉CPU该做什么,而一条指令(也称为伪指令)向汇编程序提供指令。例如,ADD和MOV指令是CPU运行的命令,而ORG和END是汇编程序指令。使用ORG指令时,汇编器会将操作码放置到内存位置0,而END则指示到源代码的末尾。程序语言指令包含以下四个字段-
[ label: ] mnemonics [ operands ] [;comment ]
方括号([])表示该字段是可选的。
标签字段允许程序按名称引用一行代码。标签字段不能超过一定数量的字符。
助记符和操作数字段一起执行程序的实际工作并完成任务。诸如ADD A,C&MOV C,#68之类的语句,其中ADD和MOV是助记符,它们产生操作码; “ A,C”和“ C,#68”是操作数。这两个字段可以包含指令。指令不生成机器代码,仅由汇编程序使用,而指令则转换为机器代码以供CPU执行。
1.0000 ORG 0H ;start (origin) at location 0
2 0000 7D25 MOV R5,#25H ;load 25H into R5
3.0002 7F34 MOV R7,#34H ;load 34H into R7
4.0004 7400 MOV A,#0 ;load 0 into A
5.0006 2D ADD A,R5 ;add contents of R5 to A
6.0007 2F ADD A,R7 ;add contents of R7 to A
7.0008 2412 ADD A,#12H ;add to A value 12 H
8.000A 80FE HERE: SJMP HERE ;stay in this loop
9.000C END ;end of asm source file
评论字段以分号开头,分号是评论指示符。
注意程序中的标签“ HERE”。引用说明的任何标签后均应加冒号。
在这里,我们将讨论汇编语言的基本形式。创建,汇编和运行汇编语言程序的步骤如下-
首先,我们使用编辑器键入与上述程序类似的程序。所有Microsoft操作系统附带的MS-DOS EDIT程序之类的编辑器都可以用来创建或编辑程序。编辑器必须能够产生ASCII文件。下一步,汇编程序将使用源文件的“ asm”扩展名。
“ asm”源文件包含在步骤1中创建的程序代码。它被馈送到8051汇编程序。然后,汇编程序将汇编语言指令转换为机器代码指令,并生成一个.obj文件(目标文件)和一个.lst文件(列表文件)。它也被称为源文件,这就是为什么某些汇编程序要求此文件具有“ src”扩展名的原因。 “ lst”文件是可选的。这对程序非常有用,因为它列出了所有操作码和地址以及汇编程序检测到的错误。
汇编程序需要第三步,称为linking 。链接程序将获取一个或多个目标文件,并生成扩展名为“ abs”的绝对目标文件。
接下来,将“ abs”文件馈入一个名为“ OH”(对象到十六进制转换器)的程序,该程序将创建一个扩展名为“ hex”的文件,可以将其刻录到ROM中。
8051微控制器包含单个8位数据类型,每个寄存器的大小也均为8位。程序员必须分解大于8位(00到FFH,或十进制的255)的数据,以便CPU可以处理它。
DB指令是汇编程序中使用最广泛的数据指令。用于定义8位数据。它还可以用于定义十进制,二进制,十六进制或ASCII格式的数据。对于十进制,十进制数字后的“ D”是可选的,但对于“ B”(二进制)和“ Hl”(十六进制)是必需的。
要表示ASCII,只需将字符放在引号中(“像这样”)。汇编器会自动为数字/字符生成ASCII码。 DB指令是唯一可用于定义大于两个字符的ASCII字符串的指令;因此,应将其用于所有ASCII数据定义。下面是一些数据库示例-
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
DATA2: DB 00110101B ;BINARY (35 in hex)
DATA3: DB 39H ;HEX
ORG 510H
DATA4: DB "2591" ;ASCII NUMBERS
ORG 520H
DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
可以在ASCII字符串周围使用单引号或双引号。 DB还用于按字节大小的块分配内存。
8051的某些指令如下-
ORG(原点)-origin指令用于指示地址的开头。它采用十六进制或十进制格式的数字。如果在数字之后提供H,则数字将被视为十六进制,否则视为十进制。汇编程序将十进制数转换为十六进制。
EQU(等于) -用于定义常量而不占用存储位置。 EQU将常数值与数据标签相关联,以便该标签出现在程序中,其常数值将代替该标签。在执行指令“ MOV R3,#COUNT”时,寄存器R3将被加载值25(注意#号)。使用EQU的优点是程序员可以更改一次,而汇编程序将更改所有出现的情况。程序员不必搜索整个程序。
END指令-指示源(asm)文件的结尾。 END指令是程序的最后一行;汇编器将忽略END指令之后的所有内容。
汇编语言中的所有标签必须遵循以下给出的规则-
每个标签名称必须唯一。汇编语言编程中用于标签的名称包括大写和小写字母,数字0到9,以及特殊字符(例如问号(?),句点(。),@,下划线(_),和dollar($)。
第一个字符应该是字母字符;它不能是数字。
保留字不能在程序中用作标签。例如,ADD和MOV字是保留字,因为它们是指令助记符。