通用寄存器

汇编

↘锁芯ラ 提交于 2019-11-30 22:21:59
寄存器 (8086以内存作为战场,用寄存器做为军事基地,以加速工作)以8086为例: 8086 有14个16位寄存器,可分为:通用寄存器、指令指针、标志寄存器和,段寄存器 (1)通用寄存器 数据寄存器 AH&AL=AX(accumulator): 累加器。常用于运算,以及io指令所传输的数据 BH&BL=BX(base): 基址寄存器。 常用于地址索引 CH&CL=CX(count): 计数寄存器。常用于计算值,如位移,循环时的计数器。 DH&DL=DX(data): 数据寄存器。常用于数据传递 指针寄存器和变址寄存器 SP(Stack Pointer): 堆栈指针。与SS配合,指向堆栈地址 BP(Base Pointer): 基址指针寄存器。用作SS的一个相对基址位置 SI(Source Index): 源变地址寄存器。可用来存放相对DS段之源变址指针 DI(Destination Index): 目的变址寄存器。用来存放相对于ES段之目的变址指针。 (2)指令指针IP IP指向的是指令地址的段内地址偏移量,根据操作字节的长度进行移动。1字节就加1。 (3)标志寄存器 OF 溢出标志位 DF 方向标志位 IF 中断允许标志位 TF 跟踪标志位 SF 符号标志 ZF 零标志 AF 辅助进位标志位 PF 奇偶标志位 CF 无符号数运算知否进位 (4)段寄存器 CS(Code

【计算机组成原理】指令系统

人盡茶涼 提交于 2019-11-30 14:27:46
一、指令格式 指令:操作码字段 地址码字段 指令字(简称指令):表示一条指令的机器字。 指令格式:是指令自用二进制代码表示的结构形式,由操作码字段和地址码字段组成。 操作码字段:表征指令的操作特性与功能 ( 指令的唯一标识 ) 不同的指令操作码不能相同 地址码字段:指定参与操作的操作数的地址码 二、操作码分类 操作码可以分为固定长度的代码和可变长度的代码 1、固定长度的代码 多有指令操作码的长度相等 例如:某计算机共有64条指令,采用固定长度操作码,需要6位编码,从000000~111111 2的6次方为64 优点:编码方法简单,便于指令的译码 确定:不方便指令系统中增加新的指令(扩展不方便) 2、可变长度的代码 不等长的指令操作码可以减小操作码的平均长度,提高指令编码的效率,从指令的扩展性来看,也希望操作码长度可变。 例如:设某台计算机有100条指令,要求: 1)采用固定长度操作码编码,请设计其操作码编码 2)假设这100条指令中有10条指令的使用改了达到90%。其余90条指令的使用概率达到10%,请采用不定长编码设计一种操作码编码的方案,并求出操作码的平均长度 (常用指令用短编码 不常用指令用长编码) 答、1)采用固定长度操作码编码,需要7位操作码,取其中100个代码作为操作码 0000000~1100011之间的代码代表100条指令(长度为7) 其余的1100100

全局描述符表GDT

烂漫一生 提交于 2019-11-29 19:42:38
写在前面 添油加醋系列第二弹——剖析GDT 头文件: https://github.com/bajdcc/MiniOS/blob/master/include/gdt.h 实现: https://github.com/bajdcc/MiniOS/blob/master/src/kernel/gdt.c 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了。C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的)。虽说C++有许多的奇技淫巧,一个算法有N种实现方法,但这会让选择恐惧症患者(比如我)难堪,比如说一个类要怎样写啊等等,,抛开其他不谈,假如一个语言的语法特性越少,学起来可能越简单(刚试过lua语法很简单)。OK废话不多说,进入本章主题(涉及OS的资料很杂很偏,如有错误望海涵)。 GDT的构成 这个网址不错(英文的): Global Descriptor Table 首先,根据网上资料,GDT(全局描述符表)又叫段描述符表,暂且就这样认为吧,如有异议可以提出来。 一个GDT可能是这样的( GDT与LDT - Lan'Sir - 博客频道 - CSDN.NET ): 同样也是这样的( Global Descriptor Table ): 在代码中它又是这样: // 全局描述符表结构 http://www.cnblogs.com

4.2 PCIe体系结构的组成部件 分类: 浅谈PCI-E ...

