美文网首页
汇编程序基础语法

汇编程序基础语法

作者: Recalcitrant | 来源:发表于2019-08-02 00:05 被阅读0次

汇编程序语法

一、注释

;单行注释

二、变量

1.常量

注意:立即数书写必须以数字开头,若十六进制数第一位为字母,可在前面添加0。

2.变量

  • 变量定义一般格式
变量名 变量类型 表达式
变量类型 描述
DB 定义字节单元(8位)
DW 定义字单元(16位)
DD 定义双字单元(32位)
DQ 定义四字单元(64位)
DT 定义十字节单元(160位)

3.变量属性

变量一旦被定义,就具有以下三个属性:

(1)段属性

表示该变量存放在哪个逻辑段中,变量的段基值可以用SEG运算符获取。

(2)偏移量属性

表示变量所在位置与段起始点之间的字节数,变量的偏移量可以用OFFSET运算符获取。

(3)类型属性

变量的类型属性可以用TYPE运算符获取。

4.变量赋初值

(1)数值表达式

示例:

DATA1 DB 32,30H        ;DATA1的值为32(20H),DATA1+1的值为48(30H)

(2)?表达式

只分配存储空间,初始值为任意值。
示例:

DA-BYTE DB ?,?,?        ;分配三个字节的存储单元,值为任意值

(3)字符串表达式

示例:

STRING1 DB 'ABCDEF'        ;存放顺序:ABCDEF
STRING2 DW 'AB','CD','EF'        ;存放顺序:BADCFE
STRING3 DD 'AB','CD'        ;存放顺序:BA00DC00

注意:两个字符的存放顺序为为前一个字符存放在高地址,后一个字符存放在低地址。
DW和DD伪指令不能用两个以上字符构成的字符串赋初值(即便DD有4个字节的空间),否则将出错。

(4)DUP表达式

DUP成为重复数据操作符,用于批量分配存储空间。

变量 变量类型 重复次数 DUP(重复内容)

三、运算符

1.算术运算符

算术运算符 描述
+
-
*
/ 整除
MOD 求余
SHL 逻辑左移
SHR 逻辑右移
[ ] 下标运算符

注意:移位运算符移位指令不同。
移位运算符的操作对象为具体的数,移位操作在汇编时完成。

NUM SHL 1        ;移位运算符

移位指令的操作对象为寄存器或存储单元,移位操作在程序运行时执行。

SHL NUM,1        ;移位指令

2.逻辑运算符

逻辑运算符 描述
NOT 取反
AND 逻辑乘
OR 逻辑加
XOR 异或

注意:逻辑运算符均为按位运算。

3.关系运算符

关系运算符 描述
EQ 等于
NE 不等于
LT 小于
LE 小于等于
GT 大于
GE 大于等于

注意:关系运算符比较的两个表达式必须同为常数或为同一个逻辑段中的变量。
常量比较,按无符号数进行比较。
变量比较,比较两者偏移量大小
关系运算的结果为真(全1)或假(全0)

4.数值返回运算符

(1)SEG运算符

取变量或标号所在段的段基值。

(2)OFFSET运算符

取变量或标号所在段内的偏移量。

(3)TYPE运算符

取变量或标号的类型属性,返回结果为数字。

变量类型 类型(字节长度)
BYTE 1
WORD 2
DWORD 4
QWORD 8
TWORD 10
标号类型 类型
NEAR -1
FAR -2

(4)LENGTH运算符

变量长度。
若变量用重复数据操作符DUP说明,则length运算取外层DUP给定的值。
若没有用DUP说明,则length运算返回值为1。
示例:

DATA SEGMENT
    K1 DB 10H 
    K2 DB 10H DUP(0)
    K3 DW 20H DUP(0, 1, 2 DUP(0))
    K4 DB 'ABCDEFGH'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
    MOV AL,LENGTH K1        ;AL=10H
    MOV BL,LENGTH K2        ;BL=1
    MOV CX,LENGTH K3        ;CX=20H
    MOV DX,LENGTH K4        ;DX=1
    MOV AH,4CH
    INT 21H
CODE ENDS
END START

(5)SIZE运算符

SIZE运算符只能作用于变量,返回该变量TYPE和LENGTH的乘积。

5.属性修改运算符

对变量、标号或存储器操作数的类型属性进行修改或指定。

(1)PTR运算符

将地址表达式所指定的变量、标号或以其它形式表示的存储器地址的类型属性修改为所指定的类型值。

类型 PTR 地址表达式

注意:此类修改为临时的,作用域为本语句。

(2)HIGH/LOW运算符

将表达式的值分离出高字节和低字节。

HIGH 表达式
LOW 表达式

(3)THIS运算符

四、输入与输出

1.输入

  • 单ASCII码字符输入
MOV AH,01
INT 21H

输入的字符(ASCII码)会保存在AL寄存器中。

2.输出

MOV AH,02
INT 21H

输出DL寄存器中的字符。

五、分支

1.无条件转移指令

指令 说明 执行操作
jmp short 标号 段内直接短转移(IP修改范围-128~127) IP = IP + 8位位移量
jmp near ptr 标号 段内直接近转移(IP修改范围-32768~32767) IP = IP + 16位位移量
jmp word ptr 内存单元地址 段内间接转移 IP = 内存单元地址
jmp far ptr 标号 段间直接远转移 CS = 标号所在段段地址
IP = 标号所在段偏移地址
jmp dword ptr 内存单元地址 段间间接转移 CS = 内存单元地址 + 2
IP = 内存单元地址

2.条件转移指令

指令 转移条件 检查标志位
je == ZF==1
jne != ZF==0
jb < CF==1
jnb >= CF==0
ja > CF==0且ZF==0
jna <= CF==1或ZF==1

六、循环

1.loop

    MOV CX,循环次数
S:  循环体
    LOOP S

LOOP S执行过程:

  • 1.(CX) = (CX) - 1
  • 2.判断CX寄存器中的值,若不为0则跳转至标号S所标识的地址处执行,否则执行下一条指令。

相关文章

  • 汇编程序基础语法

    汇编程序语法 一、注释 二、变量 1.常量 注意:立即数书写必须以数字开头,若十六进制数第一位为字母,可在前面添加...

  • 汇编程序基础

    汇编程序基础 一、汇编程序基本结构 二、汇编指令 1.汇编指令基本结构 三、伪指令 1.段定义 2.数据定义 数据...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • java

    语法基础1.1 java初体验(语法基础)1.2 变量和常量(语法基础)1.2 变量和常量(语法基础)1.4 流程...

  • 软帝学院:80道java基础部分面试题(四)

    Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集...

  • linux0.11内核分析-head

    章节目录 head.s程序被编译后,会被链接成system模块的最前面开始的部分,head.s汇编程序与前面的语法...

  • 快速上⼿ Kotlin

    快速上⼿ Kotlin 基础语法 函数基础语法 与 Java 代码互调 Java 与 Kotlin 交互的语法变化...

  • C语言到汇编-入门

    上一篇已经得到了C语言入门程序对应的汇编程序。C语言程序: 编译后的汇编程序: 先看汇编程序的第一行: 好像没见过...

  • Java面试题知识点

    1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...

  • Java初级面试题

    1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...

网友评论

      本文标题:汇编程序基础语法

      本文链接:https://www.haomeiwen.com/subject/srrhdctx.html