asm

  1. 机器码复杂多变,很难掌握,于是出现了汇编
  2. 助记符=汇编语言
  3. 机器码与汇编 之间可以互相转换
  4. 16位汇编原汁原味
  5. 32位汇编更像C语言
  6. 16位汇编只能在xp上运行

寄存器

通用寄存器

保存临时变量

通用寄存器名称缩写用途
AX16累加器--
BX16基址寄存器--
CX16计数器--
DX16数据寄存器--
SP16栈指针栈顶
BP16栈指针栈底
SI16原变址寄存器--
DI16目的地址寄存器--

IP:下一行指令的地址

AX: 高8位ah,底8位al

CX: 高8位ch,底8位cl

DX: 高8位dh,底8位dl

BX: 高8位bh,底8位bl

段寄存器

保存代码块相关的临时变量

段寄存器位数名称原名
CS16代码段code
DS16数据段data
ES16额外段extra
SS16栈段stack

flag 16位 标识寄存器

debug

-d

display 缩写

  1. 显示 机器码与对应的 内存地址
  2. -d 内存地址 调转到对应的内存地址

-u

unassembling 缩写

  1. 反汇编
  2. 机器码->助记符(汇编语言)
  3. 查看指定地址 的汇编

寄存器:cpu的内部存储单元

中断: cpu调用函数的机制

-d

-d 以16进制形式查看内存

-r

register 寄存器

查看所有寄存器的值

  1. 16位汇编每个寄存器 16位
  2. 可以查看一些函数的中间值
  3. 可以查看 cpu即将执行的下一行指令
-r    查看所有寄存器的值
-r ax 直接修改ax寄存器的值

-p

step 单步步过
直接跳到 中断结束后

-t

trace 单步步入
会进入 中断

-g

-g          直接运行,后让程序直接运行不再调式
-g 地址     直接运行,遇到该地址时停止

-a

在指定地址 写汇编代码"汇编代码形式"

-e

给一个初始地址 修改后面的 机器码/字符串

  1. 用于写字符串
  2. 用于直接写机器码

debug保存文件

-n:指定文件名/路径 ---英文
-w:指定写入文件的地址和执行写入文件

-n C:\test\t.com
-w

指令拆分

mov ah, 66
mov cl, 88


B 4 66
B 1 88
B mov
  4 ah
  1 cl

B144

cpu的设计

cpu执行指令的步骤

A((取指令)) --> B((译码))
B --> C((取源操作数))
C --> D((执行))
D --> E((写回))

cpu会乱序执行

虽然代码看起来是顺序执行的
但实际上cpu是乱序执行的
只是实现了类似同步的操作

add ax, cx
sub cx, 6
add bx, 5

流水线设计的目的:硬件的利用率最大化

Last modification:December 17, 2018
如果觉得我的文章对你有用,请随意赞赏