stc_8051_汇编教程_翻译

因为最近在弄8051的汇编程序,但是发现 上没有专门的教程,所以我就找了一篇英语的入门手册渣翻了一下。。。方便自己方便大家嘛。。。

介绍

汇编语言是介于机器语言和高级语言(如Pascal或C)之间的一种计算机语言,它使用人类很容易理解的单词和语句,尽管离“自然”语言还有很长的路要走。机器语言是计算机的二进制语言。机器语言程序是一系列表示计算机可以执行的指令的二进制字节。汇编语言用便于编程的易于记忆的“助记法”代替机器语言的二进制代码。例如,机器语言中的加法指令可以用代码“10110011”表示。汇编语言中的助记法“add”可以用汇编语言表示。用助记法编程显然比用pr更可取。用二进制代码编程。当然,这不是全部。指令对数据进行操作,数据的位置由机器语言指令的二进制代码中嵌入的各种“寻址模式”来指定。因此,根据添加的内容,添加指令可能会有几个变化。指定这些变体的规则是汇编语言编程主题的核心。汇编语言程序不能由计算机执行。一旦编写完成,程序必须翻译成机器语言。在上面的示例中,助记键“add”必须转换为二进制代码“10110011”。根据编程环境的复杂性,此翻译可能涉及可执行机器语言程序结果之前的一个或多个步骤。至少需要一个叫做“汇编程序”的程序来把指令助记符翻译成机器语言的二进制代码。接下来的步骤可能需要一个“链接器”来组合来自不同文件的程序部分,并在内存中设置该程序可以执行的地址。我们从一些定义开始。汇编语言程序一种使用标签、助记法等编写的程序,其中每一条语句对应一条机器指令。汇编语言程序(通常称为源代码或符 代码)不能由计算机执行。机器语言程序是一个包含二进制代码的程序,它代表对计算机的指令。机器语言程序,通常称为目标代码,可由计算机执行。汇编程序是将汇编语言程序翻译成机器语言程序的程序。机器语言程序(目标代码)可以是“绝对”形式或“可重定位”形式。在后一种情况下,需要“链接”来设置执行的绝对地址。链接器是一个程序,它结合了可重定位的对象程序(模块),并产生一个绝对对象程序,该程序可由计算机执行。链接器有时被称为“链接器/定位器”,以反映其组合可重定位模块(链接)和设置执行地址(定位)的独立功能。段是代码或数据存储器的一个单位。段可以是可重定位的或绝对的。可重定位段具有名称、类型和其他属性,允许链接器将其与其他同位段组合(如果需要),并正确定位段。绝对段没有名称,不能与其他段组合。一个模块包含一个或多个段或部分段。模块具有用户指定的名称。模块定义决定了本地符 的范围。对象文件包含一个或多个模块。在许多情况下,模块可以被视为“文件”。程序由单个绝对模块组成,合并所有输入模块中的所有绝对和可重定位段。程序只包含计算机能理解的指令(包括地址和数据常数)的二进制代码。

汇编程序操作

源文件已被汇编,指定的任何汇编程序控件都将生效。汇编程序接收一个源文件作为输入(例如program.src),并生成一个对象文件(program.obj)和列表文件(program)。l)作为输出。如图1所示。由于大多数汇编程序在翻译成机器语言时会扫描源程序两次,因此它们被描述为双通道汇编程序。汇编程序使用位置计数器作为指令地址和标签值。每一道的作用如下所述。

stc_8051_汇编教程_翻译
第一次通过时,逐行扫描源文件,并建立符 表。位置计数器默认为0或由org(set origin)指令设置。扫描文件时,位置计数器的长度会随着每条指令的长度而增加。define data指令(dbs或dws)将位置计数器增加定义的字节数。保留内存指令(DSS)将位置计数器增加保留的字节数。每次在行首找到标签时,标签都会与位置计数器的当前值一起放在符 表中。使用equale指令(equs)定义的符 与“equaled”值一起放在符 表中。保存符 表,然后在第二遍中使用。

第二次通过在第二次通过期间,将创建对象和列表文件。助记键转换为操作码并放入输出文件中。操作数被计算并放在指令操作码之后。当符 出现在操作数字段中时,它们的值从符 表中检索(在传递一期间创建),并用于计算指令的正确数据或地址。由于执行了两次传递,源程序可以使用“forward references”,即在定义前使用符 。例如,在程序前面进行分支时,就会出现这种情况。
如果对象文件是绝对的,那么它只包含机器语言程序的二进制字节(00h-0fh)。可重定位的对象文件还将包含一个sysmbol表以及链接和定位所需的其他信息。列表文件包含源程序和机器语言程序中十六进制字节的ASCII文本代码(02H-7eh)。对对象文件和列表文件之间的区别的一个很好的演示是在主机的CRT显示器上显示每个文件(例如,在MS-DOS系统上使用type命令)。清单文件清晰地显示,每一行输出包含一个地址、操作码,也许还有数据,然后是源文件中的程序语句。列表文件显示正确,因为它只包含ASCII文本代码。然而,显示对象文件是一个问题。输出将显示为“garbage”,因为对象文件包含8051机器语言程序的二进制代码,而不是ASCII文本代码。

