算术运算符 | 名称 | 优先级 |
() | 圆括号 | 1 |
+,- | 正、负 | 2 |
*,/ | 乘、除 | 3 |
MOD | 取模 | 3 |
+,- | 加、减 | 4 |
算术运算符示例:
; Test8_1.asm
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
start:
PrintDec 7 + 3 ;10
PrintDec 7 - 3 ;4
PrintDec 7 * 3 ;21
PrintDec 7 / 3 ;2
PrintDec 7 mod 3 ;1
PrintDec 7 / 3 + 4 ;6
PrintDec 7 / (3 + 4) ;1
ret
end start
关系操作符(EQ、NE、LT、LE、GT、GE)示例:
;EQ: 等于
;NE: 不等于
;LT: 小于
;LE: 小于等于
;GT: 大于
;GE: 大于等于
; Test8_2.asm
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
start:
;EQ : =
PrintDec 2 eq 1 ;0
PrintDec 2 eq 2 ;-1
PrintDec 2 eq 3 ;0
;NE : <>
PrintDec 2 ne 1 ;-1
PrintDec 2 ne 2 ;0
PrintDec 2 ne 3 ;-1
;LT : <
PrintDec 2 lt 1 ;0
PrintDec 2 lt 2 ;0
PrintDec 2 lt 3 ;-1
;LE : <=
PrintDec 2 le 1 ;0
PrintDec 2 le 2 ;-1
PrintDec 2 le 3 ;-1
;GT : >
PrintDec 2 gt 1 ;-1
PrintDec 2 gt 2 ;0
PrintDec 2 gt 3 ;0
;GE : >=
PrintDec 2 ge 1 ;-1
PrintDec 2 ge 2 ;-1
PrintDec 2 ge 3 ;0
ret
end start
逻辑操作符(AND、OR、XOR、NOT)示例:
; Test8_3.asm
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
start:
PrintHex 0FFFFFFFFh and 0FFFF0000h ;FFFF0000
PrintHex 0FFFFFFFFh or 0FFFF0000h ;FFFFFFFF
PrintHex 0FFFFFFFFh xor 0FFFF0000h ;0000FFFF
PrintHex not 0FFFF0000h ;0000FFFF
ret
end start
高低分离符(HIGH、LOW、HIGHWORD、LOWWORD)示例:
; Test8_4.asm
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
start:
PrintHex high 1122h ;11
PrintHex low 1122h ;22
PrintHex high 11223344h ;33
PrintHex low 11223344h ;44
PrintHex highword 11223344h ;1122
PrintHex lowword 11223344h ;3344
ret
end start
移位运算符(SHL、SHR)示例:
; Test8_5.asm
.386
.model flat, stdcall
include windows.inc
include kernel32.inc
include masm32.inc
include debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.code
start:
PrintHex 12345678h shl 4 ;23456780
PrintHex 12345678h shl 8 ;34567800
PrintHex 12345678h shr 4 ;01234567
PrintHex 12345678h shr 8 ;00123456
ret
end start
以上运算符(或伪指令)有些和汇编(硬)指令重名, 区别在于它们只用于常数表达式, 并在编译期出结果.
伪指令? (硬)指令?
MASM 的伪指令是 MASM 提供的, 它们告诉编译期如何编译, 其作用在生成 obj 文件之前;
(硬)指令是 CPU 提供的, 都有对应的二进制码, 它们作用在程序运行时.