ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学 Win32 汇编[8]: 算术运算符、关系操作符、逻辑操作符、高低分离符和移位运算符

2021-04-30 12:03:01  阅读:220  来源: 互联网

标签:Win32 inc lib includelib 运算符 操作符 PrintHex include PrintDec


学 Win32 汇编[8]: 算术运算符、关系操作符、逻辑操作符、高低分离符和移位运算符


算术运算符 名称 优先级
() 圆括号 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 提供的, 都有对应的二进制码, 它们作用在程序运行时.

posted on 2010-04-04 20:10  万一  阅读(3912)  评论(11)  编辑  收藏

标签:Win32,inc,lib,includelib,运算符,操作符,PrintHex,include,PrintDec
来源: https://blog.51cto.com/u_14617575/2745510

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有