代码之家  ›  专栏  ›  技术社区  ›  Joshua Leung

N是作为存储器地址存储在寄存器中还是作为整数存储?

  •  0
  • Joshua Leung  · 技术社区  · 6 年前

    %esi 是存储函数参数的寄存器 int n . 做 %电喷雾 商店 n 是十六进制整数还是内存地址?

    0 回复  |  直到 6 年前
        1
  •  2
  •   Erik Eidt    6 年前

    十六进制是人类可读的序列化形式(例如,用于打印到控制台)。

    整数也是对位的一种解释,例如,无符号对有符号。

    在内部,计算机将所有内容存储为二进制位字符串。所以, %esi least significant bit 一直到最重要的一点。

    解释并不是由寄存器本身决定,而是由使用它的程序在其机器代码的指令序列中编码。


    Instruction Set Architecture ,所有可用的状态资源,如CPU寄存器,都必须从指令的角度来看待,因为它们本质上是访问(处理器和内存)状态的唯一方式。

    因此,如果指令集允许取消对寄存器的引用,那么可以合理地使用它来保存地址或指针。如果指令集支持寄存器的乘法,它可能合理地保存一个索引、一个有符号整数或一个无符号整数。

    如果指令集不支持某些操作(例如,x86不支持 %电喷雾 -这些寄存器 仍然 可用于在转换中保存32位浮点值(例如,从一个位置复制到另一个位置而不使用算术)。


    所以,为了理解如何编码 n %电喷雾 %电喷雾 的32位有序字符串。这篇维基百科文章记录了 signed integers ,例如。最受欢迎的是签名的 int

        2
  •  1
  •   Peter Cordes    6 年前

    int n 在所有调用约定中,asm中的值与C中的值相同,因为它适合于寄存器。

    调用约定只为更广泛的类型引入“隐藏”引用(即使C语义是按值传递的,也要传递指针)。

    是十六进制还是内存地址?

    这毫无意义,这些都不是替代品。十六进制是数字(尤其是二进制数字)的文本序列化格式。

    十六进制是打印值或指向值的指针的有用方法。

    寄存器中的数字从来都不是十六进制的,但是十六进制对于调试器这样的工具来说是一种有用的方法 打印 这样人类就可以看到它们了。

    如果一个数字 存储在十六进制中,它将占用两倍的空间:字符串所表示的数字的每4位半字节一个ASCII十六进制数字。

    推荐文章