爱⌒轻易说出口 提交于 2019-11-29 18:07:35
PCIe 总线作为处理器系统的局部总线,其作用与 PCI 总线类似,主要目的是为了连接处理器系统中的外部设备,当然 PCIe 总线也可以连接其他处理器系统。在不同的处理器系统中, PCIe 体系结构的实现方法略有不同。但是在大多数处理器系统中,都使用了 RC 、 Switch 和 PCIe-to-PCI 桥这些基本模块连接 PCIe 和 PCI 设备。在 PCIe 总线中,基于 PCIe 总线的设备,也被称为 EP (Endpoint) 。 4.2.1 基于 PCIe 架构的处理器系统 在不同的处理器系统中, PCIe 体系结构的实现方式不尽相同。 PCIe 体系结构以 Intel 的 x86 处理器为蓝本实现,已被深深地烙下 x86 处理器的印记。在 PCIe 总线规范中,有许多内容是 x86 处理器独有的,也仅在 x86 处理器的 Chipset 中存在。在 PCIe 总线规范中,一些最新的功能也在 Intel 的 Chipset 中率先实现。本节将以一个虚拟的处理器系统 A 和 PowerPC 处理器为例简要介绍 RC 的实现,并简单归纳 RC 的通用实现机制。 1 处理器系统 A 在有些处理器系统中,没有直接提供 PCI 总线,此时需要使用 PCIe 桥,将 PCIe 链路转换为 PCI 总线之后,才能连接 PCI 设备。在 PCIe 体系结构中,也存在 PCI

.2 HOST主桥(2)

南楼画角 提交于 2019-11-29 18:06:32
2.2 HOST主桥(2) 发布时间:2013-03-28 10:11:54 技术类别: 接口电路 个人分类: 浅谈PCIe体系结构 http://blog.sina.com.cn/s/blog_6472c4cc0100qli5.html PCI Express的outbound ATMU的window base register,translation baseregister. window base register是针对powerpc域的,translation base register是针对PCIExpress域的。 Outbound的BAR是mpc的地址空间,TAR是PCIE的高达64bit的地址空间。 Inbound的BAR是PCIE的高达64bit的地址空间,TAR是mpc的地址空间。 设备 在系统的 PCI 地址空间里申请一段来用,所申请的空间基址和大小保存在BAR寄存器里。 BAR里的只是 PCI 域的地址空间,需要映射到IO地址空间里或者内存地址空间里之后软件才能使用 。 映射到IO空间的话,用IO读写指令和函数去访问 设备 ;映射到内存空间的话,首先得到的是物理地址,映射到虚拟地址后就可以像用指针那样访问。 IO BAR和MEM BAR分别是映射到IO空间和内存空间的BAR;BAR寄存器的0位指示要映射到哪,有的 设备 这位可以由用户设置,有的只读。

汇编(三)——关于寄存器的操作

帅比萌擦擦* 提交于 2019-11-29 12:43:21
目录 汇编(三) 一、通用寄存器 二、加深对AX、BX、CX、DX印象 三、监测点2.1 四、地址寄存器 五、监测点2.2 六、CPU如何区分指令与数据 七、加深CPU如何区分指令和数据印象 八、IP寄存器和指令的关系 汇编(三) 一、通用寄存器 AX、BX、CX、DX 1 byte = 8 bit 2 byte = 16 bit 0000 0000 0000 0000 ~ 1111 1111 1111 11111 他们可以各自分为2个8位寄存器 AX = AH*AL BX = BH*BL CX = CH *CL DX = DH*DL 为什么存在通用寄存器? 1.因为为了兼容之前的8位寄存器,保证之前的程序,稍加修改就可以运行在8086CPU上 2.内存最小单元 8 bit CPU从内存中读取一个字节 8 bit字节的数据 8位数据 -> 8位寄存器中 16根数据线 8086CPU一次性可以处理 2种尺寸的数据 字节型数据 byte 8bit 8位寄存器中 字型数据 2byte 16bit 16位寄存器中 2个字节 一个字节是高位数据,一个是低位 二、加深对AX、BX、CX、DX印象 mov ax,5 mov ax,0 mov al,5 按下r查询,按下t执行 分析下面命令 mov ax,4E20 mov bx,ax mov ch,bl mov cl,bh mov dl,ch

ARM汇编指令集

