汇编-2 宏汇编语言

宏汇编语言

常量与数值表达式

常量

使用EQU或者=定义常量

确定的数值,主要用于在伪代码中给标量赋初值,或者用作立即寻址中的立即数,还有位移量,比例因子等等作用

数值表达式

数值表达式的最终结果实际上是与常量一样的,因为数值表达式在汇编的过程中就被计算完成了,被替换成了常量

  • 算术操作
    • 加减乘除
    • 取余,取模
    • 左移右移
  • 逻辑操作
    • 逻辑乘法
    • 逻辑加法
    • 按位加法
    • 非运算
  • 关系操作
    • 关系操作后的结果是两个特殊的值
      1. True :0FFFFH
      2. False : 0H

变量,标号与地址表达式

变量

变量是编程时定义在程序中的数据存储单元的名字

变量与常量不同,常量相对而言只是立即数的一个替代品,或者本来就是立即数,常量是没有属性的,而变量有三个属性:

  1. 段属性
  2. 偏移地址属性
  3. 类型属性

变量是通过伪代码来定义的,在定义变量的时候还必须要指明变量的类型属性

1
DB--BYTE,DW--WORD,DD--DOUBLE WORDS,DF--THREE WORDS,DQ--FOUR WORDS,DT--TEN BYTES

而变量还可以被定义为多种类型

  • 数值表达式

  • ASCII字符串–只有使用DB定义变量类型的时候字符串的长度才可以超过两个字节,因此定义字符串一般都是使用DB类型

  • 地址表达式

  • ?–表示所定义的变量还无法确定初值

  • 重复的子句

    1
    使用了 n DUP(表达式)	;整个语句的作用就是把表达式的内容重复n遍
  • 还可以是多种不同类型组成的序列

标号

标号是机器指令语句存放地址的符号表示,也可以是子程序名。

标号也有三种属性:

  1. 段属性–标号所在段的段地址–相对于所属段寄存器的偏移地址
  2. 偏移地址–标号所在段的段首址到该标号所代表的存储单元的字节距离
  3. 标号的类型–NEAR类型与FAR类型
    • NEAR类型表示该标号只能在定义该标号的段内被使用
    • FAR无限制
定义方式
1
2
3
4
5
6
Loop:	mov al,[si]
subs proc far
subs endp

sub2 proc ;默认没有定义类型的话就是为near类型
sub2 endp

地址表达式

地址表达式其实是对地址进行运算,转移等,而不是类似于数值表达式直接变为一个常数

寻址方式均是地址表达式:

  1. 寄存器寻址
  2. 寄存器间接寻址
  3. 变址寻址
  4. 基址加变址寻址
  5. 立即寻址
  6. 直接寻址

如果地址表达式中出现了变量和标号,那么是取它们的偏移地址来进行运算而不是用内容进行运算!

1.属性定义算符
  1. 类型运算符 PTR
  2. 定义类型运算符 THIS
2.属性分离算符
  1. 取段址算符 SEG
  2. 取偏移地址算符 OFFSET
  3. 取类型算符 TYPE,这个运算符返回的是一个值,即操作数的类型的字节数,如果是标号,那么就返回0FFFFH
3.其他算符
  1. 获取存储单元个数运算符 LENGTH
  2. 获取变量所含数据存储空间大小运算符 SIZE=>(LENGTH 变量)*(TYPE 变量)
  3. 字符分离运算符 HIGH LOW

常用机器指令语句

机器指令大全

Author: TankNee
Link: https://www.tanknee.cn/2019/11/16/assembly_2/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.