分配内存空间的宏

2024-04-24

我需要让一个汇编程序员来计算帕斯卡三角形 https://en.wikipedia.org/wiki/Pascal%27s_triangle。 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个,但我不知道如何使用宏在汇编中做到这一点。

宏取一个数字并在内存中分配该数字的双字

我尝试过,但我不知道这是否是正确的方法

%macro Malloc 2
%2 : resd %1
%endmacro

我想知道两件事:

first我想要第二个参数(%2) 例如自动具有字符串名称

第一行名称:“line1”,下一行是“line2”“line3”...依此类推,所以我不需要把自己写下来?

second问题是在这种情况下使用宏是个好主意吗?


For NASM: 这里是你想要的the %+操作员 http://www.nasm.us/doc/nasmdoc4.html#section-4.1.4连接事物(在扩展单行之后%assign宏),内部a %rep block http://www.nasm.us/doc/nasmdoc4.html#section-4.5.

section .bss

%assign i 1
%rep    64
    line %+ i:  resd  i
%assign i i+1
%endrep

其组装方式与

section .bss
line1:    resd 1     # reserve space for 1 DWORD
line2:    resd 2     # reserve space for 2 DWORDs
line3:    resd 3     # reserve space for 3 DWORDs
...

Testing:

$ nasm -felf64  pascal-triangle-macro.asm
$ nm -n pascal-triangle-macro.o        # sort by numeric address, not lexicographic

0000000000000000 b line1
0000000000000004 b line2
000000000000000c b line3
0000000000000018 b line4
0000000000000028 b line5
000000000000003c b line6
0000000000000054 b line7
0000000000000070 b line8
0000000000000090 b line9
00000000000000b4 b line10
00000000000000dc b line11
0000000000000108 b line12
...

正如预期的那样,标签地址呈几何级数。 (从 0 开始,因为这是一个目标文件,而不是链接的可执行文件)。

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

分配内存空间的宏 的相关文章

  • 使用 gdb 调试反汇编库

    在Linux和Mac OS X中可以使用strapi和next来调试应用程序而无需调试信息 在 Mac OS X 上 gdb 显示在库内部调用的函数 尽管有时会在每个 stepi 指令中推进多个汇编程序指令 在 Linux 上 当我进入动态
  • 在汇编中显示两位数? [复制]

    这个问题在这里已经有答案了 我对汇编编程完全陌生 在课堂作业的示例中 需要将两个数字相加并显示总和 我发现神秘的是当其是两位数时显示总和 这是我的代码 mov al num1 mov bl num2 add al bl add ax 303
  • 汇编指令陷阱有什么作用?

    当程序需要时 程序通常会发出软件陷阱 由操作系统提供服务 通用异常处理程序 操作系统确定陷阱的原因并做出响应 适当地 汇编指令 trap 和 BASIC 中的 TRAP 指令一样吗 答案似乎是肯定的 你能接受还是拒绝我的结论 不中断 的代码
  • 一条指令可以同时处于两种寻址模式吗?

    我在书中读到了以下内容从头开始编程 处理器有多种不同的访问数据的方式 称为 寻址模式 最简单的模式是立即模式 其中 要访问的数据嵌入在指令本身中 例如 如果我们想将寄存器初始化为 0 而不是给出 计算机要从中读取 0 的地址 我们将指定立即
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • 在 x86 程序集中将整数打印到控制台

    当我在 16 位汇编中添加两个值时 将结果打印到控制台的最佳方法是什么 目前我有这个代码 CODE START mov ax 1 put 1 into ax add ax 2 add 2 to ax current value mov ah
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • 内联 asm 中不支持的指令“mov”将控制寄存器移动到 uint32_t

    我在 C 函数中使用汇编代码 但海湾合作委员会给出unsupported instruction mov 以下代码的错误 uint32 t faulting address asm volatile mov cr2 0 r faulting
  • 如何在汇编语言中换行打印多个字符串

    我试图在汇编中的不同行上打印多个字符串 但使用我的代码 它只打印最后一个字符串 我对汇编语言非常陌生 所以请耐心等待 section text global start start mov edx len mov edx len1 mov
  • 为什么 Solaris 汇编器生成的机器代码与 GNU 汇编器在这里不同?

    我为 amd64 编写了这个小汇编文件 对于这个问题来说 代码的作用并不重要 globl fib fib mov edi ecx xor eax eax jrcxz 1f lea 1 rax ebx 0 add rbx rax xchg r
  • 在 x86 Intel VT-X 非根模式下,是否可以在每个指令边界传递中断?

    除了不将中断传送到虚拟处理器的某些正常指定条件 cli if 0 等 之外 客户机中的所有指令实际上都是可中断的吗 也就是说 当传入的硬件中断先传递给 LAPIC 然后传递给处理器时 据说会发生一些内部魔法 将其转换为虚拟中断给来宾 使用虚
  • 奇怪的 MSC 8.0 错误:“ESP 的值未在函数调用中正确保存...”

    我们最近尝试将一些 Visual Studio 项目分解为库 并且在测试项目中一切似乎都编译和构建得很好 其中一个库项目作为依赖项 然而 尝试运行该应用程序给我们带来了以下令人讨厌的运行时错误消息 运行时检查失败 0 ESP 的值未在函数调
  • 为什么 Visual Studio 使用 xchg ax,ax

    我正在查看程序的反汇编 因为它崩溃了 并注意到很多 xchg ax ax 我用谷歌搜索了一下 发现它本质上是一个 nop 但是为什么 Visual Studio 会执行 xchg 而不是 noop 该应用程序是一个C NET3 5 64位应
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 汇编8086监听键盘中断

    我有与此完全相同的问题 边画边听键盘 https stackoverflow com questions 13970325 8086 listen to keyboard while drawing 但第一个答案 接受的答案 只听键盘一次
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 如何知道寄存器是否是“通用寄存器”?

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

