文档章节

初学 Delphi 嵌入汇编[15] - 需要保护的寄存器

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 216
阅读 7
收藏 0
前面提到 32 位的寄存器有: EAX EBX ECX EDX ESP EBP ESI EDI; 其中, EAX ECX EDX 是自由使用的.

那么剩下的 EBX ESP EBP ESI EDI 五个寄存器就是应该保护的!
所谓保护, 并不是不可以使用, 而是在使用前先把其中的值寄存在另外一个地方, 用完后再恢复其值.
如果不这样做, 有可能会发生意想不到的错误.

举例:
//使用应该保护的 ebx 寄存器
function Fun(x: Integer): Integer;
asm
  push ebx           {push 是入栈指令, 栈就是系统自动分配的内存}
  mov  ebx, x
  inc  ebx
  mov  @Result, ebx
  pop  ebx           {pop 是出栈指令, 也就是恢复 ebx 寄存器原来的值}
end;


//测试
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := Fun(8);
  ShowMessage(IntToStr(i)); {9}
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/01/25/1053490.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
MIPS32 backtrace

在嵌入式开发过程中,经常会遇到出问题了想知道函数调用关系,不过目前我用到的toochain的Libc提供的backtrace只能出来2层,所以就只好另外写代码来backtrace。目前嵌入式mips32在gcc编译器上...

lgl88911
2014/04/11
0
0
嵌入式开发笔记(七) ARM汇编指令集基础3

1.协处理器和协处理器指令详解 mcr & mrc mrc用于读取CP15中的寄存器 mcr用于写入CP15中的寄存器 1.2什么是协处理器? 1.SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任...

每天在改变
2016/12/27
18
0
C语言嵌入式系统编程修炼之性能优化

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/31
0
0
ARM嵌入式开发中的GCC内联汇编简介

ARM嵌入式开发中的GCC内联汇编简介 嵌入式开发交流群280352802,欢迎加入! 在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了...

长平狐
2013/06/03
70
1
使用C/Delphi编写ShellCode

来源:http://www.bootkitz.com/?p=93 文章谈的很好 这里说的ShellCode指的是一段x86机器码,无需重定位,在内存任何位置都可以执行的代码. 使用C/Delphi编写代码也是由其编译器特性决定的。...

BlAckEagle
2013/01/21
0
5

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
4
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
3
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部