汇编语言程序格式

汇编语言程序包含以下内容:机器指令汇编程序指令汇编程序控制注释机器指令是可执行指令(如ANL)的常见助记法。汇编指令是汇编程序的指令,它定义程序结构、符 、数据、常量等(例如,org)。汇编程序控制集合汇编程序模式和直接汇编流(例如$title)。注释通过解释指令序列的目的和操作来增强程序的可读性。包含机器指令或汇编指令的行必须按照汇编程序理解的特定规则编写。每行分为“字段”,用空格或制表符分隔。每行的常规格式如下所示:[标签:]助记符[操作数][,操作数][…][;逗 ]

只有助记字段是必需的。许多汇编程序要求标签字段(如果存在)从第1列的左侧开始,随后的字段用空格或制表符字符分隔。对于asm51,标签字段不必在第1列中开始,助记字段也不必与标签字段位于同一行。但是,操作数字段必须与助记字段在同一行开始。字段描述如下。标签字段标签表示以下指令(或数据)的地址。分支到该指令时,该标签在分支或跳转指令的操作数字段中使用(例如,sjmp skip)。尽管术语“标签”总是代表一个地址,但术语“符 ”更一般。标签是一种符 类型,通过要求它们必须以冒 (:)结尾来标识。符 是使用诸如equ、segment、bit、data等指令分配的值或属性。符 可以是地址、数据常量、段名称或程序员构想的其他构造。符 不能以冒 结尾。在下面的示例中,par是一个符 ,start是一个标签(这是一种符 类型)。

PAR EQU 500 ;“par”是一个符 ,代表值500
START: MOV A, #0FFH ;“start”是一个标签,代表mov指令的地址

符 (或标签)必须以字母、问 或下划线(uu)开头;后面必须跟字母、数字、“或“u”,最多可包含31个字符。符 可以使用大写或小写字符,但它们的处理方式相同。不能使用保留字(助记符、运算符、预定义符 和指令)。

助记符字段

指示助记符或汇编程序指令进入助记符字段,该字段位于标签字段之后。指令助记符的例子有add、mov、div或inc。汇编程序指令的例子有org、equ或db。

操作数字段

操作数字段跟随助记字段。此字段包含指令使用的地址或数据。标签可用于表示数据的地址,或符 可用于表示数据常量。操作数字段的可能性很大程度上取决于操作。有些操作没有操作数(例如ret指令),而另一些操作数允许用逗 分隔多个操作数。实际上,操作数字段的可能性是多方面的,我们将详细阐述这些可能性。但首先是评论栏。

注释字段

注释:为了澄清程序,请在每行末尾进入注释字段。注释必须以分 (;)开头。每行可以是注释行,以分 开头。子程序和程序的大段通常以注释块开始,注释块的若干行解释了后面软件段的一般属性。

特殊汇编符 特殊汇编符 用于寄存器特定的寻址模式。其中包括a、r0到r7、dptr、pc、c和ab。此外,美元符 ($)可用于引用位置计数器的当前值。下面是一些例子。

SETB C
INC DPTR
JNB TI , $

上面的最后一条指令有效地使用了ASM51的位置计数器,以避免使用标签。它也可以写为

HERE: JNB TI , HERE

间接地址对于某些指令,操作数字段可以指定包含数据地址的寄存器。商业“at”符 (@)表示地址间接指向,根据指令,只能与r0、r1、dptr或pc一起使用。例如,

ADD A , @R0
MOVC A , @A+PC

上面的第一条指令在r0中指定的地址从内部RAM中检索一个字节的数据。第二条指令从外部代码存储器中检索一个字节的数据,地址是通过将累加器的内容添加到程序计数器而形成的。注意,当执行加法时,程序计数器的值是MOVC后面的指令的地址。对于上述两条指令,检索到的值都被放入累加器中。

直接寻址

使用立即寻址的指令在成为指令一部分的操作数字段中提供数据。即时数据前面有一个磅符 ()。例如,

CONSTANT
EQU 100
MOV A , #0FEH
ORL 40H , #CONSTANT

未完待续,改天再来

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月1日
下一篇 2019年5月1日

相关推荐