zoukankan      html  css  js  c++  java
  • 学 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 提供的, 都有对应的二进制码, 它们作用在程序运行时.

  • 相关阅读:
    WEP编码格式
    OSK VFS read数据流分析
    科学剖析濒死体验 "复生"者讲述"死"前1秒钟
    Android的开发相对于tizen的开发难度
    minix文件系统分析
    贴给小程序(1) 查找第一个0值
    Linux下的QQ
    OSK USB 驱动
    LRU算法之hash+list实现(转)
    插入排序
  • 原文地址:https://www.cnblogs.com/del/p/1704338.html
Copyright © 2011-2022 走看看