4.1.1 汇编语言格式

1. 计算机语言——机器语言、汇编语言和高级语言

机器语言

机器语言是计算机能够直接识别和执行的二进制代码,由0和1组成。它是最底层的编程语言,也是计算机硬件能够直接理解的唯一语言。
机器语言的主要特点:
  • 直接性:不需要翻译即可被计算机执行
  • 机器相关性:不同型号的计算机使用不同的机器语言
  • 难理解性:全是二进制数字,人类难以阅读和编写
  • 效率高:直接由硬件执行,运行速度最快
示例:一条简单的加法指令在机器语言中可能表示为:
由于机器语言的这些特点,特别是其难以阅读和编写的特性,促使了汇编语言的产生。

汇编语言

用英文符号表示的指令,用汇编语言构成的程序称为汇编语言程序
特点:
  • 机器语言和汇编都是面向机器的
  • 和单片机的硬件系统直接相关,移植困难
  • 程序效率高,占用存储空间小,运行快
    • 这是因为助记符和机器语言是一一对应的
    • 汇编语言能反映计算机实际运行的情况
  • 直接管理和控制硬件设备
🌻
对于程序的空间、时间要求很高的场合,汇编语言是不可或缺的
notion image
汇编语言程序不能直接被计算机执行,需要经过"汇编"过程转换成机器语言。这个过程由汇编程序(Assembler)完成。
汇编过程主要包括以下步骤:
  • 1. 词法分析:将源程序分解成一个个的单词符号
  • 2. 语法分析:检查源程序是否符合汇编语言的语法规则
  • 3. 地址分配:为程序中的指令和数据分配存储单元
  • 4. 代码生成:将汇编指令转换成对应的机器码
  • 5. 符号解析:处理程序中使用的符号,建立符号表
示例:汇编语言指令 "MOV AX, BX" 经过汇编后可能生成如下机器码:
汇编程序不仅完成指令的转换,还要处理伪指令、解决地址引用等问题,最终生成可执行的目标程序。

高级语言

参照数学语言而设计,近似于人们日常用语的语言。
特点:
  • 编程容易,移植方便
  • 占用的内存多
  • 要求单片机开发 系统有对应的编译软件

2. 汇编语言格式和种类

汇编语言语句的种类

汇编语言语句可以分为三种主要类型:

1. 指令语句

指令语句是可以被转换成机器码的语句,对应着CPU的操作。
  • 格式:[标号:] 操作码 [操作数1] [,操作数2]
  • 功能:直接被翻译成机器指令,用于实现程序的具体操作
  • 示例:MOV AX, BX(将BX寄存器的内容传送到AX寄存器)

2. 伪指令语句

伪指令语句是给汇编程序的命令,不生成机器码
  • 功能:指导汇编程序如何进行汇编,定义数据、段等
  • 特点:只在汇编时起作用,不占用程序的存储空间
  • 示例:SEGMENT(定义段)、DB(定义字节数据)

3. 宏指令语句

宏指令是一组指令序列的缩写,可以用一个简单的名字代替一组常用的指令
  • 功能:简化程序编写,提高代码的可重用性
  • 特点:在汇编时展开成一组基本指令
  • 示例:MACRO(定义宏)、ENDM(宏定义结束)

指令语言格式

方括号下的部分可有可无,根据指令的需要而定
方括号下的部分可有可无,根据指令的需要而定
  1. 标号域:语句地址的标致符号
例如:
注意事项:
  • 由1-8个ASCII字符组成,第一个字符必须是字母
  • 标号后必须有一个冒号
  • 不能使用本汇编语言已经定义的符号作为标号
  • 同一个标号在程序中只能定义一次,不能重复定义
  1. 操作码域:指明要完成的操作(指令助记符),例如MOV表示数据传送
🌻
是汇编指令中唯一不能空缺的成分
  1. 操作数域:指令处理的数据或者数据所在的地址,可以没有操作数,也可以有一个或两个操作数
