我正在尝试用 ASM 组装一小段代码。此代码将 CX 设置为零,将 AX 设置为 1。我的代码:
mov cx, 0000h
mov ax, ffffh
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
Run Code Online (Sandbox Code Playgroud)$ nasm foo.asm foo.asm:2: error: symbol `ffffh' not defined
我可以通过编写mov ax, 0ffffh来解决此错误。但为什么不明白ffffh语法呢?NASM 文档中的哪个位置指定了允许使用哪些十六进制语法,不允许使用哪些十六进制语法?
我读了https://nasm.us/doc/nasmdoc3.html#section-3.4.1但找不到任何不允许的内容ffffh语法的内容。我缺少什么?
我也阅读了作为对此问题的评论提供的其他一些类似问题。但它们似乎都没有指出一些权威文档或规范来确认数字必须以数字开头。如果有人可以指出 NASM 文档中的确切摘录或某些规范来证实这一点,那就可以回答这个问题。
我有一个内存位置,其中包含一个我想要与另一个角色进行比较的角色(并且它不在堆栈的顶部,所以我不能只是pop它).如何引用内存位置的内容以便进行比较?
基本上我如何在语法上做到这一点.
例如,对于十六进制数字,我们可以使用0x98398or 8790h。
八进制数值常量如何写?这有效吗?
mov eax, 70o
Run Code Online (Sandbox Code Playgroud) 我需要检查第ECX30位,这是必需的CPU功能RDRAND.来自RDRANDWiki,
如果支持,则在调用CPUID标准功能01H后设置ECX寄存器的第30位.
我不知道这意味着什么."标准功能01H"?
这是否意味着EAX = 80000001h?我不确定如何继续.
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吗?
我发现自己经常无法立即识别数字是十进制还是十六进制(如果十六进制数字没有前缀或字母)。例如,从上一个问题中得到一个喜欢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)有效,但是有没有办法明确地为它加上前缀/后缀,以便我们知道它是小数?
我目前正在编辑几个由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等等,但它也不管用.
在这种情况下,有人能告诉我用于写入字母启动的十六进制数字的正确格式吗?
我正在用 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)