8086汇编(16位汇编)学习笔记10.寄存器总结

8086汇编(16位汇编)学习笔记10.寄存器总结-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net

寄存器

8086CPU有14个寄存器

它们的名称为:

AX、BX、CX、DX、SI、DI、SP、BP IP**、CS、DS、ES、**SS、PSW

8086CPU所有的寄存器都是16位的,可以存放两个字节。

AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

8086上一代CPU中的寄存器都是8位的;

为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。

H 高位 (8-15) L低位 (0-7)

AX可以分为AH和AL;

BX可以分为BH和BL;

CX可以分为CH和CL;

DX可以分为DH和DL;

1.通用寄存器(AX,BX,CX,DX)

这四个寄存器可以拆分为:高位和低位两部分,当做两个八位寄存器来使用

AX:临时存储,参与乘除法的运算

BX:存储偏移地址来访问内存地址空间

CX:条件转移指令的条件 或 循环语句的判断条件

DX:辅助AX,作临时存储,参与乘除法的运算

2.段寄存器(CS,DS,SS,ES)

8086CPU不支持将数据直接送入段寄存器的操作

CS:代码段寄存器,存储指令的段地址

DS:数据段寄存器,通常用来存放要访问数据的段地址

SS:栈段寄存器,存储栈的段地址

ES:附加段寄存器

IP:指令指针寄存器,用来存储当前指令的偏移地址

CS:IP 指向当前要执行的指令

SP:存放栈的偏移地址

SS:SP 就是指向当前栈的栈顶元素

SI 和 DI 是8086CPU 中和 bx 功能相近的寄存器,si 和 di 不能分成两个 8 位寄存器来使用,用来存储偏移地址

在 8086CPU 中,只有(bx,si,di,bp)这4寄存器可以进行内存单元的寻址

BP:当没有显性的给出段地址,而使用 bp 时,段地址默认在 ss 中

其他没有显性的给出段地址的,均默认在 ds 中

3.标志寄存器

PSW 三个作用:

(1). 用来存储相关指令的某些执行结果;

(2). 用来为CPU执行相关指令提供行为依据;

(3). 用来控制CPU的相关工作方式;

8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。

1.通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个).

数据寄存器分为:

AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.

BH&BL=BX(base):基址寄存器,常用于地址索引;

CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.

DH&DL=DX(data):数据寄存器,常用于数据传递。

他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。

另一组是指针寄存器和变址寄存器,包括:

SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;

BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;

SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;

DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。

这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。

2.指令指针IP(Instruction Pointer)

指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加1,指向下一个指令字节。注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

3.标志寄存器FR(Flag Register)

8086有一个18位的标志寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。

OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

DF:方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

IF:中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:

