上一课写了N天才写完,幸好N小于10,哈哈。
表达式是程序设计中一个重要的基本概念,由运算符,操作符,括号,常量和一些符号连在一起的式子,在汇编语言中表达式分为:数值表达式,地址表达式。
一 进制伪指令RADIX
伪指令RADIX用来设置整数的缺省机制,宏汇编开始时所默认的整数进制为10进制,格式如下:
.RADIX exp
伪指令要用.开始,exp是[2-16]之间的一个数字。
该伪指令指定的是默认进制,但是如果一个整数已经指定了进制,比如后缀h,则使用指定的进制,在源文件中,可以使用多个.RADIX改变其后整数的进制,但是为了避免代码混乱,不提倡这样做。
如:
.radix 8
B1 DB 10, 11, 12 ;这三个数都是八进制
DB 10D ;这个数是10进制
.radix 10
MOV AX, 1234 ;1234是十进制数
MOV AX, 1234H ;1234H是十六进制
一个容易混淆的地方:
.radix 16
DW 90D, 101B
哈哈 90D和101B是不是10进制和二进制呢? 按照后缀优先的规则,90D, 101B分别是10进制和二进制。
二 数值表达式
数值表达式是在汇编过程中能够由汇编程序确定其值的表达式,其组成部分在汇编时就能完全确定。所以它们是一些常量的运算组合。
1 常量
常量是一个立即数,直接写在汇编语句中,在程序的执行过程中,它不可能发生变化。一般用二进制 八进制 十进制 十六进制来书写。
在程序中还可以用.RADIX来改变数据的基数。
2 算术运算符
算术运算符包括正负号, + - * / 和 MOD(取模)。这些运算符和常量,括号,可以组成数值表达式。
比如 123 * 345 mod 3
3 关系运算符
关系运算符包括符号:EQ(相等),NE(不等),LT(小于),GT(大于),LE(小等于)和GE(大等于)。这些关系运算符和常量,括号也能组成数值表达式。
如果关系不成立,该数值表达式的结果是0,否则是0FFFFH。
如 120H LT 100H+3 的结果就是0
4 逻辑运算符
逻辑运算符包括按位操作符和移位操作符。
包括AND(逻辑与),OR(逻辑或),NOT(逻辑非),XOR(异或),SHL(左移位)和SHR(右移位)。
这些逻辑运算符和常量,括号可以组成数值表达式。
比如 1 SHL 3的结果是8。
5 表达式的其他操作符
在汇编语言中还有一些其他的操作符。
HIGH(高8位) LOW(低8位)
SEG(段地址) OFFSET(偏移量)
TYPE(标识符类型) LENGTH(变量长度) SIZE(变量容量)
WIDTH(记录/记录字段宽度) MASK(记录/记录字段的屏蔽位)
以上的几个操作符,只有HIGH和LOW以前没介绍过,他们的作用是选取表达式结果的高8位和低8位,使用格式如下:
HIGH 表达式
LOW 表达式
如:
HIGH (1234H + 100H)结果是13H
6 运算符和操作符的优先级
在汇编语言中的优先级如下:
LENGTH SIZE WIDTH MASK () [] . <>
PTR SEG OFFSET TYPE THIS :
* / MOD SHL SHR
HIGH LOW
+ -
EQ NE LT LE GT GE
NOT
AND
OR XOR
SHORT
三 地址表达式
地址表达式是计算存储单元地址的表达式,可由标号,变量名和由括号括起来的基址或变址寄存器组成。计算结果表示一个存储单元的地址,而不是该存储单元的值。
比如
B1 DB 11H,12H
MOV AX, B1 + 1 ;此时AX中存储的是12H的地址值
MOV BX, [B1 + 1] ;此时BX中是12H
MOV CX, [B1] + 1 ;此时CX中是13H
表达式是程序设计中一个重要的基本概念,由运算符,操作符,括号,常量和一些符号连在一起的式子,在汇编语言中表达式分为:数值表达式,地址表达式。
一 进制伪指令RADIX
伪指令RADIX用来设置整数的缺省机制,宏汇编开始时所默认的整数进制为10进制,格式如下:
.RADIX exp
伪指令要用.开始,exp是[2-16]之间的一个数字。
该伪指令指定的是默认进制,但是如果一个整数已经指定了进制,比如后缀h,则使用指定的进制,在源文件中,可以使用多个.RADIX改变其后整数的进制,但是为了避免代码混乱,不提倡这样做。
如:
.radix 8
B1 DB 10, 11, 12 ;这三个数都是八进制
DB 10D ;这个数是10进制
.radix 10
MOV AX, 1234 ;1234是十进制数
MOV AX, 1234H ;1234H是十六进制
一个容易混淆的地方:
.radix 16
DW 90D, 101B
哈哈 90D和101B是不是10进制和二进制呢? 按照后缀优先的规则,90D, 101B分别是10进制和二进制。
二 数值表达式
数值表达式是在汇编过程中能够由汇编程序确定其值的表达式,其组成部分在汇编时就能完全确定。所以它们是一些常量的运算组合。
1 常量
常量是一个立即数,直接写在汇编语句中,在程序的执行过程中,它不可能发生变化。一般用二进制 八进制 十进制 十六进制来书写。
在程序中还可以用.RADIX来改变数据的基数。
2 算术运算符
算术运算符包括正负号, + - * / 和 MOD(取模)。这些运算符和常量,括号,可以组成数值表达式。
比如 123 * 345 mod 3
3 关系运算符
关系运算符包括符号:EQ(相等),NE(不等),LT(小于),GT(大于),LE(小等于)和GE(大等于)。这些关系运算符和常量,括号也能组成数值表达式。
如果关系不成立,该数值表达式的结果是0,否则是0FFFFH。
如 120H LT 100H+3 的结果就是0
4 逻辑运算符
逻辑运算符包括按位操作符和移位操作符。
包括AND(逻辑与),OR(逻辑或),NOT(逻辑非),XOR(异或),SHL(左移位)和SHR(右移位)。
这些逻辑运算符和常量,括号可以组成数值表达式。
比如 1 SHL 3的结果是8。
5 表达式的其他操作符
在汇编语言中还有一些其他的操作符。
HIGH(高8位) LOW(低8位)
SEG(段地址) OFFSET(偏移量)
TYPE(标识符类型) LENGTH(变量长度) SIZE(变量容量)
WIDTH(记录/记录字段宽度) MASK(记录/记录字段的屏蔽位)
以上的几个操作符,只有HIGH和LOW以前没介绍过,他们的作用是选取表达式结果的高8位和低8位,使用格式如下:
HIGH 表达式
LOW 表达式
如:
HIGH (1234H + 100H)结果是13H
6 运算符和操作符的优先级
在汇编语言中的优先级如下:
LENGTH SIZE WIDTH MASK () [] . <>
PTR SEG OFFSET TYPE THIS :
* / MOD SHL SHR
HIGH LOW
+ -
EQ NE LT LE GT GE
NOT
AND
OR XOR
SHORT
三 地址表达式
地址表达式是计算存储单元地址的表达式,可由标号,变量名和由括号括起来的基址或变址寄存器组成。计算结果表示一个存储单元的地址,而不是该存储单元的值。
比如
B1 DB 11H,12H
MOV AX, B1 + 1 ;此时AX中存储的是12H的地址值
MOV BX, [B1 + 1] ;此时BX中是12H
MOV CX, [B1] + 1 ;此时CX中是13H