nasm - 在 NASM 中声明变量

标签 nasm unsigned-integer

我刚刚在学习 NASM,我有点想弄清楚这个问题。你如何在 NASM 中声明变量?例如,如何在 NASM 中声明 unsigned int i?谢谢

最佳答案

汇编语言中没有 unsigned int 这样的东西(据我所知)。 在 NASM 中,您只能声明内存位置并将内容放入其中。 示例:

section .data
  abyte:    db  15
  aword:    dw  452
  adword:   dd  478569
  ; etc etc see Nasm manual for more 'types'

您处理变量的方式将使您使用有符号或无符号值。当您需要带符号的值时,请记住 div 和 mul 仅适用于无符号值。 (MSB 不是符号位)。在这种情况下,您应该使用 idiv 和 imul(整数除法或带符号除法)。 还要记住,一个值的负数将显示为二进制补码。您将看到 5(以 AX 为例):0000000000000101 二进制,但对于 -5,您将看到 1111111111111011,这是 5 的二进制补码。 两者相加都给出 5 + (-5) 或 0000000000000101 + 1111111111111011 = 0000000000000000。溢出标志将被适当设置以指示当两个数字都被视为无符号时存在溢出,因此有时您可以忽略它。一个好的做法是经常调试和检查标志状态。 要检查 AX 是否为负数,您可以使用 ax,如果 MSB 为 1,则 ax 和符号标志将为 1,否则为 0。(js 和 jns 指令)

回答有点晚了,但是对于那些有同样问题的人.....

关于nasm - 在 NASM 中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26660052/

相关文章:

java:将字节数组byte [1000]转换为数组int [500]的最快方法

将无符号字符转换为有符号整数

rust - 如何在Rust中使用十六进制表示法指定 float ?

assembly - UEFI引导服务CreateEvent()返回状态EFI_INVALID_PARAMETER

x86 - 操作系统的引导加载程序不起作用

c - NASM 数组指针操作

java - 将 uintN 数据类型从 C 传输到 Java(套接字编程)

assembly - NASM 是否有默认目标处理器?

顶部带有 %include 的程序集 - 打印输出意外结果 : just an "S"

java - JNI : converting unsigned int to jint