0%

汇编语言笔记

基础知识

机器语言

  • 一列二进制数字,转换为高低电平,驱动电子器件,进行运算

  • 每种微处理器,由于硬件设计和内部结构不同,需要用不同的电平脉冲来控制。所以每一种微处理器都有自己的机器指令集,即机器语言

汇编指令

  • 机器语言便于书写的形式
1
2
机器指令:1000100111011000
汇编指令:mov ax,bx

汇编语言的组成

  • 汇编指令:机器码助记符,有对应机器码

  • 伪指令: 由编译器执行,计算机不执行,无对应机器码

  • 其他符号: 如 +-*/等,由编译器识别,无对应机器码

存储器

  • 存放指令和数据
  • 存储单元从 0 开始编号

  • 一个存储单元存储 1 Byte,即 8 bit

CPU 对存储器的读写

  • 总线从逻辑上分为 3 类: 地址总线,控制总线,数据总线

  • 首先通过地址总线发出地址信息,然后通过控制总线发出命令,最后通过数据总线传输数据

CPU的组成

  • 一般由运算器,寄存器,控制器组成

  • 运算器进行信息处理,寄存器存储信息,控制器控制各种期间经行工作

汇编指令

分成数据传送,逻辑计算,和控制流指令三种

数据传送指令

  • mov — 将第二个操作数(可以为寄存器内容、内存中内容)复制到第一个操作数(寄存器或内存)。不能从内存复制到内存
    mov eax, ebx — 将ebx的值拷贝到eax

  • push - 压栈,将操作数压入内存的栈中,主要用于函数调用过程,和 ESP 有关
    push eax — 将eax内容压栈

  • pop - 出栈
    pop edi — pop the top element of the stack into EDI.

  • lea - Load effective address,载入有效地址,将第二个操作数表示的地址载入到第一个操作数中(寄存器)
    lea eax, [var] — var指示的地址载入eax中.

算数和逻辑指令

  • add - Integer Addition,将两个操作数想加,结果存到第一个操作数中
    add eax, 10 — EAX ← EAX + 10

  • sub - Integer Subtraction,第一个操作数减去第二个操作数,结果存到第一个操作数中
    sub al, ah — AL ← AL - AH

  • inc,dec - Increment,Decrement 分别表示自加 1,自减 1
    dec eax — eax中的值自减1.

  • imul - Integer Multiplication,整数相乘指令,它有两种指令格式,一种为两个操作数,将两个操作数的值相乘,并将结果保存在第一个操作数中,第一个操作数必须为寄存器;第二种格式为三个操作数,其语义为:将第二个和第三个操作数相乘,并将结果保存在第一个操作数中,第一个操作数必须为寄存器。
    imul eax, [var] — eax ← eax * [var]
    imul esi, edi, 25 — ESI ← EDI * 25

  • idiv - Integer Division