×

汇编程序员可见的寄存器

汇编程序员可见的寄存器(32位汇编里一共有哪些寄存器以及它们的作用,比如cr0,gs,gdtr,等等)

admin admin 发表于2024-01-21 05:17:47 浏览27 评论0

抢沙发发表评论

大家好,如果您还对汇编程序员可见的寄存器不太了解,没有关系,今天就由本站为大家分享汇编程序员可见的寄存器的知识,包括32位汇编里一共有哪些寄存器以及它们的作用,比如cr0,gs,gdtr,等等的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

32位汇编里一共有哪些寄存器以及它们的作用,比如cr0,gs,gdtr,等等

在32位汇编中,对于工作于ring3的应用程序来说,cr0,gdtr等寄存器是不可见的,可用的寄存器有eax,ebx,ecx,edx,esi,edi,esp,ebp等其中eax-edx还可以以ax进行16位调用,ah,al进行8位调用,esi,edi主要用于串操作,esp用于存放堆栈栈顶地址,ebp用于存放堆栈基址。其余寄存器的作用在32位中没有专门的规定(不过api函数的返回值统一存放于eax中)另外ebx,esi,edi,ebp,esp这几个寄存器的在使用后要由使用者负责恢复调用前的值

以下几种寄存器,软件程序员可用的是()

【答案】:A通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。状态寄存器又名条件码寄存器,它是计算机系统的核心部件--运算器的一部分.状态寄存器用来存放两类信息:一类是体现当前指令执行结果的各种状态信息(条件码),如有无进位(CF位)、有无溢出(OV位)、结果正负(SF位)、结果是否为零(ZF位)、奇偶标志位(P位)等;另一类是存放控制信息(PSW:程序状态字寄存器),如允许中断(IF位)、跟踪标志(TF位)等。有些机器中将PSW称为标志寄存器FR(FlagRegister)。

编写汇编语言程序时,下列寄存器中程序员可访问是( )

【答案】:D为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它起始地址,即程序一条指令所在内存单元地址送入PC,因此程序计数器(PC)内容即是从内存提取第一条指令地址。当执行指令时,CPU将自动修改PC内容,即每执行一条指令PC增加一个量,这个量等于指令所含字节数,以便使其保持总是将要执行下一条指令地址。由于大多数指令都是按顺序来执行,所以修改过程通常只是简单对PC加1。当程序转移时,转移指令执行最终结果就是要改变PC值,此PC值就是转去地址,以此实现转移。有些机器中也称PC为指令指针IP(Instruction Pointer)。

通用寄存器有哪些

1、数据寄存器

数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

2、变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

3、指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。

4、段寄存器

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。

5、指令指针寄存器

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。 指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。

扩展资料

寄存器是CPU内部重要的数据存储资源,用来暂存数据和地址,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。

寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。

另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。

参考资料来源:百度百科-通用寄存器

MC9S12XS128实验开发板GPIO初始化都涉及到哪些寄存器,这些寄存器的名称和作用

MC9S12XS128实验开发板GPIO初始化都涉及到寄存器,这些寄存器的名称和作用:ATDnCTLx表示多组ATD中的第n组,控制寄存器x。

寄存器是CPU内部重要的数据存储资源,汇编程序员能直接使用的硬件资源。由于寄存器的存取速度比内存快,用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,避免把中间结果存入内存,再读取内存的操作。

基本含义

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。

汇编语言中所有寄存器的作用

寄存器有点多,介绍常用的,通用寄存器8个,EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP,最后+eip+EFL;eax多用于计算,函数的返回值等;ecx多用于计数(count),比如循环中的那个计数,结合eax,ESI,edi。ebp用于堆栈指针追踪,指低(debug版本),esp用于堆栈跟踪,多跟ebp一起使用(指向顶部,最高,也就是最前)。esi,edi多用于复制内存。eip就是固定作用了,CPU指令全靠它了,指那打哪。efl就是标志寄存器了,16位就够用了,现在64位,完全空着呢,比如位溢出(两个计算数据太大溢出,不够减溢出),凡是条件(除了变态的jmp),无论if,while等,还是运算,或者符号位(数据是正还是负),或者数据检查,奇偶等,都是看它的。也就是说,无论CPU运算还是控制,都看它对应的不同位。下面给你通用寄存器几个例子:假如eax的值为10,要将一块内存赋值为cc,循环10次,而EDI里面是内存地址的话,那么代码就是:mov EAX,0Xccmov ecx,0xarep stos byte ptr 这样,内存就全部被成为“ccccccccccccccccc”,这样的代码到处都是,尤其没有初始化之后,就能见到这样的CC,中文显示就是“烫烫烫”.从一个内存赋值到另一个内存地址是这样的,假如esi是指针p1的地址,edi是指针p2的地址,那么*p2=*p1就是:rep movs byte ptr es:所以,edi,ESI,以及EBX,

汇编程序中,程序员可以访问的寄存器 A程序计数器(PC) B指令寄存器(IR) C存储器数据寄存器(MDR)

选A。程序计数器,也叫IP(EIP),用来存储下一条指令的地址。可以通过call,jmp等跳转指令间接改变,可以用Move,push等读出其值,但是不可写。指令寄存器(IR )用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到内存数据寄存器(MDR)中,然后再传送至IR。主存与CPU之间的硬连接:主存与CPU的硬连接有三组连线:地址总线(AB)、数据总线(DB)和控制总线(CB)。把主存看作一个黑盒子,存储器地址寄存器(MAR)和存储器数据寄存器(MDR)是主存和CPU之间的接口。MAR可以接收由程序计数器(PC)的指令地址或来自运算器的操作数的地址,以确定要访问的单元。MDR是向主存写入数据或从主存读出数据的缓冲部件。MAR和MDR从功能上看属于主存,但通常放在CPU内。

累加寄存器对程序员可见吗

累加寄存器对程序员不可见。程序员不可见也就是说程序员不能利用编程语言来操作这些寄存器。只有汇编语言才能操作寄存器,高级语言比如C/C++、Java都不能直接对寄存器进行编程。

关于汇编程序员可见的寄存器和32位汇编里一共有哪些寄存器以及它们的作用,比如cr0,gs,gdtr,等等的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。