李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一课写了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
posted on 2008-03-18 11:50  coderlee  阅读(566)  评论(0编辑  收藏  举报