【RT-Thread学习笔记】80x86汇编基础的三大块知识

1 前言 搞计算机的肯定听说过80x86,至少你的汇编基础课程肯定是基于80x86系统来学习的。
x86或80x86是英特尔intel首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以数字来表示,并以“86”作为结尾,包括intel 8086、80186、80286、80386以及80486,因此其架构被称为“x86”。由于数字并不能作为注册商标,因此intel及其竞争者均在新一代处理器使用可注册的名称,如pentium。现时intel把x86-32称为ia-32,全名为“intel architecture, 32-bit”。
“x86”是intel和其他几家公司处理器所支持的一组机器指令集,它大致确定了芯片的使用规范。从8086到80186、80286、80386、80486,再到后来的奔腾系列以及现在的多核技术,都是使用一脉相承的x86指令集,既不断扩展又向后兼容。
更多介绍,请参考百度百科。
2 80x86知识图谱 本文先列个大纲,后续有时间再补充。
3 80x86汇编基础三大块 这里整理了80x86汇编中非常基础的三大块知识,了解了这三大块内容基本可以看懂甚至编译一些简单的汇编程序。
3.1 寻址方式 80x86的寻址方式就是表示指令中数据所在地址的方式。一共有七种寻址方案:立即数寻址、寄存器寻址、直接寻址、寄存器直接寻址、寄存器相对选址、基址变质寻址、相对基址变质寻址。
3.1.1 立即数寻址 / 寄存器寻址 ​ mov ax, 1; ax = 1
​ 立即数寻址,我觉得称不上寻址,因为他给出的不是地址,而就是实际的数字,上面的命令中 1 就是立即数,而ax就是寄存器寻址所以寄存器寻址就是直接使用寄存器,数据直接存入指定的寄存器
​ 寄存器寻址可以使用的寄存器是ax(al ah) bx(bl bh) cx(cl ch) dx(dl dh) si di sp bp等, 这些寄存器可以任意组合,举例如下
mov ax, bx; ax = bx
mov bx, ax; bx =ax
mov si, di; si = di
mov di, si; di = si
​ 这两种寻址方式是不涉及内存的操作的,所以速度是最快的,所以为了性能考虑应该尽量多的使用这两种寻址方式的操作。
注意: mov 1, ax 是非法的,应为1就是常数,你不能给常数赋值
3.1.2 直接寻址 mov ax, [1234h]
mov ax, es:[1234h]
直接寻址就是直接给出内存地址的寻址方式,格式是 段寄存器:[偏移地址] 偏移地址是立即数,用[]括起来。当然也可以直接省去前面的段寄存器写作 [偏移地址],这样汇编会自动选择一个默认的段地址,一般来说是ds段寄存器。前面讲过内存地址是 段地址x16+偏移地址,所以使用段寄存器:[偏移地址] 给出的地址就是 段寄存器的值x16 + 偏移地址,
举例
mov ax, ds:[1234h]
这句话的就是将dsx16+1234h处的数据复制给ax寄存器,假设ds=5000h 那么就是将内存51234处的数据复制给ax,具体是多少就要看当时内存中是什么数据了。
mov ax, es:[1234h]
就是显示指定了使用的es段寄存器,所以就是将esx16+1234h处的数据复制给ax
注意 :前面只能跟着段寄存器 ds es ss cs寄存器
这一条寻址方式其实是最基础的寻址方式,接下来的其他几种寻址方式都是只是[]中偏移地址的表示方式发生了一些变化而已。
3.1.3 寄存器直接寻址 / 基址寻址 mov ax, [bx]
mov ax,cs:[bx]
本质上和直接寻址是没太大区别的,唯一的区别就是在直接寻之中[]中的数据是直接给出的,但是在寄存器间接寻址中这个数字是存储在寄存器中而已。
这里有个限制就是[] 中能使用的寄存器只有 bx bp si di ,如果使用的是bx si di则默认的段寄存器是ds,如果是bp寄存器则默认使用ss寄存器。
当然如果特意指定寄存器那么就用指定的寄存器。
举例 ax =1 bx = 1111h ds = 5000h
mov ax, [bx] ; 等于mov ax,ds:[1111h] 就是将51111h内存出的数据复制到ax中
3.1.4 寄存器相对寻址 / 相对基址寻址 mov ax, [bx + 1111h]
在寄存器直接寻址的基础上加上立即数,其他规则还是和寄存器直接寻址一样的
举例 ax =1 bx = 2222h ds=5000h
mov ax, [bx + 1111h] ; 等于 mov ax, ds:[2222h + 1111h] => mov ax, ds:[3333h]
### 3.1.5 基址变址寻址
mov ax,[bx+si]
基址变址寻址就是用了两个寄存器 {bx/bp}+{si/di}, 如果是出现bp寄存器则默认使用ss寄存器,否则默认使用ds寄存器.规则和寄存器间接寻址也是一样的。
要注意的是这里分为两组了寄存器 bx/bp 和si/di,一组中只能出现一个,即不能出现[ bx+bp ] 和 [si+di],从名字中就可以看出的 基址+变址,
bx 基地址寄存器
bp 基址指针寄存器(base point)
si 源地址寄存器(source index)
di 目的地址寄存器(destination index)
举例 ax =1 bx=1111h si=2222h ds= 5000h
mov ax,[bx+si]; 等于 mov ax, ds:[bx+si] => mov ax, ds:[1111h+2222h] => mov ax, ds:[3333h]
### 3.1.6 相对基址变址寻址
 mov ax,[bx+si+4444h]
 可以看出就是在基址变址寻址的基础上加上了立即数其他规则不变
 举例 ax =1 bx=1111h si=2222h ds= 5000h