(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;

(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

TF:跟踪标志TF。该标志可用于程序调试。TF标志没有专门的指令来设置或清楚。

(1)如果TF=1,则CPU处于单步执行指令的工作方式,此时每执行完一条指令,就显示CPU内各个寄存器的当前值及CPU将要执行的下一条指令。

(2)如果TF=0,则处于连续工作模式。

SF:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

AF:下列情况下,辅助进位标志AF的值被置为1,否则其值为0:

(1)、在字操作时,发生低字节向高字节进位或借位时;

(2)、在字节操作时,发生低4位向高4位进位或借位时。

PF:奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。

CF:进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)

4.段寄存器(Segment Register)

为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:

CS(Code Segment):代码段寄存器;

DS(Data Segment):数据段寄存器;

SS(Stack Segment):堆栈段寄存器;

ES(Extra Segment):附加段寄存器。

寄存器汇总

image.png

通用寄存器

数据寄存器

寄存器描述说明
EAX累加器Accumulator扩展累加寄存器(在乘/除法中被自动调用)Accumulator常用作函数的返回值
EBX基址Base基址寄存器,DS 段中的数据指针。
ECX计数Count常用作 循环计数器,在字符串和循环操作中常用,在循环指令(LOOP)或串操作中,ECX 用来进行循环计数,每执行一次循环,ECX 都会被CPU 自动减一。thiscall 用来保存this指针传参
EDX数据Data常用作 是数据寄存器,用来存放8字长的高32位

指针寄存器

寄存器描述说明
ESP堆栈指针寄存器 Extend Stack PointerSS 段中堆栈指针,专用指向堆栈 栈顶指针,ESP 用来寻址堆栈上的数据
EBP基址指针寄存器Extend Base PointerSS 段中堆栈内数据指针,指向最上面一个栈帧的栈顶的底部,表示数据在堆栈段中的基地址

变址寄存器

寄存器描述说明
ESI源变址 Extend Source扩展源指针(由高速内存数据传送指令使用),字符串操作源指针
EDI目的变址Extend Destination Index扩展目的指针(由高速内存数据传送指令使用),字符串操作目标指针

指令指针寄存器

EIP 指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。指令指针(总是指向下一条要执行的指令地址),不做他用;计算机通过CS:IP寄存器来控制指令序列的执行流程;IP寄存器是一个专用寄存器,不能直接赋值修改;IP 它与代码段寄存器 CS联用,永远存储着即将执行的指令的地址,每执行完一条指令,CPU都会根据CS:IP找到下一条指令,同时IP被赋值为再下一条指令的地址

标志寄存器

标志状态

寄存器描述说明
OF溢出标志Overflow Flag当我们讨论溢出时,讨论的是有符号数;若算数运算的结果有溢出,则OF置1主要针对有符号:以8位数为例,8位的范围是(-128~+127)如果运算结果超出这个范围,就产生了溢出,有溢出,说明有符号数 的运算结果不正确。
CF进位标志Carry Flag当我们讨论进位时,讨论的是无符号数;当运算结果的最高有效位有进位(加法)或借位(减法)是,进位标志位置1;主要针对无符号(无符号位):8位计算 进位作为临时第九位使用;8位存不下,就进位
ZF零标志Zero FlagZF=1:运算结果为0ZF=0:运算结果不为0
SF符号标志Sign Flag运算结果最高位为1,则SF=1,否则SF=0有符号数据用最高位表示符号,所以最高有效位就是符号标志的状态
AF辅助进位标志Auxiliary Carry Flag运算时低半字节由进位或借位时,AF=1
PF奇偶标志Parity Flag当运算结果最低8位中1的个数是偶数或0时 PF=1

控制标志

寄存器描述说明
IF中断标志Interrupt-enable Flag用于控制i外部可屏蔽中断是否可以被处理器响应IF=1 允许中断;IF=0 禁止中断
TF陷阱标志Trap FlagTF=1:用于调试单步操作 TF=0:处理正常工作
DF方向标志Direction Flag1.用于串操作指令,控制地址ide变化方向;CLD Clear Direction 用于复位方向标志 执行后 DF=1

img

段寄存器

寄存器描述说明
CS代码段Code Segment存放当前正在运行的程序代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移量则由IP提供。
SS堆栈段Stack Segment指出当前堆栈的底部地址,即存放堆栈段的段基址。
DS数据段Data Segment指明数据段的起始地址
ES附加段Extra Segment指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。
FS辅助段80386 新增FS寄存器指向当前活动线程的TEB结构FS:[0x30] 指向PEB结构相关资料:https://bbs.pediy.com/thread-159935.htm
GS辅助段80386 新增

系统表寄存器

寄存器描述说明
GDTR全局描述符表寄存器Global Descriptor Table Register保存GDT的地址,在Windbg 可“r gdtr”查看GDT的地址
LDTR局部描述符表寄存器Local Descriptor Table Register保存LDT的地址
IDTR中断描述符表寄存器Interrupt Descriptor Table Register保存IDT的地址 在Windbg 可“r idtr”查看GDT的地址
TR任务状态寄存器Task-State RegisterTSS 资料:TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结-CSDN博客

控制寄存器

寄存器说明
CR0CR0中各位含义如下:**PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式**MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。TS=1时不允许协处理器工作。 以上 4个定义从80286开始,下面的2个定义从80386开始存在ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。**PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。**从80486开始又增加了如下位定义。NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
CR1保留
CR2CR2存放引起缺页异常的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
CR3保存 页目录表的基址(DirBase
CR4CR4是从Pentium CPU开始出现的。 VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。DE(Debugging Extensions)调试扩展,PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits以上,PAE=0时只能用32bits的物理地址。MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。OSXSAVE(XSAVE and Processor Extended States-Enable Bit)

调试寄存器

寄存器说明
DR0~DR3分别设置4个硬件断点的线性地址
DR4~DR5保留
DR6断点状态寄存器
DR7断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

测试寄存器

寄存器说明
TR0~TR2保留
TR3~TR5用作CACHE测试
TR6命令测试寄存器
TR7测试数据寄存器

特殊模块寄存器 MSR

说明
特殊执行的支持WRMSR 特权写命令ecx存放序号,执行完后数据放置在eax中
处理器特性和处理器模式支持RDMER特权读命令eax存放数据,ecx存放序号,执行后eax 写入到相应寄存器
功耗与温控管理、机器检查、调试扩展支持、性能监视计数MSR寄存器的雏形开始于Intel 80386和80486处理器,到Intel Pentium处理器的时候,Intel就正式引入RDMSR和WRMSR两个指令用于读和写MSR寄存器,每个MSR寄存器都会有一个相应的ID,即MSR Index,或者也叫作MSR寄存器地址,当执行RDMSR或者WRMSR指令的时候,只要提供MSR Index就能让CPU知道目标MSR寄存器。这些MSR寄存器的编号(MSR Index)、名字及其各个数据区域的定义可以在Intel x86架构手册”Intel 64 and IA-32 Architectures Software Developer's Manual"的Volume 4中找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~

实际问题场景: 使用llamafactory进行微调qwen2.5 7B和14B的大模型时,会出现out of memory的报错。尝试使用降低batch_size(原本是2,现在降到1)的方式,可以让qwen2.5:7B跑起来,但时不时会不稳定…

Java设计模式 —— 【结构型模式】享元模式(Flyweight Pattern) 详解

文章目录 概述结构案例实现优缺点及使用场景 概述 享元模式也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象; 常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象…

【maven】什么是坐标(依赖)继承与模块、web项目启动访问

目录 2. Maven 基础 2.1 坐标 2.1.0 什么是坐标(依赖) 2.1.1 获得坐标 2.1.2 使用坐标 2.1.3 依赖范围 2.1.4 依赖传递 2.1.5 依赖冲突&调节原则 2.1.6 依赖排除 2.1.7 使用第三方jar包 2.2 继承与模块 2.2.1 概述 2.2.2 分析 2.2.3 实…

操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个

Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…

【LeetCode】2506、统计相似字符串对的数目

【LeetCode】2506、统计相似字符串对的数目 文章目录 一、哈希表位运算1.1 哈希表位运算 二、多语言解法 一、哈希表位运算 1.1 哈希表位运算 每个字符串, 可用一个 int 表示. (每个字符 是 int 的一个位) 哈希表记录各 字符组合 出现的次数 步骤: 遇到一个字符串, 得到 ma…

uniapp使用ucharts组件

1.ucharts准备 有两种使用方式:一种是在uni的插件市场下载(组件化开发)。一种是手动引入ucharts包。官方都封装好组件了,我们不用岂不是浪费。 直接去dcloud插件市场(DCloud 插件市场)找,第一…

YOLOv11模型改进-模块-引入多尺度大核注意力Multi-scale Large Kernel Attention

MLKA 的提出源于图像超分辨率任务的挑战性,该任务需重建低质量图像缺失的高频信息,但因 LR 与 HR 图像对应关系复杂,寻找像素相关性困难。此前模型扩展容量的方法增加了训练负担和数据收集成本,而采用的注意力机制无法同时获取局部…

《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失如何修复?

《战神:诸神黄昏》游戏运行时提示找不到emp.dll怎么办?emp.dll丢失的修复方法 在畅游《战神:诸神黄昏》这款史诗级游戏的过程中,如果突然遭遇“找不到emp.dll”的错误提示,无疑会打断你的冒险之旅。作为一名深耕软件开…

RabbitMQ基础篇之快速入门

文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列:创建 hello.queue1 和 hello.queue2 两个队列。消息发送…

非数学专业小白第一次学习Mathematica心得和体会

文章目录 1.软件界面说明2.我为什么要学习Mathematica软件3.如何进行学习4.一些具体使用4.1正余弦函数4.2一个图里面两个函数4.3 3D图形的绘制4.4密度图4.5三维向量图4.6坐标轴说明4.7图像说明4.8绘图的图例4.9指定范围4.10指定绘图样式4.11极限方程求和4.12基本图4.13邻接矩阵…

C#实现图像骨架化(ZhangSuen细化算法)

原始图像: 骨架化后图像: 需要安装一个NuGet包:System.Drawing.Common 代码如下: using System.Drawing; using System.Drawing.Imaging;public class Image {public int Width { get; }public int Height { get; }private bool[,] pixels;// 构造函数,初始化图像的宽度…

【论文阅读笔记】IC-Light

SCALING IN-THE-WILD TRAINING FOR DIFFUSION-BASED ILLUMINATION HARMONIZATION AND EDITING BY IMPOSING CONSISTENT LIGHT TRANSPORT 通过施加一致的光线传输来扩展基于扩散模型的真实场景光照协调与编辑训练 前言摘要引言相关工作基于学习的基于扩散模型的外观和光照操纵光…

论文阅读 - 《Large Language Models Are Zero-Shot Time Series Forecasters》

Abstract 通过将时间序列编码为数字组成的字符串,我们可以将时间序列预测当做文本中下一个 token预测的框架。通过开发这种方法,我们发现像GPT-3和LLaMA-2这样的大语言模型在下游任务上可以有零样本时间序列外推能力上持平或者超过专门设计的时间序列训…

《机器学习》——线性回归模型

文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…

redis cluster集群

华子目录 什么是redis集群redis cluster的体系架构什么是数据sharding?什么是hash tag集群中删除或新增节点,数据如何迁移?redis集群如何使用gossip通信?定义meet信息ping消息pong消息fail消息(不是用gossip协议实现的&#xff0…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题(很严重!!!)写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题(很严重!!!) 平时处理Excel表格…

安全合规遇 AI 强援:深度驱动行业发展新引擎 | 倍孜网络CEO聂子尧出席ICT深度观察报告会!

12月24日,2025中国信通院深度观察报告会科技伦理与合规发展分论坛在北京举办。本次分论坛主题为“伦理先行,合规致远”,聚焦互联网广告合规治理、移动终端应用生态治理、短视频平台责任限度等前沿话题进行分享与探讨。工业和信息化部领导&…

教育行业 UI 设计基础篇:简洁直观的风格打造

在当今数字化时代,教育行业的线上平台如雨后春笋般涌现,而 UI 设计作为用户与教育产品交互的重要桥梁,其重要性不言而喻。对于教育行业而言,简洁直观的 UI 风格能够极大地提升用户体验,帮助学习者更高效地获取知识。 …

KaiOS 4.0 | DataCall and setupData implemention

相关文档 1、KaiOS 3.1 系统介绍 KaiOS 系统框架和应用结构(APP界面逻辑)文章浏览阅读842次,点赞17次,收藏5次。对于Java开发者而言,理解JS的逻辑调用是有点困难的。而KaiOS webapp开发又不同于现代的web开发,更像chrome浏览器内嵌模式。在这里梳理一下kaios平台web应用…

【星海随笔】删除ceph

cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献: https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…