用汇编语言定义“变量”

2023-12-08

我知道这是一个非常愚蠢的问题,但我有一段时间无法找到答案
如何在 GAS AT&T 汇编语言中正确声明和定义“变量”?
例如,我想要 5 个字节的缓冲区、两个 1 字节变量(最初值为 0)、2 字节变量为 0 和 2 字节变量为 10。
这段代码不能正常工作,至少调试器说(在程序的第一行,在这些声明之后,只是nop指令)那b and c是大数字而不是零。

.bss
    .lcomm r, 5

.data
    a:  .byte 0
    b:  .byte 0
    c:  .word 0
    d:  .word 10

这是您在“手表”窗口中看到的内容:

a = 0 = 0x00 = 0x0000 = 0x00 0000 = 0x0000 0000

b = 167772160 = 16777216 * 10 = 0x1000000 * 0x0A = 0xA000000

c = 655360 = 65536 * 10 = 0x10000 * 0x0A = 0xA0000

d = 10 = 0x0A = 0x0000 000A

这是什么意思?这意味着你的编译器完成了它的工作,但是你的调试器读取c and b作为双字(4 个字节)而不是字节。

当它读入时b,它读取它的值0x00, c的价值0x0000, and d的价值0x0A在顶部,一起制作它0xA000000.

类似的事情发生在c. a很幸运,因为接下来的 4 个字节为零,所以a确实是零。

然而,情况并非总是如此。没有说以后不能有垃圾d,更不用说等于零的变量可能出现在.bss(在完全不同的内存位置)。

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

用汇编语言定义“变量” 的相关文章

  • 使用 MIPS 从 Big Endian 到 Little Endian 无需逻辑运算?

    我正在使用 MIPS QtSpim 将 32 位字从 Big Endian 转换为 Little Endian 我下面显示的内容已检查且正确 不过我想知道还有什么其他方法可以让我进行转换 我虽然只使用了旋转和移位 但如果没有逻辑运算 我就无
  • 如何将输入传递到扩展汇编中?

    考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
  • AVX-512 指令编码 - {er} 含义

    在 Intel x86 指令集参考中 有许多 AVX 512 指令在指令中具有可选的 er 例如 VADDPD 的一种形式定义为 EVEX NDS 512 66 0F W1 58 r VADDPD zmm1 k1 z zmm2 zmm3 m
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • LC3 LEA指令和存储的值

    我对这个问题感到困惑 指令后寄存器0中存储的值是多少 LEA R0 A 被处决了吗 为什么答案是x370C 我认为应该将A的地址加载到R0中 如果是这样我们怎么知道地址 有人可以帮忙吗 非常感谢 ORIG X3700 LEA R0 A LD
  • 长多字节 NOP:通常理解的宏或其他符号

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

    有谁知道 memcspn 函数的有效实现吗 它的行为应该类似于 strcspn 但在内存缓冲区中查找跨度 而不是在以 null 结尾的字符串中查找跨度 目标编译器是 VisualC 谢谢 卢卡 一种近乎最佳的实现 size t memcsp
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • 无法识别的仿真模式:MinGW32 上的 elf_i386

    我正在尝试制作内核 但无法链接C与程序集一起输出 这ld 我收到错误 无法识别的仿真模式 elf i386 我正在使用 Windows 10 专业版以及 MinGW32 和 MSYS 我正在使用的代码 link ld link ld OUT
  • 将 C 代码转换为 x86-64 汇编

    我正在尝试将 C 代码转换为 x86 64 我的目标是反转链表 传入的两个参数是 head ptr 和 offset to 以获取指针字段的地址 即指向列表中下一个节点的指针 据我了解 head ptr是通过rdi寄存器传入的 offset
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 难以理解汇编命令“加载有效地址”[重复]

    这个问题在这里已经有答案了 可能的重复 LEA 指令的目的是什么 https stackoverflow com questions 1658294 whats the purpose of the lea instruction LEA指
  • 在 qemu 中将扇区加载到 RAM

    我编写了一个简单的程序 将扇区 扇区编号 2 加载到 RAM 但什么也没打印 首先 我尝试了以下引导扇区代码 org 0x7c00 mov ax 0x1000 ES BX 1000 0000 mov es ax mov bx 0x00 Lo
  • 如何恢复 x86-64 寄存器保存约定

    fibonacci cmpq 1 rdi ja recursive movl 1 eax ret recursive push rbp push r10 movq rdi r10 leaq 2 rdi rdi call fibonacci
  • 测试 xmm/ymm 寄存器是否为零的更快方法?

    It s fortunate that PTEST does not affect the carry flag but only sets the rather awkward ZF also affects both CF and ZF
  • NASM:如何正确访问SSD驱动器?

    我需要使用 NASM 16 位代码访问 SSD 驱动器 访问普通硬盘时 需要设置寄存器AX DX CX来选择柱面 磁道 扇区 扇区数 AH 选择读扇区功能 DL 选择驱动器号 CH 选择气缸 DH 选择磁盘上的一侧 CL 选择步入正轨的部门

