SPARC架构下的反汇编(三)——SPARC汇编语言
1.Load&Store Architecture (存取架构)
SPARC架构只能对存储在寄存器中的数据执行运算(例如算术和逻辑功能)。需要使用单独的指令将数据从存储器移至寄存器(Load),然后移回存储器(Store)。例如:
load x,r1
load y,r2
add r1,r2,r3
store r3,z
x,y,z代表存储器,r1,r2,r3代表寄存器。这其实和x86是一样的,x86架构下也需要先把存储器操作数加载到寄存器中变成寄存器操作数后才能进行运算。
每个SPARC指令要么进行内存访问,要么进行计算。这个设计使得每条指令固定在一个机器周期内执行。 如果所有(或大多数)数据都可以保存在寄存器中,则此架构效果最佳。为此,SPARC提供了大量的寄存器。后面会讲到SPARC的寄存器。
2.指令结构
一条指令有三个操作数(32位),操作数有两种:寄存器和立即数。
伪指令:有些指令如cmp, jmp等,其操作数只有1个或者2个,通过查指令表可以得到其三操作数等价指令。
[xxx] :表示对地址xxx所存放的内容进行操作。
3.Integer Register(整型寄存器)
每个运行的进程可以访问32个整型寄存器。 (稍后将讨论浮点寄存器。)每个整数寄存器包含一个WORD(32位)的数据(最新版为64位),寄存器分为4组,每组8个寄存器。寄存器的名称以%符号开头。
任何使用整数寄存器的指令都可以使用任何一个寄存器。但是,某些寄存器有特殊用途。例如,“ in”和“ out”寄存器用于向/从子例程传递参数。 “本地”寄存器通常用于子例程的本地数据,而“全局”寄存器用于由多个子例程共享的数据。当对双字(64位)数据进行操作时,将使用一对寄存器。在指令中,程序员指定该对的低位寄存器;然后,指令将在该寄存器和具有下一个更高编号的寄存器上进行操作。从低位编号的寄存器应为偶数编号的意义上说,寄存器对必须对齐。例如,指定%g2将是合法的,并且将指示寄存器对%g2和%g3。最高有效字将在%g2中,最低有效字将在%g3中。对于双字数据操作的指令,指定%g3将是错误的。
值得注意的是图片右侧的提示,%g0取值恒为0,多用来进行条件判断。在调用函数前看到的传参过程一般是对%o0%o1……进行赋值,进入被调用的函数中,传入参数变为了在%i0%i1……中 。这其实并不是存参数的寄存器发生了变化,而是SPARC特殊的滑动窗口模式导致的,其实是同一批寄存器,但在不同的环境中作为不同类型的寄存器使用。下面对滑动窗口模式进行解释:
处理器上有很多寄存器,但一个例程只能访问其中的32个(“in”、“out”、“local”和“global”集合,每组8个寄存器)。
通过窗口可见的24个寄存器是“in”、“local”和“out”寄存器(3组,每组8个寄存器)。“全局”寄存器不参与窗口机制。只有8个“全局”寄存器,其中任何一个(如%g3)都可以随时从任何地方访问。但是,对“in”、“local”或“out”寄存器(如“%i3”)的引用是上下文相关的。也就是说对于不同的例程(其实就是函数),%g寄存器是通用的,但是%i,%o,%l是不同的。其中%i就是上层函数的%o。
SPARC也通过这种方式完成了传参和返回返回值。“save”指令(通常是任何例程中的第一条指令,在其他任何地方都不会使用)会导致创建16个新的“out”和“local”寄存器。“restore”指令(这是任何例程中的最后一条指令)导致寄存器消失。流程如下:
•调用者将要传递给被调用例程的数据放在其“out”寄存器中。
•调用新的例程(称之为“foo”)。foo例程执行“save”指令,从而移动寄存器窗口。
•foo例程从相同的寄存器获取参数,现在称为“in”寄存器。•foo例程可以使用其“本地”寄存器进行计算,以确保它调用的任何例程都不能修改它们。
•如果foo希望调用任何例程,它将使用其“out”寄存器向这些例程传递参数。它还将使用“out”寄存器来接收从这些例程返回的结果。
•foo例程可以使用其“in”寄存器进行计算,以确保它调用的任何例程都不能修改它们。然而,foo的调用者可能对foo返回后将留在这些寄存器中的内容有一定的期望。一般来说,foo会自由地使用“In”寄存器,除了用于将结果返回给调用者的“In”寄存器之外,所有这些寄存器都会被破坏。
•foo例程可以使用其“out”寄存器进行计算,但必须记住,foo进行的任何调用都将允许某些其他例程访问这些寄存器。一般来说,foo应该假设它所做的任何调用都可能更改它的任何和所有“out”寄存器。因此,使用“out”寄存器只是为了与foo将调用的例程通信是一个好主意。
•foo例程将其结果(如果有的话)放在“in”寄存器中。
•最后,foo例程执行“restore”指令并返回。这将去掉foo的register窗口并恢复调用者的窗口。•调用者可以确保foo没有改变其“本地”和“in”寄存器。调用者将在调用者所指的“out”寄存器中查找foo的结果。
4.浮点寄存器&状态寄存器
SPARC架构下的反汇编(三)——SPARC汇编语言相关推荐
- SPARC架构下的反汇编(一)——SPARC简介
1. 写作目的&个人水平 之前做过SPARC架构下的反汇编项目,但资料比较少,所以写一点笔记,结合已有的资料以及个人的经验以便于查阅.总体来说就是资料的阅读理解和实际操作的经验.因为水平有限, ...
- SPARC架构下的反汇编(四)——SPARC汇编语言(二)
1.函数栈桢(stack&frame) 函数调用时栈中分配的内存块. %fp :帧指针 %sp:栈指针 具体如图: 在IDA中,每个函数前面一部分是这样的: 函数中这样使用%fp和%sp 由上 ...
- SPARC架构下的反汇编(二)——准备知识
1.简介 这一篇文章参考了SPARC Overview,包含简单的进制转换.数据大小.数据对齐到重要的偏移地址计算 <SPARC Overview>:https://download.cs ...
- 甲骨文与富士通利用SPARC架构打造M12超级设备
甲骨文与富士通两家公司已经共同发布富士通的SPARC M12服务器,并宣称这将是全球拥有最强每核心性能的解决方案. 这台产品为原有M10服务器的补充性版本,其中富士通M10-4S服务器拥有64块处理器 ...
- 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线...
重温.NET下Assembly的加载过程 最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现 ...
- Sparc架构中的栈与寄存器
寄存器的基本结构 通用整数寄存器 在sparc架构中,同一时刻可以使用的整数寄存器为32个,如下图所示,其中8个为一组,除了一组全局寄存器(%g1-g7)外,其余的3组寄存器组成了一个寄存器窗口,在不 ...
- 微服务架构下的核心话题 (三):微服务架构的技术选型
前期回顾: 微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起 微服务架构下的核心话题 (二):微服务架构的设计原则和核心话题 一.前言 为了实现基于微服务开发的产品,或者说为了将单体应用 ...
- Windows下x64反汇编参数传递约定,一句话,调用顺序为从左到右, Function( rcx, rdx, r8,r9, [rsp+0x20], [rsp+0x28], [rsp+0x30]..
Windows下x64反汇编参数传递约定 一句话,调用顺序为从左到右, Function( rcx, rdx, r8,r9, [rsp+0x20], [rsp+0x28], [rsp+0x30], ...
- MIPS架构下LW指令的重定位过程
通常我们不会去关心指令重定位(relocation)的细节,编译器的ld过程已经帮助我们做好了.由于最近在移植CRIU,涉及到指令的重定位计算,不得不细细研究代码重定位的细节知识.之前的文章介绍了MI ...
最新文章
- java rotatetransition_transition过渡,transform变换
- ASPNet_Compiler学习总结
- 单向环形列表及应用场景(约瑟夫环)
- matlab参考答案2011至诚,职高数学试卷答卷答案详解
- E. Jamie and Tree(树链剖分 + 线段树)
- 中国石油大学(华东)暑期集训--二进制(BZOJ5294)【线段树】
- Docker安装influxDB
- WPF使用Webbrowser操作网页的主要代码
- 程序员的灯下黑:重知识轻技术(转)
- Xcode打包上传时,最后一步出现An error occurred uploading to the iTunes Store.的解决方法...
- 二叉树反转java实现
- C++ Primer 第5版--练习8.5
- 微信公众号获取管理素材列表的大坑-{errcode:40004,errmsg:invalid media type hint:}
- 未来10年互联网的十大发展趋势
- Excise_day02
- add p4 多个文件_P4_tutorials
- Spring AOP tx:advice
- 【转】c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小
- 余弦相似度计算的实现方式
- 指定IP地址进行远程访问设置方法windows
热门文章
- 新零售全渠道营销,线上经营,线下成长
- 什么是git 暂存区
- HelloWorld Detail Earth 3D Engine(一)总体介绍
- GSCoolink GSV6201 TypeC/DP to HDMI2.1
- 平均成绩是计算数学计算机英语三门,创建一个查询,计算并显示“学号”和“平均成绩”两个字段内容,其中平均成绩 是计算数学、计算机和英语_开卷宝...
- Xtool X100 PAD2 Error Code 5 Data Not Exist Solution
- 浅析汽车芯片信息安全之安全启动
- android launcher启动过程,Android应用启动过程-Launcher源码浅析
- 多传感器信息融合,介绍中图片为INS+ DVL组合程序
- 手淘推出“店铺二楼”