好吧,已经隔了两天,下完班看了两天,在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统;
这个第二天应该是称为第二章更为合适,目前第二章已经看完,基本的命令也是敲了敲;
下面就进行一些汇总叭
嵌入式软件学习笔记 - 第二章:汇编语言基础
1. 概述
本章主要介绍了8086CPU的寄存器架构和基本的汇编指令。以下内容基于学习心得和网络资料汇总。
2. 主要组件
- 运算器:负责数据处理。
- 控制器:控制各个硬件部件的工作。
- 寄存器:用于信息存储。
3. 寄存器
8086CPU使用14个寄存器,分为以下几类:
通用寄存器:
- AX(累加器):主要用于算术运算和逻辑运算。
- BX(基址寄存器):用于存储内存地址。
- CX(计数器):在循环和串操作中用作计数器。
- **DX(数据寄存器)**用于数据传输。
这些寄存器长度为16位,可分成高八位和低八位:
- AH & AL:AX的高八位和低八位。
字在寄存器中的存储:
一个字等于2个Byte(16个bit)。
专用寄存器:
- SI(源变址寄存器)、DI(目的变址寄存器):主要用于串操作。
- SP(堆栈指针):指向堆栈顶部。
- BP(基址指针):用于访问堆栈中的数据。
程序状态字寄存器(PSW):
包含程序执行的状态信息,如是否产生进位等。
段寄存器:
- CS(代码段寄存器)
- SS(段寄存器)
- DS(数据段寄存器)
- ES(附加段寄存器)
CS 和 IP(指令指针寄存器) 一起决定下一条指令的物理地址:
物理地址 = 段地址16 + 偏移地址
物理地址 = CS16 + IP
4. 基本指令
- **ADD AX, BX**:AX = AX + BX
- **MOV BX, 123H**:BX = 123H
- **JMP 段地址:偏移地址**
- **SUB AX, BX**:AX = AX - BX,结果存储在AX中
以上是课本中的知识点;讲的有一些不全面,我们理论上是想清晰的知道这些寄存器都是什么作用;
1)4个16位段地址寄存器
8086对存储器采用分段管理,4个段寄存器分别用于存放4个当前段的起始地址,又称为段基址寄存器。
CS(Code Segment) ——代码段寄存器
DS(Data Segment) ——数据段寄存器
SS(Stack Segment)—— 堆栈段寄存器
ES(Extra Segment)——扩展段寄存器
2)16位指令指针寄存器IP
IP始终指向当前代码段CS所要取出的下一条指令的地址。
每取出一个字节指令后,IP自动加1。
可以用转移指令、调用指令及中断和复位等改变IP值。
3)4个16位数据寄存器
AX、BX、CX、DX,可以分为8个8位寄存器使用:
AH、AL、BH、BL、CH、CL、DH、DL
数据寄存器用于存放操作数及中间结果
举个例子:
BX任意时刻的内容都=高八位BH,低八位BL(对于其他同理)
4)4个16位地址指针寄存器
地址指针寄存器用于存放操作数的地址,编程时通过修改寄存器的内容达到修改地址的目的
SP(Stack Pointer)——堆栈指针寄存器 指示堆栈段中的栈顶位置,专门用于数据进栈和出栈的位置指示,只能与SS配对使用
BP(Base Pointer)——基址指针寄存器 指示堆栈段中一个数据区的基址位置,通常与SS配对使用
SI(Sourse Index)——源变址寄存器
DI(Destination Index)——目的变址寄存器
与DS联用,用来确定数据段中某一存储单元的偏移地址。在串处理指令中SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和ES联用,分别达到在数据段和附加段中寻址的目的
**
代表安装DOS的过程
**
大家需要的话,我就发一篇汇编环境搭建的文章。之前装在了笔记本上,现在台式机空荡荡,刚好可以复习一遍。
查看CPU和内存
Debug是DOS,Windows都提供的实模式程序的调试工具。使用它可以查看CPU各种寄存器的内容,内存的情况和在机器码级别跟踪程序的运行
常用Debug功能:
R命令 查看改变寄存器中的内容
D 查看内存中的内容
E 改写内存中的内容
U 将内存中的机器指令翻译成汇编指令
T 执行一条机器指令
A 以汇编的形式在内存中写入一条机器指令
需要自己练习哦!
5. 总结
本章内容为汇编语言学习的基础,对深入理解处理器工作原理和汇编程序编写至关重要。后续将深入学习更多指令和程序设计方法。指令有些繁琐,但是仔细理解下来,敲上几遍感觉也是OK的!原来只是寄存器跳来跳去呀!
附上之前贴在墙上方便看的,“扭曲的笔记”