相关疑难解决方法(0)

为什么十六进制数字前缀为0x?

为什么十六进制数字前缀为0x?我理解前缀的用法,但我不明白为什么0x选择的重要性.

c syntax hex

385
推荐指数
5
解决办法
23万
查看次数

NASM 规范中的哪些位置不允许使用十六进制数的语法 FFFFh?

我正在尝试用 ASM 组装一小段代码。此代码将 CX 设置为零,将 AX 设置为 1。我的代码:

mov cx, 0000h
mov ax, ffffh
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

$ nasm foo.asm
foo.asm:2: error: symbol `ffffh' not defined
Run Code Online (Sandbox Code Playgroud)

我可以通过编写mov ax, 0ffffh来解决此错误。但为什么不明白ffffh语法呢?NASM 文档中的哪个位置指定了允许使用哪些十六进制语法,不允许使用哪些十六进制语法?

我读了https://nasm.us/doc/nasmdoc3.html#section-3.4.1但找不到任何不允许的内容ffffh语法的内容。我缺少什么?

我也阅读了作为对此问题的评论提供的其他一些类似问题。但它们似乎都没有指出一些权威文档或规范来确认数字必须以数字开头。如果有人可以指出 NASM 文档中的确切摘录或某些规范来证实这一点,那就可以回答这个问题。

syntax x86 assembly hex nasm

5
推荐指数
1
解决办法
264
查看次数

引用内存位置的内容.(x86寻址模式)

我有一个内存位置,其中包含一个我想要与另一个角色进行比较的角色(并且它不在堆栈的顶部,所以我不能只是pop它).如何引用内存位置的内容以便进行比较?

基本上我如何在语法上做到这一点.

x86 assembly masm addressing-mode

4
推荐指数
1
解决办法
6687
查看次数

如何在汇编中表示八进制数?

例如,对于十六进制数字,我们可以使用0x98398or 8790h

八进制数值常量如何写?这有效吗?

mov eax, 70o
Run Code Online (Sandbox Code Playgroud)

x86 assembly

4
推荐指数
1
解决办法
5844
查看次数

什么是CPUID标准功能01H?

我需要检查第ECX30位,这是必需的CPU功能RDRAND.来自RDRANDWiki,

如果支持,则在调用CPUID标准功能01H后设置ECX寄存器的第30位.

我不知道这意味着什么."标准功能01H"?

这是否意味着EAX = 80000001h?我不确定如何继续.

c x86 assembly cpu-registers cpuid

3
推荐指数
1
解决办法
565
查看次数

masm 中以字母开头的十六进制值

masm 中的十六进制值必须以数字开头吗?如果我使用

.const

    _mmx_cons   QWORD f000000000000000h
Run Code Online (Sandbox Code Playgroud)

我收到一个构建错误:

test.asm(26): error A2006: undefined symbol : f000000000000000h
Run Code Online (Sandbox Code Playgroud)

但是如果我添加一个前导 0

.const

    _mmx_cons   QWORD 0f000000000000000h
Run Code Online (Sandbox Code Playgroud)

错误消失。这是为什么?我确定它代表 64 位值0xf000000000000000吗?

masm visual-studio-2010

2
推荐指数
1
解决办法
810
查看次数

在程序集中明确输入十进制数

我发现自己经常无法立即识别数字是十进制还是十六进制(如果十六进制数字没有前缀或字母)。例如,从上一个问题中得到一个喜欢0000000000400078但不确定是哪个的数字。

有没有办法在 x86_64 中明确指定带有前缀的十进制数?例如:

 mov     %rsp,       %rbp
 movb    $0x16,      -1(%rbp)
 movb    $0d22       -2(%rbp) # <-- something like this
 movb    $0b10110,   -3(%rbp)
Run Code Online (Sandbox Code Playgroud)

我知道这样做movb $22, -2(%rbx)有效,但是有没有办法明确地为它加上前缀/后缀,以便我们知道它是小数?

assembly x86-64 gnu-assembler att immediate-operand

1
推荐指数
1
解决办法
78
查看次数

如何在masm代码中编写字母启动的十六进制数字?

我目前正在编辑几个由MASM代码组成的宏.它们看起来都像这样:

Primary MACRO
Key 0Bh,'0'
Key 29h,15h
Key 03h,'2'
Key 06h,'5'
Key 0Ch,'+'
Key 0Dh,'´'
Key 1Bh,'¨'
Key 2Bh,27h
Key 35h,'-'
Key 34h,'.'
Key 33h,','
Key 56h,'<'
ENDM
Run Code Online (Sandbox Code Playgroud)

我注意到,我可以写一个由发起十六进制数字(首先)字符0-9的格式如下:02h,12h,5Ah,等等.但是,如果我尝试以同样的方式来写一封信引发的十六进制数字(即像ABh,CAh,DFh等等),我得到一个错误.我曾尝试格式0xBA,0xFE等等,但它也不管用.

在这种情况下,有人能告诉我用于写入字母启动的十六进制数字的正确格式吗?

assembly hex masm32

0
推荐指数
1
解决办法
713
查看次数

错误:通过寄存器相乘时操作数类型无效

我正在用 x86_64 汇编语言编写一个程序,它需要我通过变量来偏移内存地址。我试图使用 来*乘以地址edx,但是出现以下错误:

    kernel.asm:23: error: invalid operand type
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况以及如何解决我的问题?这是我的代码:

mov edx, 1
mov ebx, 0xb8000+160*edx
inc edx
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm addressing-mode

0
推荐指数
1
解决办法
537
查看次数