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

news2025/1/7 18:13:00

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.coloradmin.cn/o/2272105.html

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

相关文章

如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库教程

简介 本教程将向你介绍如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库。 Apache Cassandra 是一个分布式的 NoSQL 数据库,旨在处理跨多个普通服务器的大量数据,并提供高可用性,没有单点故障。Apache Cassandra 是一个高度可扩展的分布…

uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器

效果 选择前效果 1、时间选择器 2、日期选择器 3、普通选择器 4、多列选择器 选择后效果 代码 <template><!-- 时间选择器 --><view class"line"><view classitem1><view classleft>时间</view><view class"right&quo…

centos,789使用mamba快速安装R及语言包devtools

如何进入R语言运行环境请参考&#xff1a;Centos7_miniconda_devtools安装_R语言入门之R包的安装_r语言devtools包怎么安装-CSDN博客 在R里面使用安装devtools经常遇到依赖问题&#xff0c;排除过程过于费时&#xff0c;使用conda安装包等待时间长等。下面演示centos,789都是一…

STM32第十一课:STM32-基于标准库的42步进电机的简单IO控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正…

kafka使用以及基于zookeeper集群搭建集群环境

一、环境介绍 zookeeper下载地址&#xff1a;https://zookeeper.apache.org/releases.html kafka下载地址&#xff1a;https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…

JSON结构快捷转XML结构API集成指南

JSON结构快捷转XML结构API集成指南 引言 在当今的软件开发世界中&#xff0c;数据交换格式的选择对于系统的互操作性和效率至关重要。JSON&#xff08;JavaScript Object Notation&#xff09;和XML&#xff08;eXtensible Markup Language&#xff09;是两种广泛使用的数据表…

Android14 CTS-R6和GTS-12-R2不能同时测试的解决方法

背景 Android14 CTS r6和GTS 12-r1之后&#xff0c;tf-console默认会带起OLC Server&#xff0c;看起来olc server可能是想适配ATS(android-test-station)&#xff0c;一种网页版可视化、可配置的跑XTS的方式。这种网页版ATS对测试人员是比较友好的&#xff0c;网页上简单配置下…

BurpSuite工具安装

BurpSuite介绍&#xff1a; BurpSuite是由PortSwigger开发的一款集成化的Web应用安全检测工具&#xff0c;广泛应用于Web应用的漏洞扫描和攻击模拟&#xff0c;主要用于抓包该包(消息拦截与构造) 一、Burp suite安装 windows系统需要提前配置好java环境&#xff0c;前面博客…

Win11+WLS Ubuntu 鸿蒙开发环境搭建(一)

参考文章 Windows11安装linux子系统 WSL子系统迁移、备份与导入全攻略 如何扩展 WSL 2 虚拟硬盘的大小 Win10安装的WSL子系统占用磁盘空间过大如何释放 《Ubuntu — 调整文件系统大小命令resize2fs》 penHarmony南向开发笔记&#xff08;一&#xff09;开发环境搭建 一&a…

flink cdc oceanbase(binlog模式)

接上文&#xff1a;一文说清flink从编码到部署上线 环境&#xff1a;①操作系统&#xff1a;阿里龙蜥 7.9&#xff08;平替CentOS7.9&#xff09;&#xff1b;②CPU&#xff1a;x86&#xff1b;③用户&#xff1a;root。 预研初衷&#xff1a;现在很多项目有国产化的要求&#…

和为0的四元组-蛮力枚举(C语言实现)

目录 一、问题描述 二、蛮力枚举思路 1.初始化&#xff1a; 2.遍历所有可能的四元组&#xff1a; 3.检查和&#xff1a; 4.避免重复&#xff1a; 5.更新计数器&#xff1a; 三、代码实现 四、运行结果 五、 算法复杂度分析 一、问题描述 给定一个整数数组 nums&…

某xx到家app逆向

去官网下载app即可 https://www.dongjiaotn.com/#/home查壳 360的壳子 直接脱壳即可 抓包 请求地址 https://api.gateway.znjztfn.cn/server/user/index 请求参数 {"lng": "xxxx","lat": "xxxx","city_id": "1376&…

docker搭建gitlab和jenkins

搭建gitlab 搭建gitlab首先需要一个gitlab的镜像 其次最好为他设置一个单独的目录 然后编写一个docker-compose文件 version: 3.1 services:gitlab:image: gitlab_zh:latest //此处为你的镜像名称container_name: gitlab //容器名称restart: always …

嵌入式linux中socket控制与实现

一、概述 1、首先网络,一看到这个词,我们就会想到IP地址和端口号,那IP地址和端口各有什么作用呢? (1)IP地址如身份证一样,是标识的电脑的,一台电脑只有一个IP地址。 (2)端口提供了一种访问通道,服务器一般都是通过知名端口号来识别某个服务。例如,对于每个TCP/IP实…

推荐系统重排:MMR 多样性算法

和谐共存&#xff1a;相关性与多样性在MMR中共舞 推荐系统【多样性算法】系列文章&#xff08;置顶&#xff09; 1.推荐系统重排&#xff1a;MMR 多样性算法 2.推荐系统重排&#xff1a;DPP 多样性算法 引言 在信息检索和推荐系统中&#xff0c;提供既与用户查询高度相关的文…

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

【python因果库实战16】双重稳健模型1

这里写目录标题 双重稳健模型数据简单双重稳健模型双重稳健 IP 特征模型 双重稳健模型 基本上&#xff0c;这些是利用加权模型增强结果模型的不同集合模型。 本笔记展示了不同的结果模型和倾向性模型组合方式&#xff0c; 但由于可能的组合非常多&#xff0c;本笔记并不打算展…

如何恢复已删除的 Telegram 消息 [iOSamp;Android]

Telegram 是一款功能强大的消息应用程序&#xff0c;因其易用性、隐私保护和众多炫酷功能而深受用户喜爱。然而&#xff0c;有时我们会不小心删除重要的消息。在这种情况下你应该做什么&#xff1f; 本文将为您提供简单有效的解决方案来恢复 Telegram 上已删除的消息&#xff…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

【微服务】2、网关

Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题&#xff1a;单体项目端口固定&#xff08;如黑马商城为8080&#xff09;&#xff0c;拆分微服务后端口各异&#xff08;如购物车808、商品8081、支付8086等&#xff09;且可能变化&#xff0c;前端难…