数据寄存器

重学计算机组成原理(五)- \"旋转跳跃\"的指令实现

不问归期 提交于 2019-11-27 06:21:06
CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if…else、for这样的条件和循环存在,这些指令也不会一路平直执行下去。 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CPU如何执行指令 CPU里差不多几百亿个晶体管 实际上,一条条计算机指令执行起来非常复杂 好在CPU在软件层面已经为我们做好了封装 对于程序员来说,我们只要知道,写好的代码变成了指令之后,是一条一条 顺序执行 不管几百亿的晶体管的背后是怎么通过电路运转起来的 逻辑上,我们可以认为,CPU其实就是由一堆寄存器组成的 而寄存器就是CPU内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。 触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门 如果想要深入学习的话,可以学习数字电路的相关课程 N个触发器或者锁存器,就可以组成一个N位(Bit)的寄存器,能够保存N位的数据 比方说,我们用的64位Intel服务器,寄存器就是64位的 CPU里有很多种不同功能的 1.1 寄存器 寄存器(Register),是中央处理器内的其中组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器。 在计算机体系结构里

64位下的InlineHook

妖精的绣舞 提交于 2019-11-26 23:06:54
目录 x64下手工HOOK的方法 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 2.远跳 影响寄存器 + 12字节方法 3.影响寄存器,恢复寄存器 进行跳转. 4. 常用 jmp + rip方式跳转 大小6个字节 二丶Call的几种方式. 1. CALL PUSH + RET 方式 2.正常call x64下手工HOOK的方法 关于64位程序.网上HOOK方法一大堆.这里也记录一下. 了解跨平台HOOK的真相与本质. 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 在64位下 HOOK有几种方法. 一种是影响寄存器的值.另一种是不影响寄存器的值.各有优劣. 第一种: 不影响寄存器的值 硬编码占用大小为15个字节. 原理: 利用push + ret的原理. 让HOOK的位置跳转为我们的地址. push 函数低地址(8个字节) mov qword ptr ss:[rsp + 4],函数高地址(8个字节,不过高4个字节一般都是0所以可以不用给) ret 硬编码: 68 XX XX XX XX push LowAddress 48 C7 44 24 04 XX XX XX XX mov qword ptr ss:[rsp + 4],HighAddress C3 ret 其中XX的地方可以换成我们的地址. 2.远跳 影响寄存器 +

Keil 程序调试窗口

六眼飞鱼酱① 提交于 2019-11-26 22:36:12
一、程序调试时的常用窗口 Keil 软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows)、观察 窗口(Watch&Call Statck Windows)、存储器窗口(Memory Window)、反汇编窗口(Dissambly Window)串行窗口(Serial Window)等。进入调试模式后,可以通过菜单 View 下的相应命 令打开或关闭这些窗口。 图 1 是输出窗口、观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。进入调试 程序后,输出窗口自动切换到 Command 页。该页用于输入调试命令和输出调试信息。对于 初学者,可以暂不学习调试命令的使用方法。 图 1 调试窗口(命令窗口、存储器窗口、观察窗口) 1 、存储器窗口 ? 存储器窗口中可以显示系统中各种内存中的值,通过在 Address 后的编缉框内输入“字 母:数字”即可显示相应内存值,其中字母可以是 C、D、I、X,分别代表代码存储空间、 直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部 RAM 空间,数字代表想 要查看的地址。例如输入 D:0 即可观察到地址 0 开始的片内 RAM 单元值、键入 C:0 即 可显示从 0 开始的 ROM 单元中的值,即查看程序的二进制代码。该窗口的显示值可以以各 种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键

操作系统原理(1)