mov ax,[bx+si+4444h]; 等于 mov ax, ds:[bx+si+4444h] => mov ax, ds:[1111h+2222h+4444h] => mov ax, ds:[7777h]
3.2 寄存器的用途 80x86 cpu 中寄存器总共为 14 个,且均为 16 位 。
即 ax,bx,cx,dx,sp,bp,si,di,ip,flag,cs,ds,ss,es 共 14 个。
而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。
3.2.1 通用寄存器: ax,bx,cx,dx 称作为数据寄存器:
ax (accumulator):累加寄存器,也称之为累加器;
bx (base):基地址寄存器;
cx (count):计数器寄存器;
dx (data):数据寄存器;
sp 和 bp 又称作为指针寄存器:
sp (stack pointer):堆栈指针寄存器;
bp (base pointer):基指针寄存器;
si 和 di 又称作为变址寄存器:
si (source index):源变址寄存器;
di (destination index):目的变址寄存器;
3.2.2 控制寄存器: ip (instruction pointer):指令指针寄存器;
flag:标志寄存器;
3.2.3 段寄存器: cs (code segment):代码段寄存器;
ds (data segment):数据段寄存器;
ss (stack segment):堆栈段寄存器;
es (extra segment):附加段寄存器;
3.3 汇编指令 由于80x86的指令非常多,本文仅列举常见的一些汇编指令,更多的指令格式,请参考其他资料。
从功能分类上来说,一共可分为
数据传送指令:mov、xchg、lea、lds、les、push、pop、pushf、popf、cbw、cwd、cwde。 算术指令:add、adc、inc、sub、sbb、dec、cmp、mul、div、daa、das、aaa、aas。 逻辑指令:and、or、xor、not、test、shl、sal、shr、sar、rcl、rcr、rol、ror。 控制转移指令:jmp、jcc、jcxz、loop、loopz、loopnz、loopne、call、ret、int。 串操作指令:movs、lods、stos、cmps、scas。 标志处理指令:clc、stc、cld、std。 4 更多分享 欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。
同时也非常欢迎关注我的专栏:有问题的话,可以跟我讨论,知无不答,谢谢大家。
5 参考链接 80x86寻址方式 80x86寄存器 80x86指令 以上参考资料,由本人整理,但来源于网络,侵删!

自动驾驶路径规划技术之A-Star算法
AP5186三功能LED降压型恒流芯片
mophie 30W PD快充充电器详细拆解
不惜一切代价发展芯片 为什么会是危险的?
为部署下一代网络 诺基亚与中国移动签10亿欧元的框架协议
【RT-Thread学习笔记】80x86汇编基础的三大块知识
紧随宁德时代步伐,科达利加速宜宾结构件项目
FS-ZD/E再启动控制器
炬芯科技入选2023 中国IC设计Fabless 100 排行榜之TOP 10无线连接公司
将220V AC电源转换为+12V和-12v直流电源的步骤
OPPO Find X3 或将搭载全新双主摄镜头 支持3K+高刷屏
点击获取23周年策划案.ppt
基于激光照明的短波红外成像系统设计
北京某数据中心柴油机起火,数据中心运维管理敲响了安全警钟
韩国的区块链政策你了解吗
北斗定位:单频北斗三号定位模块与双频北斗三号定位模块介绍
美国MQ-9无人机测试先进雷达探测系统
3D NAND Flash技术发展到极限,5年内利润空间恐压缩至零
基于FLEX10K100A FPGA实现信道编码系统的设计
飞剪机轴磨损原因及修复方法