社区
汇编语言
帖子详情
寄存器的使用???
jacky_shen
2004-07-09 09:40:20
有时候需要将数值保存起来,暂时存放一下,假设使用的是寄存器来保存数值,那哪些寄存器可以使用,应该如何使用,以及使用哪个寄存器???
这个方面感到疑惑。
...全文
117
5
打赏
收藏
寄存器的使用???
有时候需要将数值保存起来,暂时存放一下,假设使用的是寄存器来保存数值,那哪些寄存器可以使用,应该如何使用,以及使用哪个寄存器??? 这个方面感到疑惑。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zkxz
2004-07-09
打赏
举报
回复
楼主什么意思?只要做好压栈和恢复工作,几乎所有的通用寄存器都可以用来暂时存放数值啊!
楼主最好举个例子把问题说清除。
jacky_shen
2004-07-09
打赏
举报
回复
To: ldarmy(至)
每个寄存器的名称和功能我知道。
我想问的是有时候需要将数值保存起来,暂时存放一下,那哪些寄存器可以使用,应该如何使用,以及使用哪个寄存器???
dunkel
2004-07-09
打赏
举报
回复
不清楚你的使用环境. 不过, 在自己的子程中, 使用到的寄存器, 最好先压栈保存, 在临退出子程时再出栈恢复, 当然, 一般的 DX:AX 这样的用于子程返回结果的寄存器可以例外. 所以, 可以使用任意的通用寄存器, 只要有适当的 "保存-恢复" 措施. 其实, 如果简单的保存的话, 也可以直接压栈的, 到用的时候再弹出到个寄存器之类的地方.
SDFDSAC
2004-07-09
打赏
举报
回复
1.80386的的寄存器:
80386的寄存器可以分为8组:通用寄存器,段寄存器,指令指针寄存器,标志寄存器,系统地址寄存器,控制寄存器,调试寄存器,测试寄存器,它们的宽度都是32位的。本篇主要介绍80386的寄存器。
A1.General Register(通用寄存器)
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它们的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
EAX:累加器
EBX:基址寄存器
ECX:计数器
EDX:数据寄存器
ESI:源地址指针寄存器
EDI:目的地址指针寄存器
EBP:基址指针寄存器
ESP:堆栈指针寄存器
这些寄存器可以将低16位单独存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取这些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它
们的高16位不受影响,同时和8086一样对于AX,BX,CX,DX这四个寄存器来讲,可以单独存取它们的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)
A2:Segment Register(段寄存器)
除了8086的4个段外(CS,DS,ES,SS),80386还增加了两个段FS,GS,这些段寄存器都是16位的,它们的含义如下:
CS:代码段(Code Segment)
DS:数据段(Data Segment)
ES:附加数据段(Extra Segment)
SS:堆栈段(Stack Segment)
FS:附加段
GS 附加段
A3:Instruction Pointer(指令指针寄存器)
EIP,它的低16位就是8086的IP,它存储的是下一条要执行指令的地址。
A4:Flag Register(标志寄存器)
EFLAGS,和8086的16位标志寄存器相比,增加了4个控制位,不过这4个控制位它们在实模下不起作,这四个控制位分别是:
a.IOPL(I/O Privilege Level),I/O特权级字段,它的宽度为2bit,它指定了I/O指令的特权级。如果当前的特权级别在数值上小于或等于IOPL,那么I/O指令可执行。否则,将发生一个保护性异常。
b.NT(Nested Task):控制中断返回指令IRET,它宽度为1位。NT=0,用堆栈中保存的值恢复EFLAGS,CS和EIP从而实现中断返回;NT=1,则通过任务切换实现中断返回。
c.RF(Restart Flag):重启标志,它的宽度是1位。它主要控制是否接受调试故障。RF=0接受,RF=1忽略。如果你的程序每一条指令都被成功执行,那么RF会被清0。而当接受到一个非调试故障时,处理器置RF=1。
d.VM(Virtual Machine):虚拟8086模式(用软件来模拟8086的模式,所以也称虚拟机)。VM=0,处理器工作在一般的保护模式下;VM=1,工作在V8086模式下。
其它16个标志位的含义和8086一样,在这里也重温一遍:
e.CF(Carry Flag):进位标志位,由CLC,STC两标志位来控制
f.PF(Parity Flag):奇偶标志位
g.AF(Assistant Flag):辅助进位标志位
h.ZF(Zero Flag):零标志位
i.SF(Singal Flag):符号标志位
j.IF(Interrupt Flag):中断允许标志位,由CLI,STI两条指令来控制
k.DF(Direction Flag):向量标志位,由CLD,STD两条指令来控制
l.OF(Overflow Flag):溢出标志位。
用法书上都有啊
SDFDSAC
2004-07-09
打赏
举报
回复
To: jacky_shen(jacky)
如何使用?任何一本书上都有啊
用哪个?要看具体情况了~~~
ARM-
寄存器
嵌入式开发,ARM的汇编编程,本质上就是针对CPU
寄存器
的编程,所以我们首先要弄清楚ARM有哪些
寄存器
?这些
寄存器
都是如何
使用
的?
gdb 如何查看堆栈信息和
寄存器
信息?
gdb 如何查看堆栈信息和
寄存器
信息?
stm32是如何将
寄存器
值通过标准库写入
寄存器
的?
stm32是如何将配置从库函数调用一步一步到
寄存器
的?0. 前言1.综述1.1 流程2.正式开始2.1 LED库函数初始化2.2 GPIO_TypeDef2.3 GPIOA的访问方法2.4 GPIO_Init函数3.总结 0. 前言 在平时的学习和工作中,可能很少有...
查看cuda编译时
寄存器
数量?
如何查看cuda编译时的
寄存器
的数量? 有两种方法: 1. nsight调试,进行查看。 2. 设置编译选项,如下图所示: 然后,进行编译,会产生如下编译信息。 其中,倒数第三行,可见
寄存器
的数量! 转载于:...
UVM中批量修改
寄存器
值?set+update?
如何批量修改
寄存器
模型的desired value?set+update? 在编写测试用例中,我们很多时候都需要通过
寄存器
做访问,难免需要配置硬件中各个
寄存器
的值。write( ) 方法是可以直接设置
寄存器
的真实值(设置硬件中
寄存器
的...
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章