為{幸葍}努か 提交于 2019-11-26 22:02:16
计算机体系结构 一个计算机系统由运算器、控制器、存储器(即内存)、输入设备、输出设备组成。其中运算器运算数据,而数据在内存中,运算器要通过控制器到内存中获取数据,运算器最后将运算后的结果通过控制器保存在内存中,通常程序由指令和数据组成,当程序运行时指令和数据保存在内存中,指令中有数据在内存中的地址信息,从而运算器知道数据在内存的位置,然后通过控制器获取所需的数据;一般来说IO设备是通过北桥或南桥芯片连入的,北桥成为高速总线控制器:内存和CPU通过北桥连接在一起。南桥称为低速总线控制器:外围设备和南桥连在一起,然后南桥和北桥相连; 对一个简单的PC机而言,在某一时刻只能运行一个程序,但PC计算能力很强一个程序运行的程序内容和占用的CPU时间不是特别长,因此为了能够尽可能利用计算机的资源,需要让PC具有同时运行多个程序的能力,因此每个程序在运行时需要一个协调器称为内核(内核是运行在硬件之上负责管理硬件资源并且将硬件资源虚拟成其他样子提供给上层所需的应用程序(这样做的原因是如果某一应用程序直接运行在硬件之上则此程序就可以控制硬件的各种属性,其它程序运行时可能彼此会产生干扰,一个恶意的程序可能导致其它程序统统退出所以就需要统一的资源管理者,而且每个程序要想使用硬件必须通过内核来完成,而内核也不会让程序直接访问硬件而是通过将硬件提供的计算能力通过一个个的称为系统调用(system call

modbus_百度经验

被刻印的时光 ゝ 提交于 2019-11-26 20:53:40
转自:https://jingyan.baidu.com/article/2c8c281dbdfa9f0009252a74.html 图片都没了,百度真差劲~~~还是博客园好!!! ModBus通讯规约 ModBus通讯规约允许变送器与施耐德、西门子、AB、GE等多个国际著名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有ModBus兼容的监控系统之间进行信息交换和数据传送。 变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:组态王、Intouch、FIX、synall等)就可以构成一套电力监控系统。 通讯数据的类型及格式: 通讯信息传输过程: 当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。 地址码 地址码是每次通讯信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机 发送的地址码表明将发送到的从机地址

单口RAM、双口RAM、FIFO

偶尔善良 提交于 2019-11-26 20:02:32
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线,读写可同时进行。FIFO读写可同时进行,可以看作是双口。 双口RAM分伪双口RAM(Xilinx称为Simple two-dual RAM)与双口RAM(Xilinx称为true two-dual RAM)。伪双口RAM,一个端口只读,另一个端口只写;而双口RAM两个端口都可以读写。 FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址。 异步时钟域的缓存只要是双口器件都可以完成。但FIFO不需对地址进行控制,是最方便的。 摘录: 根据我的设计经验,其实FIFO的核心还是一片RAM。只不过把RAM的操作封装了一下,添加了两个指针,也就是两个地址寄存器,一个写地址寄存器,一个读地址寄存器。 当FIFO初始化时,读地址寄存器和写地址寄存器皆为零; 当FIFO写一个数据时,把数据写入当前地址寄存器指向的RAM地址,然后写地址寄存器加1;如果加到RAM的底部了,就再次变为零; 当FIFO读数据时,把读地址寄存器的数据读出来,然后读地址寄存器加1;如果读到RAM的底部了,就再次变为零; 如果读地址寄存器追上写地址寄存器,就说明读空了,没数据可读了;

Intel 80386 CPU

偶尔善良 提交于 2019-11-26 19:20:50
一、80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中。这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。80386的广泛应用,将PC机从 16位 时代带入了 32位 时代。80386的强大运算能力也使PC机的应用领域得到巨大扩展,商业办公、科学计算、工程设计、多媒体处理等应用得到迅速发展。它的数据总线和地址总线都是32位,直接寻址的内存空间4GB,虚拟地址空间为64TB。芯片上集成了27.5万个晶体管,主频16-33MHz。它是X86第一个真正的32位CPU,它能提供真正的多任务处理和建立虚拟系统的能力。 二、80386的引脚及功能 80386 DX有132根引脚,采用PGA(Pin Grid Array,引脚网格阵列)封装,采用这种封装工艺单根引脚所占用的面积较双列直插时小,因此引脚数目可以多一些,不必再采用引脚复用技术。因此,在80386中数据线和地址线是分开设置的,控制信号和状态信号也不再复用引脚。其中34 条地址线(A31~A2、BE3~BE0),32 条数据线(D31~D0),3 条中断线,1条时钟线,13 条控制线,20 条电源线VCC,21条地线VSS,还有8 条为空。 与8086/8088 相比,需要说明以下几点: 1)时钟( CLK2): 80386

ATPC 寄存器作用

时光怂恿深爱的人放手 提交于 2019-11-26 17:14:14
1. ATPC (Automatic Transfer Power Control) 自动 发信功率控制。技术的要点是微波发信机的输出功率在ATPC控制范围内自动跟踪接收段接收电平的变化而变化 2. 基本ATPCS规定了在子程序调用时的一些基本规则,包括下面3方面的内容: 1、寄存器的使用必须满足下面的规则: 1).子程序间通过 寄存器R0一R3来传递参数 ,这时,寄存器R0~R3可以记作A1-A4。被调用的子程序在返回前无需恢复寄存器R0~R3的内容。 2).在子程序中,使用寄存器R4~R11来保存局部变量.这时,寄存器 R4 ~ R11可以记作V1 ~ V8。如果在子程序中使用到了寄存器V1~V8中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb程序中,通常只能使用寄存器R4~R7来保存局部变量。 3).寄存器R12用作过程调用时的临时寄存器(用于保存SP,在函数返回时使用该寄存器出栈), 记作ip。在子程序间的连接代码段中常有这种使用规则。 4).寄存器R13用作数据栈指针,记作sp。在子程序中寄存器R13不能用作其他用途。寄存器sp在进入子程序时的值和退出子程序时的值必须相等。 5).寄存器R14称为连接寄存器,记作lr。它用于保存子程序的返回地址。如果在子程序中保存了返回地址

