宏汇编语言的基本语法

常数、变量和标号

1、常数

(1)二进制数:以字母B结尾的由一串 ‘0’ 和 ‘1’ 组成的序列。

(2)八进制数:以字母o或Q结尾,由若干个0到7的数字组成的序列

(3)十进制数:由若干0到9的数字组成的序列,可以以字母D结尾,也可以省略字母D。

(4)十六进制数:以字母H结尾。且必须以数字开头。例如:0B3FH

(5)字符串常数:用引号括起来的一个或多个字符。这些字符以ASCII码形式存在内存中。

2、变量(偏移量的标号)

变量的三个属性:

        (1)段属性(SEGMENT):表示变量所在段的段首地址

        (2)偏移属性(OFFSET):表示变量的偏移地址

        (3)类型属性(TYPE):表示变量占用存储单元的字节数。类型:字节,字,双字等。

3、标号

表示一条指令所在的地址,也是指令语句的地址符号,常用作转移指令的操作数,即目的地址、

通常由字母数字串组成,但第一个字符必须为字母。最多允许使用31个字符,且可以使用下划线。

运算符和表达式

1、算数运算符:+、-、*、/、MOD(求余)、SHL(左移)、SHR(右移)

2、逻辑运算符:AND、OR、XOR、NOT。只适用于对常熟操作。

3、关系运算符

包括:EQ(相等)、NE(不相等)、LT(小于)、GT(大于)

        LE(小于或等于)、GE(大于或等于)

结果:若关系为假(不成立),结果为0;

        若关系为真(成立),结果为0FFH或0FFFFH

4、分析操作符(数值返回运算符)

(1)取地址的偏移量

        格式:OFFSET  变量名或标号

        功能:取变量名或标号所在段的段内偏移量

(2)取段基址

        格式:SEG  变量名或标号

        功能:取变量名或标号所在段的段首地址。

(3) 求变量名或标号的类型值

        格式:TYPE  变量名或标号

        功能:返回一个数字值。若TYPE加在变量名前,则返回该变量的类型属性;若加在标号前,返回该变量的距离属性。

(4)求长度

        格式:LENGTH  变量名

        功能:返回一个变量名所占存储单元(字节、字或双字)的数目。若变量是用重复定义子句说明的,则返回DUP前面的数值;其余返回1.

(5)求大小

        格式:SEZE  变量名

        功能:返回变量名所占存储单元的字节数,它等于LENGTH和TYPE两个运算返回值的乘积。

 5、综合运算符

(1)PTR运算符

        格式:类型  PTR  表达式

        功能:用于指出变量、标号或地址表达式的类型属性,新的类型只在当前指令内有效。

eg: MOV  BYTE  PTR [DI],4; 指明目的操作数为字节类型。

(2)THIS运算符

        格式:THIS  类型

        功能:把它后面指定的类型或距离属性赋给当前的变量、标号或地址表达式。

6、其他运算符

(1)HIGH和LOW运算符

        格式:HIGH  表达式

                LOW  表达式

        功能:从运算对象中分离出高字节或低字节。

(2)SHORT运算符

        格式:SHORT  标号

        功能:当转移的目标地址与本转移指令的下一条指令之间的字节距离在-128~127范围时,可以用SHORT运算符进行说明。

### 汇编语言基本语法入门 汇编语言是一种低级编程语言,其语句可以直接映射到硬件的操作上。以下是汇编语言的一些基础概念和语法结构: #### 1. 汇编语言语句的构成 每条汇编语言语句通常遵循以下通用格式: ```plaintext [label] mnemonic [operands] [;comment] ``` - **Label**: 这是一个可选字段,用于标记特定位置以便后续跳转或其他用途[^1]。 - **Mnemonic (助记符)**: 表示具体的指令操作,例如 `MOV`(移动数据)、`ADD`(加法运算)等[^1]。 - **Operands (操作数)**: 提供给指令的具体参数或目标地址等内容[^1]。 - **Comment (注释)**: 注释部分以分号开头,帮助程序员理解代码逻辑。 #### 2. 类型分类 汇编语言中的语句可以分为三类: - **可执行指令**: 它们定义了CPU要执行的实际动作。每一个这样的命令都会被翻译成一条对应的机器码[^1]。 - 示例: ```asm MOV AX, BX ; 将寄存器BX的内容复制到AX中 ADD CX, DX ; 把DX里的数值加上CX并存储回CX里 ``` - **伪指令/汇编指示符**: 不会转化为任何实际运行时行为,而是指导汇编器如何处理源文件或者设置某些属性[^1]。 - 常见例子有 `.MODEL`, `.STACK`, 和 `ENDP`. - **定义**: 是一种简化重复性工作的工具,在预处理阶段展开成为多行常规汇编代码[^1]。 - 使用方法如下所示: ```asm MACRO_NAME macro param1,param2,...paramN ... ENDM ``` #### 3. 学习意义 尽管现代开发很少直接采用汇编编写应用层软件,但它对于深入探索计算原理至关重要[^2]。通过掌握汇编知识,不仅可以提高对其他高级语言的理解程度,而且还能涉足诸如操作系统内核调试、嵌入式设备控制等领域的工作。 ```asm section .data ; 数据段声明 msg db 'Hello world!',0xA ; 字符串初始化 len equ $ - msg ; 计算字符串长度 section .text ; 文本(代码)段开始 global _start ; 全局入口点指定 _start: mov edx,len ; 参数加载至EDX——消息长度 mov ecx,msg ; 参数加载至ECX——指向消息首字符指针 mov ebx,1 ; 文件描述符标准输出(STDOUT_FILENO=1) mov eax,4 ; sys_write调用编号设定为4 int 0x80 ; 中断触发Linux系统服务请求 mov eax,1 ; 准备退出进程(sys_exit), 设置EAX值为1 xor ebx,ebx ; 清零EBX作为返回状态码 int 0x80 ; 再次中断完成终止流程 ``` 上述实例展示了利用GNU Assembler(GAS)风格书写的简单程序片段来打印"Hello world!"信息流经标准输出接口的过程演示[^1]. 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值