随机推荐

  • 将Google结果对象(纯js)转换为Python对象

    所以我尝试使用 Google Map suggest API 来请求地名建议 不幸的是我找不到这方面的文档 下面是一个 URI 示例 返回 suggestion query London 我想在 python 2 5 中使用它 现在 在正确
  • 如何在angularjs中设置范围滑块中的时间?

    我正在使用具有可拖动范围的滑块 https jsfiddle net ValentinH 954eve2L 在 Angular js 中用于时间选择 我想在这个滑块中设置时间 所以我的时钟是从 00 00 到 24 00 但我想设置时间间隔
  • 如何在 Objective C iPhone 编码中播放声音

    我正在开发一个应用程序 它使用一些硬件传感器在屏幕上提供数据 有一个标签随数字更新 我希望每当数字超过 100 或其他值时就播放声音 例如 假设它正在读取数字 然后突然它找到了一个好位置 或其他什么 然后我想要播放声音或点亮灯光 我是一个绝
  • 通过Java找出系统RAM

    我正在编写一个程序 需要在其中进行最小系统 RAM 验证 我如何计算在 JVM 中执行代码的机器的 RAM 我认为纯java根本不可能 在 JVM 中 您只能测量 JVM ram 而不能测量系统 RAM http docs oracle c
  • 在网格上编写随机路径从哪里开始比较合适?

    我不知道从哪里开始 我不是要求别人为我做这件事 但我不知道如何做 所以如果有人能指出我正确的方向 那就太好了 我无法使用谷歌找到任何东西 这就是我需要的 我需要创建一条从网格一侧到另一侧的路径 但不是以随机方式最短 我需要确保如果路径与路径
  • 如何在 Kivy/Python 中从一个屏幕引用另一个屏幕中的 TextInput?

    我正在尝试制作一个可以计算圆锥体积的应用程序 到目前为止 我有一个名为 ConeVolumeScreen 的屏幕 其中有两个 TextInput 小部件
  • MySQL'user_id'在where子句中不明确的问题

    我怎样才能纠正我从下面的代码中不断遇到的问题 其中指出 user id in where clause is ambiguous 我在这里先向您的帮助表示感谢 这是mysql表 SELECT user user info FROM user
  • 正则表达式不是运算符

    正则表达式中是否有 NOT 运算符 就像那个字符串一样 2001 asdf dasd1123 asd 21 01 2011 zqge dzqge name 20019 我想删除所有 0 9a zA z 但不是一年的那个 2001 所以正则表
  • 将文件关联从 Visual Studio 2005 移至 2008

    我的电脑上安装了 Visual Studio 2005 和 Visual Studio 2008 但是当我从资源管理器中打开 aspx 或 master 文件时 它会在 2005 年打开 我希望它们在 2008 年打开 我可以手动更改文件关
  • 具有两个 data.table 的类似合并的场景

    我有两个数据框 实际上是 data tables set seed 123 dt1 lt data table P rep letters 1 3 c 4 2 3 X sample 9 dt1 P X 1 a 3 2 a 7 3 a 9 4
  • Python:如何了解串口设备事件,例如键盘事件

    你好 我是 python 新手 我能够连接到串行端口设备并想知道设备中发生的任何更改 如果按下设备中的任何按钮 我想捕获事件 我该怎么做 在Python中的pyHook的帮助下 我可以通过调用函数 OnKeyboardEvent 和 OnM
  • 模拟(起订量)或覆盖密封类中的只读属性?

    我遇到的情况是 在 MS Dynamics Crm 中 它使用密封类和只读属性返回一些对象 我只能假设使用内部构造函数或内部属性集 这些家伙并没有继承我可以使用的接口 显然 如果我可以控制这段代码 我就会有更多的控制权 但因为它位于底层的
  • 为什么 sizeof...(T) 这么慢?实现不带 sizeof...(T) 的 C++14 make_index_sequence

    我找到了 C 14 make index sequence 算法 的实现 template lt int gt struct index sequence using type index sequence template lt type
  • 如何将字典列表拆分为多个保持相同索引的列?

    我有一个数据框 它有一个时间戳作为索引 还有一个包含字典列表的列 index var A 2019 08 21 09 05 49 Date1 Aug 21 2017 9 09 51 AM Date2 Aug 21 2017 9 09 54
  • 如何在 umbraco 6 的管理面板中创建自定义部分?

    我希望在 umbraco 6 的管理面板中开发一个自定义用户部分 此部分可以管理用户详细信息以及管理员批准 有人知道如何实现这一点吗 显然它类似于在 Umbraco 4 中这样做 但在 Umbraco 6 中 不是对umbracoApp表
  • 对于画布,.drawImage 函数抛出“TypeError:预期图像或画布”

    我正在尝试在我的不和谐机器人中添加排名卡 为了做到这一点 我正在尝试使用画布 但是当我使用画布时 一切正常 直到我点击 drawImage方法 它给我一个错误 提示 TypeError 需要图像或画布 虽然我已经要求了canvas在全球范围
  • Python if any() 不起作用

    我想检查列表中是否有任何字符串元素phrases包含一组中的某些关键字phd words 我想用any但它不起作用 In 19 import pandas as pd import psycopg2 as pg def test phd w
  • 由 pywin32 生成的 python 可执行文件中的 dll 加载错误

    我使用 py2exe 使用 64 位 python 解释器和 32 位 python 解释器创建了 python 可执行文件 在我的程序中 我使用该模块pywin32 com 因此我在创建可执行文件之前下载并安装了该程序的 64 位和 32
  • Android sqlite,限制数据库中的行数[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我一直有新数据进入应用程序 因此我想将表中的行数限制为 100 条记录 我将其描述为 FIFO 队列 每当有新数据 一次只有几行 进来时 表 底部 的旧数据就会被刷新并删除 由于它是
  • 用汇编语言定义“变量”

    我知道这是一个非常愚蠢的问题 但我有一段时间无法找到答案如何在 GAS AT T 汇编语言中正确声明和定义 变量 例如 我想要 5 个字节的缓冲区 两个 1 字节变量 最初值为 0 2 字节变量为 0 和 2 字节变量为 10 这段代码不能