运算符
加法 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