如何编写 Sparc 程序集并在 Qemu 或 Simics 中运行其二进制文件?

2024-02-07

我正在尝试开始编写一些 Sparc 程序集,但我不知道如何汇编和运行代码。我已经用 arcTools 编写了 arc,但这就是我对汇编的了解。我已经下载了 simics 和 qemu,但我不知道从这里去哪里。有人能指出我正确的方向吗?谢谢。


您没有说您使用什么操作系统。 对于这个例子,我假设您有 Linux 并且想要编写简单的独立 sparc 代码(用于教育目的)。 你会需要binutils and gdb为 sparc 编译和qemu-sparc。 将这个小示例代码保存为test.s:

.globl _start
_start:
    mov %o0, %g0
1:
    inc %o0
    cmp %o0, 100
    bl 1b
    nop
    b .
    nop

Use as组装和ld进行链接,如下:

$ sparc-linux-as -g -o test.o test.s
$ sparc-linux-ld -g -o test test.o

应该生成二进制文件test:

$ file test
test: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, not stripped

现在开始qemu-sparc设置为gdb远程调试(选择你选择的端口,我用的是1234):

$ qemu-sparc -g 1234 test

它会等待gdb连接。在另一个终端中,启动gdb对于二进制文件:

$ sparc-linux-gdb test
GNU gdb (GDB) 7.3.50.20111117-cvs-debian
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=sparc-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /var/tmp/test...done.
(gdb)

附加到qemu实例:

(gdb) target remote :1234
Remote debugging using :1234
_start () at test.s:3
3           mov %o0, %g0

从这里开始,您可以使用gdb像往常一样执行代码,检查寄存器和内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写 Sparc 程序集并在 Qemu 或 Simics 中运行其二进制文件? 的相关文章

  • 汇编基础知识:输出寄存器值

    我刚刚开始学习汇编语言 我已经陷入了 在屏幕上显示存储在寄存器中的十进制值 的部分 我使用 emu8086 任何帮助将不胜感激 model small Specifies the memory model used for program
  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 汇编8086监听键盘中断

    我有与此完全相同的问题 边画边听键盘 https stackoverflow com questions 13970325 8086 listen to keyboard while drawing 但第一个答案 接受的答案 只听键盘一次
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • “mov (%ebx,%eax,4),%eax”如何工作? [复制]

    这个问题在这里已经有答案了 一直在从事装配作业 并且在很大程度上我对装配非常了解 或者至少对于这项任务来说足够好 但这个 mov 的声明让我很困惑 如果有人能解释这个 mov 语句如何操作寄存器值 我将非常感激 mov ebx eax 4
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • 为什么如果内存组织为字,则程序计数器加 1;如果内存组织为字节,则程序计数器加 2?

    如果在计算机中一条指令是 16 位 并且如果存储器被组织为 16 位字 则通过在当前指令的地址中加 1 来计算下一条指令的地址 如果内存是按字节组织的 可以单独寻址 那么我们需要在当前指令地址上加二 得到顺序执行的下一条指令的地址 为什么会
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 为什么 FMA _mm256_fmadd_pd() 内在函数有 3 个 asm 助记符:“vfmadd132pd”、“231”和“213”?

    有人可以向我解释一下为什么融合乘法累加指令有 3 种变体 vfmadd132pd vfmadd231pd and vfmadd213pd 而只有一个 C 内在函数 mm256 fmadd pd 为了简单起见 在 AT T 语法中 有什么区别
  • 在 x86 程序集中存储大量布尔值的最佳方法是什么?

    最近我一直在处理充满布尔值的大型数组 目前 我将它们存储在 bss部分有一个 space指令 它允许我创建字节数组 但是 由于我只需要存储布尔值 因此我希望从数组中逐位读取和写入数据 目前 我能想到的最好方法是有一个 space指令所需存储
  • 如何使用 Bochs 运行汇编代码?

    我想使用 Bochs 作为 8086 模拟器 是否有捷径可寻 我想要的是类似 emu8086 的东西 http www emu8086 com http www emu8086 com 如果程序的初始部分适合 512 字节 并且您不介意将自
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 长多字节 NOP:通常理解的宏或其他符号

    x86 和 x86 64 处理器不仅具有单字节 这不是什么大秘密NOP指令 还包括各种类型的多字节类 NOP 指令 这些是我设法找到的 AMD 推荐 参考 AMD 系列 15h 处理器的 AMD 软件优化指南 文档 47414 http s
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save