随机推荐

  • Numpy 中如何获得向量的大小?

    为了与 只有一种明显的方法可以做到这一点 保持一致 如何在 Numpy 中获取向量 一维数组 的大小 def mag x return math sqrt sum i 2 for i in x 上面的方法有效 但是我无法相信我必须自己指定这
  • Android JNI异常处理

    我需要在 JNI 代码中实现异常处理 我不擅长 jni 找不到任何好的例子 因此 请提供完整的示例 这就是我正在做的 jint JNI OnLoad JavaVM vm void reserved jint result 1 g JavaV
  • 为什么 nhibernate 3.3 不允许 ICollection 上的私有 setter?

    我从 nhibernate 3 2 升级到 nhibernate 3 3 并且在我的域类中定义了很多虚拟成员 如下所示 public virtual ICollection
  • Django Channels - 无法在断开连接时发送消息

    我希望能够在用户断开连接时向房间组发送消息 以便更新玩家列表 似乎一旦断开连接就不可能了 这在某种程度上是有意义的 但是在断开用户连接之前我如何能够向通道发送消息 我有以下代码 async def disconnect self close
  • 不太无用的“yes”bash 命令:如何在每个循环中确认命令

    我编写了一个循环来解压缩目录中的所有 zip 文件 for f in zip do unzip f done 但是 我必须在每一步确认覆盖 replace file123 txt y es n o A ll N one r ename A
  • Functions Bot 是否不再是 Azure 中推荐的机器人服务?

    我有一个无服务器系统 我希望向其中添加 Bot Framework 主要是为了提供与不同聊天渠道的集成 我正在考虑尝试在 Bot Service 中创建一个 Functions Bot 但是当我开始创建一个时 我收到以下信息消息 Funct
  • adArray 的 VBScript / ADODB 语法问题?

    我希望有人能给我一些关于我的 vb 脚本的新视角 该脚本的主要目的是使用一些参数执行存储过程 我得到的错误是 预计声明结束 我没有做过太多的 VB 脚本编写 但从目前为止我发现的情况来看 这个错误是由于某种语法问题造成的 我已经查看这个脚本
  • 如何在asp.net mvc中从https跳出到http模式

    我通过在控制器操作上添加属性 RequireSSL 使我的登录页面启用了 Https 并且工作正常 但登录成功后仍处于https环境 但页面为非https页面 谁能给我解决如何从 https 模式退出到 http 模式的问题吗 在这方面的任
  • Django django-location-field 缺少 API 密钥

    我正在使用https github com caioariede django location field https github com caioariede django location field使用 Django 构建位置视图
  • 结合阴影误差和实线平均值的图例

    我在用此 FEX 条目 http www mathworks com matlabcentral fileexchange 27485 boundedline line plots with shaded errorconfidence i
  • 如何避免c#中windows窗体的多个实例

    如何避免在 C 中出现多个 Windows 窗体实例 我只想运行该表单的一个实例 因为有机会从我的申请的许多页面打开相同的表格 是的 它有单例模式 创建单例对象的代码 public partial class Form2 Form priv
  • 如何使用 javafx 隐藏或停用 TextField 和 Label

    我想隐藏或停用TextField和它的Label在我的 JavaFX 应用程序中 这就是我尝试过的 myTextField setVisible false 但它不起作用 我在 Windows 7 上使用 Eclipse V4 5 0 和
  • 基于字符串创建ViewBag属性

    有没有办法基于字符串创建和使用 ViewBag 的动态属性 就像是 ViewBag CreateProperty MyProperty ViewBag Property MyProperty Myvalue 谢谢 我刚刚发现 ViewDat
  • 使用表达式时ggplot右对齐轴文本

    我正在制作一个带有长轴标签的条形图 我需要将其换行并右对齐 唯一的复杂之处是我需要添加一个表达式来具有上标 library ggplot2 library scales df lt data frame levs c a long labe
  • 在 Mac OS X 10.6.3 下保存 PDF 时应用 Quartz 滤镜

    使用 Mac OS X API 我尝试保存应用了 Quartz 过滤器的 PDF 文件 就像在预览应用程序中的 另存为 对话框中一样 到目前为止 我已经编写了以下代码 使用Python和pyObjC 但这对我来说并不重要 filter pd
  • 使用 amplify ui React 配置状态时,AuthStatus 不会发生变化

    我正在使用 AWS amplify UI React 在 React 应用程序中创建身份验证流程 我按照该文档并使用下面的文档制作了导航流程 https ui docs amplify aws react guides auth prote
  • 没有合适的用户定义转换

    我正在尝试编写一个包装数值的 C 程序 我通过编写一个超类来做到这一点 它将处理两个简单函数和一个运算符重载函数 这是我的代码 include
  • .NET 4 中的 TaskCreationOptions.DenyChildAttach

    我在 NET 4 5 中看到Task Run 相当于 Task Factory StartNew someAction CancellationToken None TaskCreationOptions DenyChildAttach T
  • C 中的 UTF8 处理

    我对UTF8有基本的了解 码点的长度是可变的 所以一个 字符 可以是8位 16位 甚至更长 我想知道 C 语言中是否有一些示例代码 库等可以与 UTF8 字符串 如 C 中的标准库 执行类似的操作 告诉字符串的长度等 Thanks GNU
  • 分配内存空间的宏

    我需要让一个汇编程序员来计算帕斯卡三角形 https en wikipedia org wiki Pascal 27s triangle 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个 但我不知道如何使用宏在汇编中做到这一点