个别指令对寄存器有特定的使用,并且又必须在指令中指明它的名字,这类寄存器的使用称为特定使用。 例如,移位指令SHLAX,CL CL被固定用作移位次数。...2.指针寄存器 指针寄存器有堆栈指针SP和基址指针BP 它们一般被用来存放16位地址,在形成20位的物理地址时常被作为偏移量使用。...四、标志寄存器(难点,容易绕) 标志寄存器是用来反映CPU在程序运行时的某些状态,如是否有进位、奇偶性、结果的符号、结果是否为零等等。...为了方便书写,在源程序中常用5位十六进制数或一个符号来表示一个存储单元的地址。 4.任何两个相邻字节单元就构成一个字单元 一个字存储单元(WORD)的长度为16位二进制数,即两个字节。...对于一个64K的段,当偏移量为0时,就是这个段的起始单元,而偏移量为0FFFFH时,就是这个段的最后一个字节单元。
总结而言,指令寄存器(IR)存放的是从内存中获取的指令,类似于中间站,用于存放指令。而程序计数器(PC)则存放的是指令的地址,同时还具有计数的功能。...机器数又分为有符号数和无符号数。其中,无符号数对应正数,表示在机器数中没有符号位。对于无符号数,如果约定小数点的位置在机器数的最低位之后,则该数为纯整数。...如果约定小数点的位置在机器数的最高位之前,那么这个数是纯小数。对于带符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。...相对寻址:指令地址码给出的是一个偏移量(可正可负),操作数地址等于本条指令的地址加上该偏移量。 变址寻址:操作数地址等于变址寄存器的内容加偏移量。...模 2 加减运算的规则是按位运算,不发生借位和进位。要注意,当码距为 2 时,CRC 只能检错而不能纠错。
,所以,这些32位寄存器更具有通用性。...变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。...在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。...使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。...三、32位标志寄存器增加的标志位 1、I/O特权标志IOPL(I/OPrivilege Level) I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。
图2.1 CPU寄存器组的示意图 2.1.2、通用寄存器的作用 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。...有些指令的执行会改变标志位(如:算术运算指令等),不同的指令会影响不同的标志位,有些指令的执行不改变任何标志位(如:MOV指令等),有些指令的执行会受标志位的影响(如:条件转移指令等),也有指令的执行不受其影响...2、物理地址的形成方式 由于规定段地址必须是16的倍数,所以,其值的一般形式为:XXXX0H,即:前16位二进制位是变化的,后四位是固定为0。...16位CPU有四个段寄存器,所以,其程序可同时访问四个不同含义的段。段寄存器及其偏移量的引用关系如图2.7所示。 ?...对于上述规定,随着后续内容的叙述,将会对它们有更进一步理解。
1.4 类型转换 有符号数和无符号数的转换规则: 位模式不变、数值可能改变(按不同编码规则重新解读) 隐式转换 有符号数隐式转换为无符号数 当表达式中有符号和无符号数混用时,包括比较运算符连接的表达式...image.png 符号扩展 对于给定 w 位的有符号整型数 x 转为 w+k 位相同数值的整型数,将符号位复制 k 份 C 语言中从短整数类型向常整数类型转换时自动进行符号扩展 image.png...有符号数加法 image.png image.png 【注】CPU 其实并不知道操作的是有/无符号数,CPU 所做的便是将两个 w 位的二进制数 x、y 相加并将结果的进位 w+1 位去掉(即只保留结果的后...AT&T 格式指令后缀 b:操作字节(1 byte) w:操作字(2 byte) l:操作双字(4 byte) q:操作四字(8 byte) 【注】x86_64 规定:任何为寄存器生成 32 位值的指令都会把该寄存器的高位部分置...栈操作指令类 image.png 算术逻辑运算指令类 image.png 【注】leaq 指令不设置条件码,因为它是用于进行地址计算的。对于逻辑操作,进位标志和溢出标志会设置位0。
和CMN (5)TST和TEQ (6)乘法指令 乘法指令的二进制编码 汇编格式 注意事项 ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作: 数据处理指令分类 数据处理指令二进制编码 数据处理指令表...数据处理指令的特点 所有操作数都是32位宽,或来自寄存器或来自指令中的立即数(符号或0扩展) 如果数据操作有结果,则结果为32位宽,放在一个寄存器中(有一个例外是长乘指令的结果是64位的); ARM数据处理指令中使用...按结果位宽一般分为2类:一类是2个32位二进制数相乘的结果是64位;另一类是2个32位二进制数相乘,仅保留最低有效32位。...RdHi:RdLo ←Rm*Rs 111 SMLAL 有符号长乘累加 RdHi:RdLo +=Rm*Rs 注: 对于有符号和无符号操作数,结果的最低有效32位是一样的,所以对于只保留32位结果的乘法指令...乘法指令的二进制编码 说明: 对于32位乘积结果指令,Rd为结果寄存器,Rm、Rs、Rn为操作数寄存器。
9.3.1 算术、逻辑指令 MIPS架构算术、逻辑指令是三目操作运算指令,也就是说,它们具有2个输入和一个输出。例如:表达式d = s + t写成汇编形式为addu d,s,t。...但是,有时候16位立即数不能满足我们的要求,我们需要对其进行扩展,扩展方式有两种:符号扩展或零扩展到32位。怎样选择取决于操作,通常,算术操作使用符号扩展,逻辑操作使用零扩展。...指令的执行总是将任何GP寄存器的32位上半部分设置为所有1或所有0(反映第31位的值)。...9.4 寻址模式 MIPS架构的寻址模式非常简单,就是寄存器+偏移量的方式,偏移量的范围是−32768~32767(也就是16位的立即数)。...直接寻址+索引:使用寄存器指定偏移量。 常量寻址:直接作为32位地址使用。 寄存器间接寻址:寄存器+偏移量,但是此处的偏移量等于0。
加(减)法运算时,若最高位有进(借)位则CF=1 OF:溢出标志位。当算术运算的结果超出了有符号数的可表达范围时,OF=l ZF:零标志位。当运算结果为零时ZF=1 SF:符号标志位。...16位,规则字,以偶地址开始存放 字节: 高8位传送奇地址,低8位传送偶地址 内存储器管理 8088CPU是16位体系结构的微处理器 可以同时处理16位二进制码 8088CPU需要管理1MB内存 分段技术...分为若干个逻辑段,取内地址,用16位表示,每段最大64KB 对段首地址(物理地址)规定,段首地址低4位为0,例如:00000H,00010H,FFFF0H 段地址:段的起始地址的高16位 偏移地址:段内相对于段的起始地址的偏移量...仲裁控制 出错处理 总线驱动 总线的主要性能指标 总线带宽(B/S) 单位时间内总线上可传送的数据量 总线带宽=位宽×工作频率 总线位宽(bit) 能同时传送的数据位数 总线的工作频率(MHz) 总线带宽...“0”和“1”的,具有记忆功能的半导体器件组成 (2)能存放一位二进制数的半导体器件称为一个存储元 (3)若干存储元构成一个存储单元 半导体存储器的分类 内存储器: 随机存取存储器(RAM) 静态存储器
CPU 是具有各种 功能的寄存器的集合体 程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个 数据是用二进制表示的 二进制表示的原因 计算机内部是由I CA 这种电子部件构成的...二进制数 ○○的 ×× 次幂”表示位权,其中,十进制数的情况下○○部分为 10,二进制数的情况下则为 2。这个称为基数。 ○○的 ×× 次幂”中的 ××,在任何进制数中都是数的位数-1。...这个运算中出现 了最高位溢出的情况,对于溢出的位, 计算机会直接忽略掉。100000000 这个 9 位二进制数就会被认为是 00000000 这一 8 位二进制数。...该数据位是 1 时表示负,为 0 时则表示“正或者 0”。数值的大小用尾数部分和指数部分来表示。...0.75 就是“0.75×10 的0次幂”。根据这个规则来表示小数的方式,就是正则表达式。 在二进制数中,我们使用的是“ 将小数点前面的值固定为1的正则表达式”。
,对它们有特定的要求,且具有特殊的功能 2个指针寄存器:SP和BP (1)BP为基指针寄存器,用它可直接存取堆栈中的数据 (2)SP为堆栈指针寄存器,用它只可访问栈顶 4个段寄存器:ES,DS,CS...偏移量 段寄存器的引用 取指令所用的段寄存器和偏移量一定是用CS和IP; 堆栈操作所用的段寄存器和偏移量一定是SS和SP; 串操作的目标操作数所用的段寄存器和偏移量一定是ES和DI;...,奇偶标志:计算结果二进制数有奇数个1还是偶数个1,奇数个1写0,偶数个1写1 SF标记,符号标记:运算结果为正,置0;为负,置1 CF标志,进位标志:最高位是否有进位或错误,有置1,没有置...0 OF标志,溢出标志:8位数是否超过-128到127,是溢出置1 AF标志,辅助进位标志,低4位是否向高4位进位或借位,是置1,否置0 算术运算指令 加法指令 1.ADD加法指令:把源操作数的值加到目的操作数...指令的执行不影响任何标志位。
只有32位模式有强制要求,其他都是选择性的。大部分编程语言都提供了IEEE浮点数格式与算术,但有些将其列为非必需的。...特殊值 这里有三个特殊值需要指出: 以上规则,总结如下: 32位单精度 单精度二进制小数,使用32个比特存储。 S为符号位,Exp为指数字,Fraction为有效数字。...指数部分即使用所谓的偏正值形式表示,偏正值为实际的指数大小与一个固定值(32位的情况是127)的和。采用这种方式表示的目的是简化比较。...浮点数的舍入 任何有效数上的运算结果,通常都存放在较长的寄存器中,当结果被放回浮点格式时,必须将多出来的比特丢弃。...C语言标准定义的浮点数的十进制精度为:十进制数字的位数q,使得任何具有q位十进制数字的浮点数可近似表示为b进制的p位数字并且能近似回十进制表示而不改变这q位十进制数字[4] 但由于相对近似误差不均匀,有的
wp_editor_md_2da57dd43ce9047c8ab4de27a25a9dbf.jpg op占7位,可表示的操作数有128条。...wp_editor_md_0f61199648f3fcb73715c14c2a5a0b8e.jpg op占6位,可表示的操作数有64条。...,A的位数限制了立即数的大小。...: PUSH,POP 运算类指令 算术运算指令: 定点和浮点的算术运算,大型机有向量运算指令 逻辑运算指令:无符号数的位操作,代码的转换、判断及运算 程序控制类指令 程序控制类指令用于控制程序的执行方向...,并使程序具有测试、分析与判断的能力。
一些编译器高效优化的要求和流水线的设计要求是兼容的,所以MIPS架构的CPU具有32个通用寄存器,使用具有三个操作数的算术/逻辑指令。那些复杂的特殊目的的指令也是编译器不愿意产生的。...3个操作数的指令: 编译器偏爱三个操作数的运算,对于复杂的表达式能够有更大的优化空间。而算术/逻辑运算指令不需要存储操作,所以有足够的位表示两个源操作寄存器和一个目的寄存器。...一旦数据加载到寄存器中,它就看作为一个寄存器长度大小的数据(比如说,32位架构就是32位整数,64位架构就被看作为64位整数)。所以,对于这些字节或半字的load操作,还需要考虑符号位。...虽然,可以使用寄存器保存跳转目标,然后再使用跳转指令跳转到32位地址的任何地方。 条件分支指令只有16位的偏移量,对于4字节对齐的内存空间,其访问的范围是2^18B。...最少的子程序支持: 跳转指令也与我们习惯上的认知有所不同:具有跳转(jump)和链接(link)跳转指令,把返回地址写入到一个固定的寄存器中。默认使用$31作为返回地址寄存器。
示例: SRAI x13,x12,3 将x12寄存器中的值算术右移3位,并将结果写入x13中 图4 SRAI机器编码格式 [2] 注意: SRLI,SRAI的OP-IMM和funct3编码皆相同,...举例区分算术右移和逻辑右移 注意区分算术右移和逻辑右移,例如1100_1100(这里以8-bit数进行说明,RV32I中寄存器中实际存储的数为32-bit), 1100_1100算术右移三位,结果为1111...注意U-type中的指令opcode是不相同的。与I-type相同的,U-type对应的immediate,固定为20位,被命名为U-immediate[31:12],如图5所示。...RISC-V选择了非对称立即拆分(常规指令中为12位,再加上20位特殊的上载立即指令,比如LUI),以增加可用于常规指令的操作码空间 [1]。...AUIPC和JALR(后续文章会进行介绍)中的12位立即数的组合可以将控制权转移到任何32位PC相对地址,而AUIPC加上常规加载或存储指令中的12位立即数偏移量可以访问任何32位PC相对的数据地址。
寄存器数据类型的关键字是reg.通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。Verilog HDL语言提供了功能强大的结构语句使设计者能有效地控制是否执行这些赋值语句。...其格式如下: reg [n-1:0] 存储器名[m-1:0];或 reg [n-1:0] 存储器名[m:1]; 在这里,reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器...基本的算术运算符 在Verilog HDL语言中,算术运算符又称为二进制运算符,共有下面几种: 1) + (加法运算符,或正值运算符,如 rega+regb,+3) 2) - (减法运算符,或负值运算符...注意:在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x。 位运算符 Verilog HDL作为一种硬件描述语言,是针对硬件电路而言的。...这是因为在计算拼接信号的位宽的大小时必须知道其中每个信号的位宽。位拼接还可以用重复法来简化表达式。见下例: {4{w}} //这等同于{w,w,w,w} 位拼接还可以用嵌套的方式来表达。
在上一篇笔记中介绍的是连续分配,包括固定分区分配和动态分区分配。但前者容易产生内部碎片,后者容易产生外部碎片(虽然可以用紧凑技术解决,但是有一定的成本),都不是理想的解决方案。...页面、页框 页框:具体来说,把内存分割为多个固定大小 X 的部分,这些部分就叫做页框/页帧/物理块/内存块,每个页框会有一个数字编号,第一个页框就从 0 开始 页面:同样,进程分割为多个固定大小 X 的部分...当然,由于成本的关系,快表不会做得很大,但对于中小型作业来说也已经足够,只是对于大型作业来说,不太可能把全部页表项都存放到快表中。 某系统使用基本分页存储管理,并采用了具有快表的地址变换机构。...因此对于单个页表项,它至少要用一个 20 位二进制数才能表示这样的一个内存块号,而一个字节 8 位,所以至少要三个字节才可以表示这样的一个内存块号。...假设仍然是用 32 位二进制数表示逻辑地址,此时,地址的前 16 位将表示段号,后 16 位表示段内偏移量: 由于段号是 16 位二进制数,也就是说段号有 2^16^ 种取值,即每个进程最多最多可以被分为
在 8086 架构中,所有的内部寄存器、内部以及外部总线都是 16 位宽,可以存储两个字节,因为是完全的 16 位微处理器。...8086 CPU 可以一次存储两种类型的数据 字节(byte):一个字节由 8 bit 组成,这是一种恒定不变的存储方式 字(word):字是由指令集或处理器硬件作为单元处理的固定大小的数据,对于 intel...索引寄存器 索引寄存器主要包含段地址的偏移量,索引寄存器主要分为 BP(Base Pointer):基础指针,它是栈寄存器上的偏移量,用来定位栈上变量 SP(Stack Pointer): 栈指针,它是栈寄存器上的偏移量...1 - 开启,0 - 关闭 进位 (Carry) : 设置最后一个无符号算术运算是否带有进位 溢出 (Overflow) : 设置最后一个有符号运算是否溢出 符号 (Sign) : 如果最后一次算术运算为负...❞ 寄存器的最大宽度为 16 位 ❝这个寄存器的最大宽度值就是通用寄存器能处理的二进制数的最大位数 ❞ 寄存器和运算器之间的通路为 16 位 ❝这个指的是寄存器和运算器之间的总线,一次能传输 16 位的数据
CPU 内部还有一些组件,常见的有寄存器、控制单元和逻辑运算单元等。其中,控制单元负责控制 CPU 工作,逻辑运算单元负责计算,而寄存器可以分为多种类,每种寄存器的功能又不尽相同。...CPU 中的寄存器主要作用是存储计算时的数据,你可能好奇为什么有了内存还需要寄存器?...这个自增的大小,由 CPU 的位宽决定,比如 32 位的 CPU,指令是 4 个字节,需要 4 个内存地址存放,因此「程序计数器」的值会自增 4; 简单总结一下就是,一个程序执行的时候,CPU 会根据程序计数器里的内存地址...不同的 CPU 有不同的指令集,也就是对应着不同的汇编语言和不同的机器码,接下来选用最简单的 MIPS 指集,来看看机器码是如何生成的,这样也能明白二进制的机器码的具体含义。...一起具体看看这三种类型的含义: R 指令,用在算术和逻辑操作,里面由读取和写入数据的寄存器地址。
2.2.3 存储器 系统存储器就是用于存储数据的一长排存储箱。存储箱中的每个单元都有一个唯一数字地址。所有单元的大小相同,在现代计算机中,通常是一个由八8个位构成的字节。...2.2.3 寄存器 所有的CPU都拥有一定数量的被称作寄存器的存储单元。寄存器的读写速度非常快——比其他任何类型的存储器访问速度都快。...冯·诺依曼计算机组成 原始树莓派内部的ARM11处理器拥有16个可用于通用程序设计的寄存器,其中3个具有特殊功能。还有两个寄存器作为状态寄存器使用。 ...指令集中的机器指令按功能分组:(从/向存储器中以及寄存器之间的)数据转移类指令;算术运算类指令;逻辑操作类指令;(读状态位或控制位的)位操作类指令等。...对于二进制,常常在数的后面加一个字母b或B。例如:011010B 对于二进制常常使用前缀0b。例如:0b011010。 有时也能见到在二进制数前添加前缀%,例如:%011010。
领取专属 10元无门槛券
手把手带您无忧上云