運算符
加法 ADD
Section titled “加法 ADD”add rax, 10 ; 將rax加10遞增 INC
Section titled “遞增 INC”inc rax ; 將rax加1減法 SUB
Section titled “減法 SUB”sub rax, 10 ; 將rax減10遞減 DEC
Section titled “遞減 DEC”dec rax ; 將rax減1乘法 MUL
Section titled “乘法 MUL”乘法的結構如下:
rax 暫存器 rdx:rax被乘數 x 乘數 = 積舉個例子:
mov rax, 1234mov rcx, 10mul rcx假設有數字在rax,而我們每次都要乘以10,事先把10放入一個暫存器,然後每次mul該暫存器即可
暫存器最大64位,但如果兩個滿的64位相乘肯定會溢位,所以積是兩個暫存器併成16 bytes的結構
沒溢位的話積就在rax,超過8 bytes則左邊的數字放在rdx
ex:
rdx rax0x9000000000000004 x 2 = 0x0000000000000012 0x0000000000000008除法 DIV
Section titled “除法 DIV”除法的結構如下
rdx:rax 暫存器 rax rdx被除數 / 除數 = 商 餘數除法同理,被除數是rdx和rax併成的,除數可選暫存器如div rcx
但此處要特別注意,請把rdx清零,否則未超過64位的除法rdx一樣會被帶入運算造成不符預期的結果
邏輯運算的指令跟名稱相同,比如xor就是xor,運算後會將結果存入目標
包含and, or, xor, not
左移 SHL
Section titled “左移 SHL”shl rax, 2 ; 將rax左移兩位相當於乘以4右移 SHR
Section titled “右移 SHR”shr rax, 2 ; 將rax右移兩位相當於除以4有符號數左移 SAR
Section titled “有符號數左移 SAR”sal rax, 2 ; 將rax左移兩位相當於乘以4有符號數右移 SAR
Section titled “有符號數右移 SAR”sar rax, 2 ; 將rax右移兩位相當於除以4循環左移 ROL
Section titled “循環左移 ROL”; al = 10001000rol al, 1 ; 將al左移一位,並從另一端進來; al = 00010001循環右移 ROL
Section titled “循環右移 ROL”; al = 10001000ror al, 1 ; 將al右移一位,並從另一端進來; al = 01000100