asm
- 机器码复杂多变,很难掌握,于是出现了
汇编
- 助记符=汇编语言
- 机器码与汇编 之间可以互相转换
16位
汇编原汁原味32位
汇编更像C语言16位
汇编只能在xp上运行
寄存器
通用寄存器
保存临时变量
通用寄存器 | 名称 | 缩写 | 用途 |
---|---|---|---|
AX | 16 | 累加器 | -- |
BX | 16 | 基址寄存器 | -- |
CX | 16 | 计数器 | -- |
DX | 16 | 数据寄存器 | -- |
SP | 16 | 栈指针 | 栈顶 |
BP | 16 | 栈指针 | 栈底 |
SI | 16 | 原变址寄存器 | -- |
DI | 16 | 目的地址寄存器 | -- |
IP
:下一行指令的地址
AX
: 高8位ah
,底8位al
CX
: 高8位ch
,底8位cl
DX
: 高8位dh
,底8位dl
BX
: 高8位bh
,底8位bl
段寄存器
保存代码块相关的临时变量
段寄存器 | 位数 | 名称 | 原名 |
---|---|---|---|
CS | 16 | 代码段 | code |
DS | 16 | 数据段 | data |
ES | 16 | 额外段 | extra |
SS | 16 | 栈段 | stack |
flag
16位 标识寄存器
debug
-d
display 缩写
- 显示 机器码与对应的 内存地址
-d 内存地址
调转到对应的内存地址
-u
unassembling 缩写
- 反汇编
- 机器码->助记符(汇编语言)
- 查看指定地址 的汇编
寄存器:cpu的内部存储单元
中断: cpu调用函数的机制
-d
-d 以16进制形式查看内存
-r
register 寄存器
查看所有寄存器的值
- 16位汇编每个寄存器 16位
- 可以查看一些函数的中间值
- 可以查看 cpu即将执行的下一行指令
-r 查看所有寄存器的值
-r ax 直接修改ax寄存器的值
-p
step 单步步过
直接跳到 中断结束后
-t
trace 单步步入
会进入 中断
-g
-g 直接运行,后让程序直接运行不再调式
-g 地址 直接运行,遇到该地址时停止
-a
在指定地址 写汇编代码"汇编代码形式"
-e
给一个初始地址 修改后面的 机器码/字符串
- 用于写字符串
- 用于直接写机器码
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
流水线设计
的目的:硬件的利用率最大化