汇编语言学习(对于8086CPU)
汇编语言学习(对于8086CPU)
前言:学了计算机导论再来学会更好,推荐也学一下计算机组成原理(只学过导论也可以)
这篇笔记没有前置理论知识,不讲历史之类的
直接从汇编开始
CPU寄存器
通用寄存器
-
首先,CPU需要除了ALU(运算)和CU(控制)还需要存储(寄存器)
-
此时,引出我们能够使用的:
- 四个通用寄存器:AX,BX,CX,DX
- 是16位的,也就是4个4位,就是4个16(2^4)进制数
- 他们可以各自分割成2个8位寄存器,为了兼容以前
- 高8位(AH,BH,CH,DH)
- 低8位(AL,BL,CL,DL)
-
8086CPU有16根地址线:
-
- 一次可以处理两种尺寸的数据:
- 字节型数据:8bit——8位寄存器
- 字型数据:16bit——16位寄存器
- 一次可以处理两种尺寸的数据:
前期常用指令及语法
mov(赋值): mov 寄存器 值 mov 寄存器 寄存器
add(加): add 寄存器 值 add 寄存器 寄存器
sub(减): sub 寄存器 值 sub 寄存器 寄存器
jmp:见下面cs:ip寄存器讲解
地址寄存器
-
8086中地址由段地址和偏移地址组成
-
原因是设计问题:
- 地址线多(有20根)
- 但寄存器小(只有16位)
- 怕浪费了地址线,所以提出
-
通过地址加法器算出实际地址
- (段地址 * 16) + 偏移地址 = 物理地址
-
段地址寄存器 偏移地址寄存器 ds sp es bp ss si cs di ip bx
cs:ip寄存器
- 我们知道:一般计算机用指令和数据都用二进制表示,没有区别
- 那计算机该如何区分指令和数据呢
- 此时我们引出cs:ip
- 上面的表中我们可以看到cs是段寄存器,ip是偏移地址寄存器
- 我们此时用cs和ip一起可以指向可以真实的物理地址
- 那么我们规定:cs:ip指向的那个地址存放的是指令
- 此时我们需要一步一步的执行和跳转,那么我们就要控制cs:ip的地址
- 每次执行后ip会自增指令的长度
- jmp语句可以进行对cs:ip进行改变
- jmp的语法:
- jmp cs:ip 例如:jmp 2000:0 修改cs:ip两个
- jmp 寄存器 例如:jmp ax 修改ip一个
内存
- 一个“字型”数据存放在内存中,可以由 “2个” “连续的” 地址内存单元组成
- 高地址存放“字型”的高位“字节”
- 低地址存放“字型”的低位“字节”
例如:一个虚拟的地址空间
地址 | 值 |
---|---|
0 | 10H |
1 | 05H |
2 | 2EH |
3 | 3AH |
此时:
0的字节型是10H,0的字型是0510H
2的字节型是2EH,2的字型是3A2EH
1的字节型是05H,1的字型是2E05H
可以使用ds段地址寄存器来使寄存器访问内存的数据
例如:
mov bx,1000H
mov ds,bx
mov ax,ds:[0] mov ds:[0],ax
栈
- 栈是一段连续的内存单元,也就是一段连续的内存地址
- 栈的访问形式是后进先出(LIFO)
- 通过改变栈顶标记进行入栈出栈
- 使用ss:sp寄存器进行组合
- 指令:只能操作字型数据或者16位寄存器,操作的都是ss:sp的数据
- push:入栈 例如:push ax
- pop: 出栈 例如:pop ax
未完
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~