C运算优先级,存储器相关知识总结_第1页
C运算优先级,存储器相关知识总结_第2页
C运算优先级,存储器相关知识总结_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、忧先破运tr符名称威含义便用形式结合办网说明1(1数组下标数组名常呈表达式左到右0回括号(衰达式)/函数名(形參成员选择(对象)对彖成员名->成员选择(指针)对象指针成员名2-负号运算符棗达式右刃左单目运算符(类型)鸭編茨型转换(數爲类型康达式+自t®l«符+茨18名伎量名+单目运算符自滅运算符咳星名伐量名卑目运篡符KP.ffiizM 符捋卄表fit单目运蜕?5&取地址运算符返量名卑目运笑符1逻辐王运算符|表达式单目运筑符強位取反运算符表达式車目运算符sizeof长度运直符sizeof(表达式)3/除表达式蔗达式左到右双目运算符乗表达式宅磁式双目运萱符%余数1

2、取視)整型表达式理型表达式双目运算符4+加表达式+表达式左到右孜目运篡符-減表达式眾达式双目运算袴5«左移支量v表达式左到右双目运篡符»右移如 表达式双目运算符6>大于蔻达式蔻达式左到右孜目运篡符>=大于等于表达式X表达式双目运算符<蔻达式 蔻达式敦目运且符<小于等于表达式<表达式双目运算符7 等于衷达式衷达式左到右双目运算符!不等于表达式! 袁达式取目运算符8&筱位与表达式逐达式左确或目运算符9s按位异戒表达式八表达式左确取目运篦符101按位或表达式1表达式左到右双目运氢符11&&逻辑与表达式&避达式左到右双目

3、运算符12II表达式II表达式左到右双目运算符13?:条件运算符表达式1?表达式2:表达 式3石到左三目运算符14=賦值运算符芟星二表达式石到左/-附后賦值交呈/表达式乘后賦值吏呈* 衷达式%取模后赋值吏呈 表达式+加后賦值变量+表达式.83減后賦值吏虽亠袤达式«=左移后赋值受量v<=表达式»=右移后赋值受鱼X表达式按位与后赋值变量&=表达式八=找位异或后賦佰表达式1=按位威后赋值吏量1=表达式15逗目运算符表达式,表达式,左到右从左向右顺序 运算存储器一般 16 位,一个字节占 8 位基本类型Bool大小(字节)1Char1Signed char1Unsig

4、ned char1short2Unsigned short2Int4Unsigned int4Long4Unsigned long4Long long8Unsigned long long8Float4Double8Long double8Wchar t2EAX寄存器以称为累加器, AX寄存器是算术运算的主要寄存器, 所有的输入、输出只使用 AL或 AX人作 为数据寄存器。 在 80386 及其以上的微处理器中, EAX 寄存器可以用来存储单元的偏移地址。 EAX 可称为数据 寄存器,你除了直接访问外, 还可分别对其高十六位和低十六位进行访问。 它们的低十六位就是把它们前边儿的 E 去掉, 即

5、 EAX 的低十六位就是 AX 。 而且它们的低十六位又可以分别进行八位访问,也就是说,AX 还可以再进行分解,即 AX还可分为 AH (高八位) AL( 低八位)。寄存器定义寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、 数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器 (IR) 和程序计数器 (PC) 。在中央处理器的 算术及逻辑部件中,包含的寄存器有累加器 (ACC) 。寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位 元数量来估量, 举例来说, 一个 “8 位元寄存器 ”或 “32 位

6、元寄存器 ”。寄存器现在都以寄存器档案的方式来实作, 但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为 “架构 寄存器 ”。例如, x86 指令集定义八个 32 位元寄存器的集合,但一个实作 x86 指令集的 CPU 可以包含比八个更多 的寄存器。寄存器是 CPU 内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。特点及原理寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数 据。但同存储器相比,寄存器

7、又有自己独有的特点: 寄存器位于 CPU 内部,数量很少,仅十四个; 寄存器所能存储的数据不一定是 8bit ,有一些寄存器可以存储 16bit 数据,对于 386/486 处理器中的一些 寄存器则能存储 32bit 数据;每个内部寄存器都有一个名字,而没有类似存储器的地址编号。寄存器的功能十分重要, CPU 对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处 理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过 “端口 ”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为 “端口 ”,这种说法不太严格,但经常 这样说

8、。外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的 0、1 状态反 映了外部设备的工作状态或方式; 还有一些寄存器中的各个位可对外部设备进行控制; 也有一些端口作为 CPU 同 外部设备交换数据的通路。所以说,端口是 CPU和外设间的联系桥梁。 CPU对端口的访问也是依据端口的 “编号 ” (地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安 排了 1024 个端口地址,端口地址范围为 0-3FFH 。寄存器用途1. 可将寄存器内的数据执行算术及逻辑运算;2. 存于寄存器内的地址可用来指向内存的某个位置,即寻址;3

9、. 可以用来读写数据到电脑的周边设备。数据寄存器8086 有 14 个 16 位寄存器,这 14 个寄存器按其用途可分为 (1) 通用寄存器、 (2)指令指针、 (3)标志寄 存器和 (4)段寄存器等 4 类。(1) 通用寄存器有 8个, 又可以分成 2组,一组是数据寄存器 (4 个),另一组是指针寄存器及变址寄存器 (4个). 顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行 造成很大的影响。数据寄存器分为 :AH&AL AX(accumulator) :累加寄存器,常用于运算 ;在乘除等指令中指定用来存放操作数,另外 ,所有的 I/O

10、指令都使用这一寄存器与外界设备传送数据 .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 ):堆栈指针,与

11、 SS 配合使用,可指向目前的堆栈位置;BP( Base Pointer ):基址指针寄存器,可用作 SS 的一个相对基址位置;SI ( Source Index ):源变址寄存器可用来存放相对于 DS 段之源变址指针;DI ( Destination Index ):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。这4个 16位寄存器只能按 16位进行存取操作, 主要用来形成操作数的地址, 用于堆栈操作和变址运算中计 算操作数的有效地址。(2) 指令指针 IP(Instruction Pointer)指令指针 IP 是一个 16 位专用寄存器, 它指向当前需要取出的指令字节, 当

12、BIU 从内存中取出一个指令字节 后, IP 就自动加 1 ,指向下一个指令字节。注意, IP 指向的是指令地址的段内地址偏移量,又称偏移地址 (Offse t Address) 或有效地址 (EA , Effective Address) 。(3) 标志寄存器 FR(Flag Register)8086 有一个 18 位的标志寄存器 FR,在 FR中有意义的有 9位,其中 6 位是状态位, 3位是控制位。OF: 溢出标志位 OF 用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能 表示的范围,则称为溢出, OF 的值被置为 1,否则, OF 的值被清为 0。DF:方向

13、标志 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 处于单步执行

14、指令的工作方式,此时每执行完一条指令,就显示 CPU 内各个寄存 器的当前值及 CPU 将要执行的下一条指令。( 2)如果 TF=0 ,则处于连续工作模式。SF:符号标志 SF 用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用 补码表示法,所以, SF 也就反映运算结果的正负号。运算结果为正数时,SF 的值为 0,否则其值为 1。当运算结果没有产生溢出时,运算结果等于逻辑结果(即因该得到的正确的结果),此时SF 表示的是逻辑结果的正负,当运算结果产生溢出时,运算结果不等于逻辑结果,此时的 SF 值所表示的正负情况与逻辑结果相反,即: SF=0 时,逻辑结果为负,

15、SF=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 主要用来反映无符号数运算是否产生进位或借位。如果运算结果的最高位产生了一个进位

16、或借位,那么,其值为 1,否则其值为 0 。(4) 段寄存器 (Segment Register)为了运用所有的内存空间, 8086 设定了四个段寄存器,专门用来保存段地址:CS( Code Segment ):代码段寄存器;DS( Data Segment ):数据段寄存器;SS( Stack Segment ):堆栈段寄存器;ES( Extra Segment ):附加段寄存器。当一个程序要执行时, 就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将 DS 固定,而根据需要修改 CS。所以,程序可以在可寻址空间小于64K的情况

17、下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在 DS 所指的 64K 内,这就是 COM 文件 不得大于 64K 的原因。 8086 以内存做为战场,用寄存器做为军事基地,以加速工作。以上是 8086 寄存器的整体概况 , 自 80386 开始, PC 进入 32bit 时代,其寻址方式,寄存器大小,功能等都 发生了变化。= 以下是 80386 的寄存器的一些资料 =寄存器都是 32-bits 宽。A、通用寄存器 下面介绍通用寄存器及其习惯用法。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修 改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计

18、算。EAX:通用寄存器。相对其他寄存器,在进行运算方面比较常用。在保护模式中,也可以作为内存偏移指针(此时, DS 作为段 寄存器或选择器)EBX:通用寄存器。通常作为内存偏移指针使用(相对于EAX、ECX、EDX), DS是默认的段寄存器或选择器。在保护模式中,同样可以起这个作用。ECX:通用寄存器。通常用于特定指令的计数。在保护模式中,也可以作为内存偏移指针(此时,DS 作为寄存器或段选择器)。EDX:通用寄存器。在某些运算中作为EAX 的溢出寄存器(例如乘、除)。在保护模式中,也可以作为内存偏移指针(此时, DS 作为段 寄存器或选择器)。同 AX 分为 AH&AL 一样,上述寄

19、存器包括对应的 16-bit 分组和 8-bit 分组。B、用作内存指针的特殊寄存器ESI :通常在内存操作指令中作为 “源地址指针 ”使用。当然, ESI 可以被装入任意的数值,但通常没有人把它 当作通用寄存器来用。 DS 是默认段寄存器或选择器。EDI :通常在内存操作指令中作为 “目的地址指针 ”使用。当然, EDI 也可以被装入任意的数值,但通常没有人 把它当作通用寄存器来用。 DS 是默认段寄存器或选择器。EBP和 ESP:作为指针的寄存器,也可作为 16位寄存器 BP, SP使用,常用于椎栈操作。通常,它被高级语 言编译器用以建造 堆栈帧 '来保存函数或过程的局部变量,不过

20、,还是那句话,你可以在其中保存你希望的任何 数据。 SS 是它的默认段寄存器或选择器。注意,这四个寄存器没有对应的 8-bit 分组。换言之,你可以通过 SI、DI 、BP、 SP 作为别名访问他们的低 1 6 位,却没有办法直接访问他们的低 8 位。C、段选择器: 实模式下的段寄存器到保护模式下摇身一变就成了选择器。不同的是,实模式下的 “段寄存器 ”是 16-bit 的, 而保护模式下的选择器是 32-bit 的。CS 代码段,或代码选择器。同 IP 寄存器 ( 稍后介绍 ) 一同指向当前正在执行的那个地址。处理器执行时从这 个寄存器指向的段(实模式)或内存(保护模式)中获取指令。除了跳转

21、或其他分支指令之外,你无法修改这个 寄存器的内容。DS 数据段,或数据选择器。这个寄存器的低 16 bit 连同 ESI 一同指向的指令将要处理的内存。同时,所有 的内存操作指令 默认情况下都用它指定操作段 (实模式)或内存 (作为选择器,在保护模式。这个寄存器可以被装 入任意数值,然而在这么做的时候需要小心一些。方法是,首先把数据送给AX,然后再把它从 AX 传送给 DS(当然,也可以通过堆栈来做 ).ES 附加段,或附加选择器。这个寄存器的低 16 bit 连同 EDI 一同指向的指令将要处理的内存。同样的,这 个寄存器可以被装入任意数值,方法和 DS 类似。FS F段或 F选择器 (推测

22、 F可能是 Free?) 。可以用这个寄存器作为默认段寄存器或选择器的一个替代品。它 可以被装入任何数值,方法和 DS 类似。GS G段或 G选择器 (G 的意义和 F一样,没有在 Intel 的文档中解释 )。它和 FS几乎完全一样。SS 堆栈段或堆栈选择器。 这个寄存器的低 16 bit 连同 ESP一同指向下一次堆栈操作 (push 和 pop) 所要使用 的堆栈地址。这个寄存器也可以被装入任意数值,你可以通过入栈和出栈操作来给他赋值,不过由于堆栈对于很 多操作有很重要的意义,因此,不正确的修改有可能造成对堆栈的破坏。* 注意 一定不要在初学汇编的阶段把这些寄存器弄混。他们非常重要,而一

23、旦你掌握了他们,你就可以对 他们做任意的操作了。段寄存器,或选择器,在没有指定的情况下都是使用默认的那个。这句话在现在看来可能 有点稀里糊涂,不过你很快就会在后面知道如何去做。D、指令指针寄存器:EIP 这个寄存器非常的重要。这是一个 32 位宽的寄存器 ,同 CS 一同指向即将执行的那条指令的地址,存 放指令的偏移地址。微处理器工作于实模式下,EIP 是 IP( 16 位)寄存器。不能够直接修改这个寄存器的值,修改它的唯一方法是跳转或分支指令。 (CS 是默认的段或选择器 )E、标志寄存器 EFREFR( extra flags register )包括状态位、 控制位和系统标志位, 用于指

24、示微处理器的状态并控制微处理器的 操作。 80486 CPU 标志寄存器如图 2.12 所示。 状态标志位:包括进位标志 CF、奇偶标志 PF、辅助进位标志 AF、零标志 ZF 、符号标志 SF 和溢出标志 OF。 控制标志位:包括陷阱标志(单步操作标志)TF、中断标志IF 和方向标志 DF。80486 CPU 标志寄存器中的状态标志位和控制标志位与 8086 CPU标志寄存器中的状态标志 位和控制标志位的功能完全一样,这里就不再赘述。 系统标志位和 IOPL 字段:在 EFR 寄存器中的系统标志 和 IOPL 字段,用于控制操作系统或执行某种操作。它们不能被应用程序修改。IOPL ( I/O

25、 privilege level field ):输入/输出特权级标志位。它规定了能使用 I/O 敏感指令的特权级。在保 护模式下,利用这两位编码可以分别表示 0, 1, 2, 3 这四种特权级, 0 级特权最高, 3 级特权最低。在 80286 以 上的处理器中有一些 I/O 敏感指令,如 CLI (关中断指令)、 STI(开中断指令)、 IN (输入)、 OUT(输出)。 IOPL 的值规定了能执行这些指令的特权级。只有特权高于 IOPL 的程序才能执行 I/O 敏感指令,而特权低于 IOP L 的程序,若企图执行敏感指令,则会引起异常中断。NT( nested task flag ):任

26、务嵌套标志。在保护模式下,指示当前执行的任务嵌套于另一任务中。当任务 被嵌套时, NT 1,否则 NT0。RF(resume flag ):恢复标志。与调试寄存器一起使用,用于保证不重复处理断点。当RF 1 时,即使遇到断点或故障,也不产生异常中断。VM( virtual 8086 mode flag ):虚拟 8086 模式标志。用于在保护模式系统中选择虚拟操作模式。VM1,启用虚拟 8086 模式; VM 0,返回保护模式。AC( alignment check flag ):队列检查标志。如果在不是字或双字的边界上寻址一个字或双字,队列检查 标志将被激活。上面是最基本的寄存器。下面是一些

27、其他的寄存器,你甚至可能没有听说过它们。( 都是 32 位宽 ):CR0, CR2, CR3(控制寄存器 ) 。举一个例子, CR0 的作用是切换实模式和保护模式。 还有其他一些寄存器, D0, D1, D2, D3, D6 和 D7( 调试寄存器 )。他们可以作为调试器的硬件支持来设置条 件断点。TR3, TR4, TR5, TR6 和 TR? 寄存器 (测试寄存器 ) 用于某些条件测试。寄存器分类数据寄存器 - 用来储存整数数字(参考以下的浮点寄存器)。在某些简单/ 旧的 CPU,特别的数据寄存器是累加器,作为数学计算之用。地址寄存器 - 持有存储器地址,以及用来访问存储器。在某些简单/ 旧的 CPU 里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。通用目的寄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论