例如:
  1. 注释域
  1. 分隔符
      • 空格:用于分隔标号、操作码和操作数
      • 逗号(,):用于分隔多个操作数
      • 分号(;):用于分隔指令和注释
      • 冒号(:):用于标号定义,表示某一位置的符号地址

伪指令语句格式

notion image
  • 伪指令语句和指令语句主要的不同是名字后面没有冒号

4.1.2 伪指令语句

汇编语言程序编程机器语言的过程称为汇编;包括手工汇编机器汇编两种
伪指令:
机器汇编时,在源程序中向汇编软件发出如何完成汇编的指示信息
特点:
  • 不产生机器指令代码
  • 仅仅在汇编时发挥作用。不同汇编软件的伪指令系统有所不同

ORG(origin)

功能:指定程序或数据的起始地址

END(end of assembly)

功能:标识汇编程序的结束。必须是源程序的最后一条语句
  1. 主程序模块
      • 标号:可选,用于标识 END 语句本身,通常是主程序第一条指令的符号地址。
      • 表达式:表示程序模块的入口地址(通常是主程序的起始地址)。只有主程序模块才包含此项,子程序模块没有。
        • 也可以不写表达式,但是不推荐
  1. 子程序模块
      • 标号:可选,用于标识 END 语句。
      • 无表达式:子程序模块不需要指定入口地址

以下是 END 伪指令在主程序和子程序中的使用示例,帮助您更好地理解其用法:
  1. 主程序示例
      • 这里 END START 中的 START 是主程序的入口地址标号,告诉汇编器程序从 START 开始执行。
  1. 子程序示例
      • 子程序的 END 不需要指定入口地址,因为它不是程序的起点,只是被主程序调用的代码段。

EQU(EQUate)

功能:为符号赋予固定的值,相当于定义常量;
🌻
不占用内存空间,只是在汇编过程中进行文本替换操作

DL(define label)

🌻
不占用内存空间,只是在汇编过程中进行文本替换操作
功能:定义数据标号,用于数据的间接寻址:<标号>DL<表达式>
数据标号DATA可以通过以下方式使用:
由于DATA是通过DL伪指令定义的数据标号,它在程序中主要用于间接寻址,可以方便地引用指定地址(30H)处的数据。

DB(define byte)

功能:定义字节型数据(8位),会占用真实的内存空间

DW(define word)

功能:定义字型数据(16位),会占用真实的内存空间

DS(define storage)

功能:定义一片连续的存储空间,用于保留内存区域
在汇编器的管理下,DS 分配的存储空间是独占的,汇编器会确保不同标号或指令分配的内存空间不会重叠。编程者不需要关心具体的内存地址,也不会出现位置被占用的情况(在正确使用的前提下)。
这里是一些使用BUFFER的示例代码:
由于BUFFER通过DS伪指令定义了10个字节的存储空间,我们可以用它来临时存储数据,比如作为数据缓冲区使用。

BIT-位定义命令

功能:定义位变量,用于对单个位进行操作
本身不占用额外的真实内存空间,只是为某个位的地址提供一个额外的符号名

总结

  • 不占用真实内存空间的指令
    • ORG
    • END
    • EQU:只是符号替换,汇编器处理时不分配内存。
    • DL:只是定义标号,不直接分配内存。
    • BIT:引用现有内存或寄存器中的位,不额外分配内存。
  • 占用真实内存空间的指令
    • DB:定义字节数据,每个字节占用内存。
    • DW:定义字数据,每个字占用内存(通常 2 字节)。
    • DS:定义存储空间,按指定字节数分配内存。
 
 
Loading...
Z_cosy
Z_cosy
浙江大学电气工程学院本科生
公告
🎉Welcome to Z-cosy🎉
-- 食用指南 ---
目前只有课程笔记以及电控学习笔记
陆续会整理更多内容!