gpt4 book ai didi

assembly - 主题标签 '#' 可以用作汇编 (NASM) 中的注释吗?

转载 作者:行者123 更新时间:2023-12-05 01:17:56 25 4
gpt4 key购买 nike

我正在关注 this assembly source code出于学习目的,遇到了以下几行:

# load a disk extent into high memory
# eax - sector address
# ecx - sector count
# edi - destination
load_extent:
; loading kernel to 1MiB
; move part of kernel to startup_end via bootsector#load and then copy it up
; repeat until all of the kernel is loaded
buffer_size_sectors equ 127

有些行以 # 开头,看起来像是注释。

然后他跟进标签 load_extent: 并添加以 ; 开头的注释。这是我习惯看到的。

这样做是故意的,以免人们不小心复制他的代码吗?还是我遗漏了什么?

最佳答案

我经历了整个 NASM documentation ,并且没有提到散列是注释字符,但我自己对 NASM v 2.11.08 的实验显示以 # 开头的行被视为注释行。所以它看起来像是 NASM 的非官方功能。文档中仅提及 ; 字符。

奇怪的是,这行:

xx: # inc ebx

在标签之后使用散列的地方将失败并显示“错误:解析器:预期指令”

同样来自 NASM 历史更改列表:“#、@、~ 和 c{?} 现在是标签中的有效字符。” 自 1996 年的 v0.91 以来,所以 xx #yy: 定义符号标签xx#yy

这使得它在某种程度上与 sh 脚本兼容,并且在为 C 和 NASM 创建混合头文件时可能会被滥用,其中 NASM 将忽略 C 预处理器指令,因此这可能很有用。

但我建议不要使用它,至少在它被正式承认之前,这是 NASM 的有意特性,而不是解析器的一些错误。


在完整回答这个问题之前,先从我早期的评论中进行一些闲聊:

汇编不是一种单一的编程语言,而是所有机器语言助记符的总称=>没有规则。

每个 CPU 供应商都有自己的指令集(“ISA”),它需要特定的汇编器,每个汇编器供应商都倾向于填补官方文档中缺失的空白(这些文档仅描述指令功能,不打扰定义编程语言的完整有效语法),因此即使在同一个 CPU 上,您也可以使用略有不同方言的汇编器,一个支持 # 作为注释,另一个不支持。

在 x86 上,甚至还有语法截然不同的汇编程序:AT&T 与 NASM,远远超出了额外的注释开始字符,实际上颠倒了指令操作数的顺序,并对某些指令使用了不同的助记符(movzbl vs movzx 例如),等等...

对于其他示例:在流行的(在大学类(class)中)MIPS 模拟器“MARS”和“SPIM”中,# 是唯一的注释字符而不是 ;,但是在他们的官方文档中有详细记录(与 x86 无关)。

关于assembly - 主题标签 '#' 可以用作汇编 (NASM) 中的注释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com