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