在源程序语句格式的 4 个组成部分中,参数是指令的操作对象(在学习硬指令时被称为操作数),参数之间用逗号分隔 参数根据指令不同可以没有,可以有 1 个、 2 个或多个 汇编语言程序中,指令参数有数值型,它的主要形式是常数和数值表达式; 硬指令的操作数有立即数;立即数就要用数值型参数表达
1. 常数 常数(常量)表示一个固定的数值 它又分成多种形式: ( 1 )十进制常数 ( 2 )十六进制常数 ( 3 )二进制常数 ( 4 )八进制常数 ( 5 )字符串常数 ( 6 )符号常数 十进制常数 由 0 ~ 9 数字组成,以字母 D 或 d 结尾 缺省情况下,后缀 D 或 d 可以省略 汇编语言大小写不敏感, D 和 d 通用 例如: 100 、 255D 由 0 ~ 9 、 A ~ F 组成,以字母 H 或 h 结尾 以字母 A ~ F 开头的十六进制数,前面要用 0 表达,以避免与其他符号混淆 汇编语言大小写不敏感, H 和 h 通用 例如: 64H 、 0FFh 、 0B800H 二进制常数 由 0 或 1 两个数字组成,以字母 B 或 b 结尾 汇编语言大小写不敏感, B 和 b 通用 例如: 01101100B 八进制常数 由 0 ~ 7 数字组成,以字母 Q 或 q 结尾 汇编语言大小写不敏感, Q 和 q 通用 例如: 144Q 各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数 MASM 提供基数控制 .RADIX 伪指令可以改变默认进制,其格式是: .RADIX n 字符串常数 用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的 ASCII 码的值 例如: 'd' = 64H 'AB'= 4142H ‘1'= 31H 'Hello, Everybody !' 符号常数 利用一个标识符表达的一个数值 ,MASM 提供等价机制,用于常量定义 符号定义伪指令: 等价 EQU 伪指令 符号名 EQU 数值表达式 符号名 EQU < 字符串 > 等号 = 伪指令 符号名 = 数值表达式 常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性 符号定义 DosWriteChar equ 2 CarriageReturn = 13 CallDOS equ <int 21h> 符号应用(左边程序段等价右侧的符号形式) mov ah,2 ;mov ah,DosWriteChar mov dl,13 ;mov dl,CarriageReturn int 21h ;CallDOS
2. 数值表达式 数值表达式一般是指由运算符连接的各种常数所构成的表达式 , 汇编程序在汇编过程中计算表达式,最终得到一个数值,程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性 MASM 对除伪指令外各种汇编时处理的指令统称为操作符( Operator ) 运算符 算术运算符: + - * / MOD 逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE 高低分离符 HIGH LOW HIGHWORD LOWWORD 算术运算符: • 实现加、减、乘、除、取余的算术运算 mov ax,3*4+5 ; 等价于 mov ax,17 • 其中 MOD 也称为取模,它产生除法之后的余数,如 19 mod 7 = 5 • 加 + 和减 - 运算符还可以用于地址表达式 • 除加、减外,其他运算符的参数必须是整数
逻辑运算符: • 实现按位相与、相或、异或、求反的逻辑运算 or al,03h AND 45h ; 等价于 or al,01h
移位运算符: • 实现对数值的左移、右移的逻辑操作;移入低位或高位的是 0 • 格式为: 数值表达式 SHL/SHR 移位次数 mov al,0101b SHL (2*2) ; 等价于 mov al,01010000b
关系运算符: • 用于比较和测试符号数值 • MASM 用 0FFFFH (补码 -1 )表示条件为真 • MASM 用 0000H 表示条件为假 mov bx,((PORT LT 5)AND 20)OR((PORT GE 5)AND 30) ; 当 PORT<5 时,汇编结果为 mov bx,20 ; 否则,汇编结果为 mov bx,30
高低分离符: • 取数值的高半部分或低半部分
3. 运算符的优先级 1 () <> [] · LENGTH SIZE WIDTH MASK 2 PTR OFFSET SEG TPYE THIS : 3 HIGE LOW 4 * / MOD SHL SHR 5 + - 6 EQ NE GT LT GE LE 7 NOT 8 AND 9 OR XOR 10 SHORT 建议采用圆括号“()”显式表达,它可以极大地提高程序的可阅读性
4. 地址型参数 汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等) 硬指令的操作数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达
|