【问题标题】:NASM on OS X work with bit, not byteOS X 上的 NASM 使用位,而不是字节
【发布时间】:2012-03-09 15:33:51
【问题描述】:

我正在编写我的第一个 NASM 程序,在尝试找出 not 指令时,我意识到不是反转位 0,而是反转字节 00000000。我将如何告诉它使用一点或以其他方式解决这个问题?这是我的代码...

section .text
  global start

start:
  mov eax, 255
  not eax
  push eax

  mov eax, 0x1
  sub esp, 4
  int 0x80

请随时给我一些关于我的汇编编码的指示,因为我不想养成任何坏习惯。

【问题讨论】:

    标签: macos assembly x86 byte nasm


    【解决方案1】:

    在大多数计算机体系结构(包括 x86)中,位不是可直接寻址的内存单元。您可以直接引用的最小单位是字节,在 x86 上恰好包含 8 位。您还没有说明您到底想要完成什么,所以我无法为您的问题提供确切的解决方案,但是使用单个位(或位组)通常是通过屏蔽掉那些位来实现的对AND 指令不感兴趣,最终将值左移或右移,然后进行处理。

    如果您想实际获取寄存器中第 n 位的值,那么您很可能正在寻找指令BT。它将第 n 位的值存储在进位标志中。

    当涉及到其他提示时:push 指令将堆栈指针递减按压入堆栈的字节数。这是 x86 架构的一个特点——堆栈按照设计向下增长。因此,如果你想释放堆栈上的一些空间,你可以使用add esp, number_of_bytes,而不是sub(你这样做的方式),这只会在堆栈上保留更多空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 2013-10-24
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多