【问题标题】:mul eax with declared .data value in NASM assembly在 NASM 程序集中声明 .data 值的 mul eax
【发布时间】:2019-06-19 13:05:13
【问题描述】:

我是 Assembly 的初学者,我一直在努力掌握 NASM 的基础知识。我在 Mac 上,使用 xcode,我已经开始处理数据,我有一个简单的问题。

我很难找到答案,而且 NASM 的手册非常繁琐。

这对于你的 NASM 大师来说一定是超级基础的。

如果我在内存中声明一个变量

section   .data
    counter dw 0

global    _start
_start:
    inc counter    ; i get a "invalid combination of opcode and operands" here
ret

是不是我必须将内存移动到寄存器中才能对其执行操作,而我不能“就地”操作内存?

如果这是一个愚蠢的问题,我很抱歉,但我已经尝试在谷歌上搜索并找不到明确的直接答案。

【问题讨论】:

标签: xcode assembly nasm


【解决方案1】:

在 NASM(与 MASM 不同)中,裸符号是立即值。对于内存引用,请将其括在方括号中并指出所需的大小。

 inc word [counter]

【讨论】:

  • 我确实遇到了另一个问题,我正在使用 macho64 进行编译,它抱怨我使用 32 位地址作为内存,但我会尝试自己解决。感谢您的快速答复。
  • 在 64 位代码中使用文件顶部的default rel 或更改为inc word [rel counter]
  • 只要我在顶部添加default rel,程序就会编译,但运行时会直接与Thread 1: EXC_BAD_ACCESS (code=2, address=0x100001025) 崩溃
猜你喜欢
  • 1970-01-01
  • 2017-05-29
  • 2014-01-01
  • 2012-12-20
  • 2015-06-15
  • 2015-09-20
  • 1970-01-01
  • 2011-12-22
  • 2013-06-30
相关资源
最近更新 更多