+ +

汇编语言

一些基本知识

什么是汇编语言

简单的来说,汇编语言是一种低级语言。

汇编指令:汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

CPU:中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

内存:内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。

数值表示:二进制:数字后加b;十进制:d;十六进制:h,一般没写的默认为十进制。

字长:bit:最小位;byte(字节):一个字节8位;word:2个字节;dword:4个字节

寄存器:用来暂存指令、数据和地址,一个寄存器可存4个字节,即32位。

寄存器种类介绍:

  1. EAX:存储函数返回值
  2. ECX:循环计数器
  3. EDX:指针
  4. ESP:栈顶
  5. EBP:栈底
  6. ESI:源地址
  7. EDI:目的地址

标志寄存器:一个16位的存放条件标志、控制标志寄存器,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行。
CF:表示进位或借位,针对无符号整数,判断是否超出表达范围等(详情百度,很清晰)

寻址方式:

  1. 立即数寻址:MOV EAX,123H相当于123H=EAX
  2. 寄存器寻址:MOV EAX,EBX相当于EBX=EAX;
  3. 直接寻址:MOV EAX,[12345678H],中括号内为源地址,其指向的数据赋给内存器EAX;
  4. 寄存器间接寻址:MOV EAX,[EBX],EBX所存储数据为源地址,其指向的数据赋给内存器EAX;

    基本指令:
  5. 数据传送:MOV(传送字或字节),PUSH(进栈),POP(出栈),LEA(地址),MOVSX(先符号扩展,再传送),PUSHAD(把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈),POPAD(把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈)
  6. 算术运算:ADD(加),INC(加一),SUB(减法),DEC(),NEG,CMP,MUL,IMUL,DIV,IDIV
  7. 逻辑运算:AND,OR,NOT,XOR(异或),TEST,SHL(逻辑左移),SHR(逻辑右移,低位进CF,高位补0),SAR(算术右移低位进CF,高位不变),ROL(循环左移),ROR,RCL(通过进位的循环左移),RCR
  8. 转移指令:JMP(无条件转移),J[N]Z(E)((不)等于时转移),J[N]B((不)小于转移),JA(大于转移),JL(小于转移),JG(大于转移)
  9. 循环指令:LOOP(不为0时循环),JCXZ(不为0是转移)
  10. 串操作:MOVS[B|W|D](一位一位地赋值),CMPS(比较),SCAS,LODS,STOS,REP
  11. 其他指令:INT,RET,NOP,CLD,CALL