第三章 寄存器

牧云@^-^@ 提交于 2019-11-26 12:45:44
cpu提供的栈机制 1.8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和POP(出栈)。比如,push ax表示将寄存器ax中的数据送入栈中,pop ax表示从栈顶取出数据送入ax。8086CPU的入栈和出栈操作都是 以字为单位 进行的。 2.CPU如何知道这段空间被当作栈来使用?如何知道那个单元是栈顶单元? 8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP指向栈顶元素。push指令和pop指令执行时,CPU从SS和SP中得到栈顶的地址。 在执行push、pop指令需要两步操作:执行push时,CPU的两步操作是:先改变SP,后向SS:SP处传送;执行pop时,CPU的两步操作是:先读取SS:SP处的数据,后改变SP。 3.要小心栈顶超界的问题 来源: https://www.cnblogs.com/mylearning-log/p/11320621.html

计算机组成原理 - 一些简单题和设计分析题

此生再无相见时 提交于 2019-11-26 12:34:03
为了前几天的计算机组成原理的复习,从google上搜索的一些烟台大学历年考试试题进行的一些总结,现在分享给需要的朋友。 简答题 1. CPU中包括哪几种寄存器?分别说明其作用。 答:CPU有以下寄存器: (1)指令寄存器(IR):用来保存当前正在执行的一条指令。 (2)程序计数器(PC):用来确定下一条指令的地址。 (3)地址寄存器(AR):用来保存当前CPU所访问的内存单元的地址。 (4)缓冲寄存器(DR):<1>作为CPU和内存、外部设备之间信息传送的中转站。 <2>补偿CPU和内存、外围设备之间在操作速度上的差别。 <3>在单累加器结构的运算器中,缓冲寄存器还可兼作为操作数寄存器。 (5)通用寄存器(AC):当运算器的算术逻辑单元(ALU)执行全部算术和逻辑运算时,为ALU提供一个工作区。 (6)状态条件寄存器:保存由算术指令和逻辑指令运行或测试的结果建立的各种条 件码内容。除此之外,还保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。 2.根据操作数所在位置,指出其寻址方式(填空)。 (1)、操作数在寄存器中,为____ 寄存器 ____寻址方式。 (2)、操作数地址在寄存器中,为_ 寄存器间接 _寻址方式。 (3)、操作数地址(主存)在指令中,为___ 直接 ___寻址方式。 (4)、操作数在指令中,为__ 立即 ____寻址方式。