汇编原理(二)寄存器——CPU工作原理

寄存器:所有寄存器都是16位(0-15),可以存放两个字节

AX,BX,CX,DX存放一般性数据,称为通用寄存器

AX的逻辑结构。最大存放的数据为2的16次方减1。可分为AH和AL,兼容8位寄存器。

:1word = 2Byte。二进制和八进制、十六进制的转化(0000)-(0)。

汇编指令

不区分大小写

"越位"会"丢弃":"丢弃"只是指禁止为不能在8位的寄存器中保存,但是cpu不是真的丢弃这个进位值。

物理地址:内存单元有地址,所有的内存单元构成的储存空间是一个一维的线性空间

16位的cpu:运算器一次最多可以处理16位的数据;寄存器的最大宽度位16位;寄存器与运算器之间的通路是16位。(64位同理)

地址加法器: 物理地址(20位) = 段地址(16位) × 16 + 加偏移地址(16位 )

  1. cpu可以用不同的段地址和物理地址形成同一个物理地址

2.仅通过变化偏移地址来进行寻址,最多可以定位0 - FFFFH,64K个内存单元。 (不太明白各种量度之间的转换)

3.格式:短地址XXXX:偏移地址YYYY。意思是在短地址XXXX的基础上,乘16,加上偏移地址,之间用冒号隔开。

比喻:

:并不是内存被划分位一个一个段,是自己怎么看

一个段的起始地址一定是16的倍数,因为"段地址×16";偏移地址为16位,所以一个段的最大长度为16位

段寄存器:用来存储段地址(CS、DS、SS、ES等)

CS(存放段地址)和IP(存放偏移地址):最关键的寄存器,指示当前CPU要读取指令的地址:CS是代码段寄存器,IP是指令指针寄存器

用CS作为寄存器,代码将会被当作指令,其他三种寄存器则不然,有可能当作数据或其他。

IP怎么知道他每次移动多少?比如说怎么知道从20000到20003?整个工作原理过程还不是很懂

修改CS、IP的指令:传送指令mov不能修改CS、IP的内容,而应该用转移指令jmp。

指令:jmp 段地址:偏移地址。含义:用指令中给出的段地址修改CS,偏移地址修改IP

指令:jmp 某一合法寄存器。含义:仅修改IP的内容,类似于:jmp IP, ax

举例:如果不跳转,IP每次加2或者3。但如果遇到例如 jmp bx,IP变为0,跳转回去。

流程如下:死循环

代码段:将长度为N(<64KB)的一组代码段,存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。

怎么看这个代码段的长度、存储在那一段内存单元、段地址

要将CS:IP指向,所定义的代码段中的第一条指令的首地址

debug调试程序:(后面还需要学)

r:查看、改变CPU寄存器的内容。

d:查看内存中的内容

e:改写内存中的内容(使用机器指令?)

a:以汇编指令的格式在内存中写入一条机器指令 u:将机器指令翻译为湖

相关推荐
small_wh1te_coder7 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
白书宇8 天前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源
浩浩测试一下8 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存
蚰蜒螟9 天前
JVM安全点轮询汇编函数解析
汇编·jvm·安全
要记得喝水14 天前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
技术领导力15 天前
华为开源CANN,再次释放“昇腾转向”信号
汇编
DONG91319 天前
Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
开发语言·汇编·数据结构·python·算法·青少年编程·排序算法
embrace9922 天前
【C语言学习】scanf函数
c语言·开发语言·汇编·学习·青少年编程·c#·编辑器
麦兜*22 天前
【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
java·汇编·jvm·算法·spring cloud·ai·排序算法
会掉头发23 天前
x86_64汇编
汇编