随机推荐

  • 创建指向非静态类成员函数的类成员指针函数变量

    目标是拥有成员变量 AddValue指向CreateFirstValue类初始化时和第一次调用后的函数AddValue 所有未来对它的调用都将调用CreateAnotherValue 以前 我只有一个AddValue带有条件检查的函数以确定
  • Android 中的 Fling 手势和 Webview

    我有一个 webview 控件 需要支持 Android 中的 fling 手势 以便调出新记录 加载新数据 这是在扩展 Activity 的类中发生的 我见过的所有示例都展示了如何实现对文本视图的手势支持 但没有展示对网络视图的手势支持
  • 使用()创建对象与不使用()创建对象的区别

    我刚刚遇到问题 error request for member show in myWindow which is of non class type MainGUIWindow 当尝试编译一个简单的 qt 应用程序时 include
  • 忽略 New Relic 中的持久 SignalR 连接

    我应该打电话到哪里NewRelic Api Agent NewRelic IgnoreApdex or NewRelic Api Agent NewRelic IgnoreTransaction 在我的 SignalR 集线器中以防止长时间
  • DataGrid 内 ComboBox 上的 ItemSsource 绑定

    DataGrid 内的组合框未填充列表 我认为 ItemSource Path 有问题 查看 DataGrid 的 xaml 代码
  • MVC 4 Razor 文件上传

    我是 MVC 4 的新手 我正在尝试在中实现文件上传控制 我的网站 我无法找到错误 我得到的是空值 我的文件中的值 控制器 public class UploadController BaseController public Action
  • “Function.call.bind(Function.bind)”是什么意思?

    我需要你的帮助 我被这些代码行困住了 var bind Function call bind Function bind bind CC Components 我试图理解它们是什么以及它们如何工作 但我不能 有人可以帮助清楚地解释它们是如何
  • 自定义字符串分隔符 stringtemplate-4

    我正在尝试在 android 中使用 stringtemplate 4 引 擎 但我需要起始分隔符 而结束分隔符应该是 在这里 我认为只允许使用字符分隔符 那么如何使用字符串分隔符呢 提前致谢 StringTemplate 仅支持使用单个字
  • Tornadofx - 如何在每个实例上将参数传递给 Fragment

    我是javafx kotlin 和tornadofx 的新手 Issue 如何在每个实例上将参数传递给 Fragment 假设我有一个表视图布局作为我的片段 现在这个片段在多个地方使用 但具有不同的数据集 例如 添加片段 class Som
  • jest 从承诺中模拟 jQuery 函数

    我有一个调用 jQuery 函数的函数 jQuery 函数称为dataFunc并且应该返回一个对象 我想测试承诺 而不是dataFunc功能 为此 我想嘲笑这样的回应dataFunc应该返回 我想要这一行const data await s
  • C++ 初始化列表功能:调用函数而不初始化成员?

    这是一个关于 C 初始化列表语法的问题 是否可以从初始化列表中调用函数而不将它们作为成员对象构造函数的参数 下面列出的代码示例是根据工作中的类似情况进行解释 paracoded 情况 成员变量采用指向单例的指针作为构造函数 争论 成员变量由
  • 如何使用数据注释来验证可为 null 的 int

    在 MVC 5 项目中 我有一个具有可为 null int 的模型 由于可能无法解释的原因 它需要是一个可为 null 的 int 并且不能是一个字符串 Value can be null or an integer from 0 to 1
  • 如何自定义 application.hbs 模板的视图元素?

    在 ember cli 生成的应用程序中 application hbs 生成的 html 被包装在视图中 div class ember view div 如果我创建一个组件 我有一个 component name js 文件 我可以在其
  • 无法识别的模板声明/定义

    我正在尝试实现一个堆 但我的其中一个函数出现了上述错误 这是我的头文件 template
  • 使用 /p 参数(预处理为文件)编译项目(VS 2008)无法编译

    我有一个 C 项目 我想查看预处理器输出以了解一些 define 和宏的外观 我尝试过 p切换以打开编译器的文件选项预处理 它关闭完整编译并仅运行预处理器 但我的项目现在拒绝编译并显示一长串错误 开头为 无法打开包含文件 stdafx h
  • Javasound 不通过 JAAD(SPI)播放 .m4a 文件

    我正在尝试播放一些 m4a 文件 我明白JAAD http jaadec sourceforge net index php仅支持解码 AAC 但有些歌曲我可以从中获取 sourceDataLine 然后当我尝试播放它们时 我会得到如下行为
  • 如何使用 JSONStream 字符串化大对象

    我想对一个大对象进行字符串化 将其写入文件 并且遇到了 v8 的字符串长度限制 所以我想我要么需要找到一种将字符串化为 ArrayBuffer 的方法 要么需要以块的形式创建字符串 它似乎https github com dominicta
  • 当我比较集成流基线时,为什么 Clearcase diffbl 包含来自我的开发流的活动?

    我们使用 Clearcase UCM 并有一个集成流 每个开发人员都有一个开发流 当我进行基线比较时 有时会包括开发流程中的活动 有没有办法获得自特定基线以来集成流中的活动的简单列表 注意 在集成流中 您将主要获得交付活动 即记录开发流交付
  • ComboBox 中的默认值 DataSource C#

    我有一个组合框 这就是我在其中填充数据的方式 SectorCollection sectorCollection sectorController SearchAll comboSector DataSource null comboSec
  • 如何编写 Sparc 程序集并在 Qemu 或 Simics 中运行其二进制文件?

    我正在尝试开始编写一些 Sparc 程序集 但我不知道如何汇编和运行代码 我已经用 arcTools 编写了 arc 但这就是我对汇编的了解 我已经下载了 simics 和 qemu 但我不知道从这里去哪里 有人能指出我正确的方向吗 谢谢