我们学习二进制方向肯定是离不开汇编语言的,我接下来会给大家总结一些常用的汇编语言指令,可以让你把大部分汇编代码看懂,差不多就是入个门,想要不忘记,在你刷题时,你可以试着不去看伪代码,我们可以多看看汇编指令,多练习就不会忘了
1.通用寄存器类别
64位:RAX,RBX,RCX,RDX,RBP,RSP,RSI,RDI
32位:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI
16位:AX,BX,CX,DX,SI,DI,BP,SP
8位:AH,BH,CH,DH,AL,BL,CL,DL
当然还有XMM寄存器,EFLAGS寄存器,EIP寄存器等等
2.指令助记符
MOV:传送数值
ADD:数值相加
SUB:数组相减
MUL:数值相乘
JMP:跳转到一个新位置(无条件跳转,后面讲条件语句主包会讲)
CALL:调用一个过程(应该可以理解为调用一个函数)
NOP:空操作符(解E8类花指令需要用到)
3.小端序and大端序
x86处理器中储存方式就是小端序(从低到高)储存和检索数据
放张图片好理解一点
因为有些题目可能会有关
4.CPU状态标志
OV:溢出标志
UP:方向标志
EI:中断标志
PL:符号标志
ZR:零标志
AC:辅助进位标志
PE:奇偶标志
CY:进位标志
5.算数计算(前面讲过的就没讲了)
(1)INC和DEC指令:就是我们非常熟悉的自增自减指令
(2)NEG指令:就是通过将操作符转化成为他的补码从而使他的符号取反
(3)XOR:异或运算,这个是逻辑运算符,不多说,其实就是把两个数都转化为二进制数,然后用来一位一位来对比,不一样的置1,一样的置0
(4)OR:或运算,逻辑运算符不多说了,C语言应该都学过了
(5)AND:与运算
(6)SHR:右移,当然其中有SAR,ROR都是右移,当然有一些区别,SAR是算数右移,也就是右移n位后前面n位置0,ROR是循环右移,也就是说右移的几位会出现在前面,左移不多说,一个原理,指令把最后的R换成L就可以了,还有RCR是带进位的右移,SHRD是双精度的右移,左移同理
#这篇先到这后面会继续发布,如果有问题可以提醒我修改(主包刚入门,知识基础不是特别牢固)