亡梦爱人 提交于 2019-11-29 12:19:22
跳转指令 B BL会把当前PC指针的值加4保存到R14里。 MOV{条件}{S} 目的寄存器 ,源操作数 只能用在通用寄存器的操作 MOV R1,R0 将寄存器R0的值传送到R1里 MVN{条件}{S} 目的寄存器 ,源操作数 在传送之前按位取反,即把一个被取反的值传送到目的 寄存器中。 S决定指令操作是否影响CPSR中条件标志位的值,没有S 时指令不更新CPSR中条件标志位的值。 CMP{条件}操作数1,操作数2 把两个操作数进行比较,同时更新CPSR中条件标志位的值 该指令进行一次减法运算,不存储结果,只更改条件标志位 TST{条件 }操作数1,操作数2 把一个寄存器的内容和另一个寄存器的内存或立即数进行按位与运算,并 更新CPSR中条件标志位的值,当位与结果为0时,EQ位被设置。 TST R5,#(1<<23) ;当bit23位为1时,CPSR EQ位被设置 ADD{条件}{S}目的寄存器,操作数1,操作数2 将两个操作数相加,把结果放在目的寄存器中。 ;ADD指令 MOV R1,#1 MOV R2,#2 MOV R3,#3 ADD R0,R1,R2 ;R0=R1+R2 ADD R0,R1,#256 ;R0=R1+256 ADD R0,R2,R3,LSL#1 ;R0=R2+(R3<<1) SUB{条件}{S}目的寄存器,操作数1,操作数2 用操作数1减操作数2

modbus通讯协议详解

荒凉一梦 提交于 2019-11-29 11:35:53
一、Modbus 协议简介     Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和RS485),也可以选择以太网口。其通信遵循以下的过程:   ● 主设备向从设备发送请求   ● 从设备分析并处理主设备的请求,然后向主设备发送结果   ● 如果出现任何差错,从设备将返回一个异常功能码   此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。   当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构

Java Main如何被执行?

柔情痞子 提交于 2019-11-29 08:22:55
x86-64的所有寄存器都是与机器字长(数据总线位宽)相同,即64位的,x86-64将x86的8个32位通用寄存器扩展为64位(eax、ebx、ecx、edx、eci、edi、ebp、esp),并且增加了8个新的64位寄存器(r8-r15),在命名方式上,也从”exx”变为”rxx”,但仍保留”exx”进行32位操作,下表描述了各寄存器的命名和作用。 描述 32 位 64 位 通用寄存器组 eax rax ecx rcx edx rdx ebx rbx esp rsp ebp rbp esi rsi edi rdi - r8~r15 浮点寄存器组 st0~st7 st0~st7 XMM 寄存器组 xmm0~xmm7 xmm0~xmm15 %esp与%ebp有特殊用途,用来保存指向程序栈中特定位置的指针。 参考文章: (1) Java Main如何被执行? https://www.cnblogs.com/iceAeterNa/p/4876940.html 来源: https://www.cnblogs.com/mazhimazhi/p/11493364.html

汇编初识

∥☆過路亽.° 提交于 2019-11-29 06:42:35
   0x00 寄存器初始识   32位x86架构下的寄存器可以被简单分为 通用寄存器 和 特殊寄存器 两类,通用寄存器在大部分汇编指令下是可以任意使用的(虽然有些指令规定了某些寄存器的特定用途),而特殊寄存器只能被特定的汇编指令使用,不能用来任意存储数据。    ①通用寄存器   32位x86架构下的通用寄存器包括:   一般寄存器(eax、ebx、ecx、edx)   索引寄存器(esi、edi)   堆栈指针寄存器(esp、ebp)   eax 被称为累加寄存器( A ccumulator),用以进行算数运算和返回函数结果等。ebx 被称为基址寄存器( B ase),在内存寻址时(比如数组运算)用以存放基地址。ecx 被称为记数寄存器( C ounter),用以在循环过程中记数。edx 被称为数据寄存器( D ata),常配合 eax 一起存放运算结果等数据。   索引寄存器通常用于字符串操作中,esi 指向要处理的数据地址( S ource I ndex),edi 指向存放处理结果的数据地址( D estination I ndex)。   堆栈指针寄存器(esp、ebp)用于保存函数在调用栈中的状态,ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶(下一个压入栈的活动记录的顶部),是栈指针