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

介绍

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

汇编程序操作

有许多汇编程序和其他支持程序可用于促进8051微控制器应用程序的开发。英特尔原来的MCS-51系列汇编程序ASM51已不再在市场上销售。然而,它设定了与其他标准进行比较的标准。ASM51是一个功能强大的装配工,拥有所有的铃铛和哨子。它可以在英特尔开发系统和IBM PC系列微机上使用。由于这些“主机”计算机包含8051以外的CPU芯片,因此ASM51被称为交叉汇编程序。8051源程序可以在主机上编写(使用任何文本编辑器),也可以组装成对象文件和列表文件(使用asm51),但程序不能执行。由于主机系统的CPU芯片不是8051,所以它不理解对象文件中的二进制指令。在主机上执行需要目标CPU的硬件仿真或软件仿真。第三种可能性是将目标程序下载到基于8051的目标系统中执行。ASM51由ASM51源文件[汇编程序控制]从系统提示调用

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

第一次通过时,逐行扫描源文件,并建立符号表。位置计数器默认为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

未完待续,改天再来

stc_8051_汇编教程_翻译相关推荐

  1. Esfog_UnityShader教程_前言

    很多人在学习Unity的时候对Shader都是一知半解,作为刚入职半年的新人接触Shader的时间也并不长,正因为是新人才能体会到学习Shader时候所遇到的困难和迷茫,无奈于资料不好找,网上难得的几 ...

  2. 抱抱脸(hugging face)教程-中文翻译-模型概要

    模型概要 这是一个总结的模型可在Transformers.假设您熟悉最初的Transformers模型.或者温柔的介绍,看看有注释的Transformers.在我们关注模特之间的高度差异之前.你可以在 ...

  3. spotify使用教程_使用Spotify oauth对您的应用程序进行身份验证

    spotify使用教程 In this blog, I will demonstrate how to implement Spotify OAuth with Node and Passport J ...

  4. Syncaila教程_如何从NLE导出XML?

    Syncaila教程_如何从NLE导出XML? Syncaila mac版是Macos上一款多机位自动对视频音频同步工具,可以对来自多个摄像机和录像机的视频和音频片段进行全自动同步,如何使用Synca ...

  5. 抱抱脸(hugging face)教程-中文翻译-预处理

    预处理 在您可以在模型中使用数据之前,需要将数据处理为模型可接受的格式.模型不理解原始文本.图像或音频.这些输入需要转换成数字并组装成张量.在本教程中,您将: 用tokenizer处理文本. 用特征提 ...

  6. linux 编译汇编,linux下的汇编教程

    linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初 ...

  7. iOS汇编教程:ARM(2)

    感谢唐巧抽出时间对本文进行double-check. 本文是iOS汇编教程:ARM第二篇. iOS汇编教程:ARM目录如下[共分为两篇]: iOS汇编教程:ARM(1) 开始:什么是汇编 函数调用约定 ...

  8. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

  9. 只能输入字母的c语言程序设计教程课后答案,c语言程序设计基础教程_习题答案20120319...

    <c语言程序设计基础教程_习题答案20120319>由会员分享,可在线阅读,更多相关<c语言程序设计基础教程_习题答案20120319(54页珍藏版)>请在技术文库上搜索. 1 ...

最新文章

  1. 云计算带来企业管理的革命
  2. 易宝典文章——用ISA 2006标准版发布Exchange 2010的OWA系列之申请Excha
  3. 管理Win2003sp1防火墙的一点小技巧
  4. 《南溪的目标检测学习笔记》——特征融合的学习笔记
  5. 通过telnet自动下载cfg配置文件
  6. python自动化测试-Python实现性能自动化测试竟然如此简单
  7. 白盒测试用例设计方法
  8. 既是手机直播投屏工具又是安卓模拟器?游戏主播和手游玩家都来了解一下
  9. matlab 离散求偏导,matlab怎么求离散曲面的偏导数
  10. c语言合数的分解编程,C语言 · 分解质因数
  11. 湛江景点旅游攻略!究竟有哪些你不容错过的景点?
  12. android网页抓取,手把手教学 Android 使用 jsoup 抓取网页数据
  13. 解决打开浏览器报proxy服务器发生错误
  14. Redis的基本使用
  15. python筛选股票5日线以上_[python]沪深龙虎榜数据进一步处理,计算日后5日的涨跌幅...
  16. C语言实现多线程的归并排序
  17. 〖产品思维训练白宝书 - 核心竞争力篇①〗- 产品经理 的核心竞争力解读
  18. 开始连载长篇小说《星辰傀儡线》
  19. 在运行ros的Python文件时报找不到路径
  20. 00后大学生:无穷小微积分教材何在?

热门文章

  1. EESoft Flexnet Licence Server 服务无法启动
  2. Mysql查询语句正则匹配
  3. libev库使用教程
  4. json里读取电视源
  5. SSM大学生公益义工主题管理-义工服务-志愿者报名审核javaweb网站j2ee项目
  6. c语言飞机借位,使用c语言实现飞机游戏
  7. IE浏览器请求ulr中有中文会报错
  8. 半路出家,开始学习java
  9. yzmcms图片自适应代码_YzmCMS支付宝配置教程
  10. 浅谈Android Print Service