Assembly 汇编:注释字符;定位

Assembly 汇编:注释字符;定位,assembly,conventions,comments,Assembly,Conventions,Comments,我正在努力学习组装,到目前为止,我才刚刚开始。我不太了解风格惯例,因为我还没有真正研究过它。 我知道注释是以分号开头的,因为指令的结尾用行尾字符(\n)标记;我看到的大多数代码示例都是用空白字符分开的,分号和指令中的注释,这是任何人都会想到的 global some_rnd_labl section .data hifive dd 0x00000005 section .text some_rnd_labl: mov eax, [esp+4] ; Adds

我正在努力学习组装,到目前为止,我才刚刚开始。我不太了解风格惯例,因为我还没有真正研究过它。
我知道注释是以分号开头的,因为指令的结尾用行尾字符(\n)标记;我看到的大多数代码示例都是用空白字符分开的,分号和指令中的注释,这是任何人都会想到的

global some_rnd_labl

section .data
   hifive   dd   0x00000005

section .text
some_rnd_labl:
   mov    eax, [esp+4]     ; Adds the second last item in the stack...
   add    eax, [esp+8]     ;  and then the third last one.
    add   eax, [hifive]    ; Good job, accumulator! Hi-5!
   mov    edx, eax         ; Now store the result in dx...
   ret
但是
在指令旁边直接写分号是否会被认为是不好的做法,然后只把空白字符放进去,或者这仅仅是一个味觉/主观意见的问题?p>

我之所以问这个看似(而且可能)自我回答问题是因为我熟悉C++和java,这两个指令都用分号结束指令,并用“<强>//< />强”标记联机注释,并且将注释标记与注释本身分开可能是不直观的和/或误导的;我认为这种风格更容易阅读,但我不确定普通程序员不会因为它不寻常而觉得它可读性较差。
例如,你可以看到:

; Assembly code for my compiler / OS / CPU

mov    eax, [esp+4];          Adds the second last item in the stack...

作为C++ +对应部分:

// C++ based pseudocode
//  (notice how the semicolon and "//" are mashed together)

std::vector<int> stack(DEFINED_ELSEWHERE);
int
 var1 = stackArray[1];//   Adds the second last item in the stack...
基于代码> //C++的伪代码 //(注意分号和“/”是如何混合在一起的) std::矢量堆栈(在别处定义); int var1=stackArray[1];//添加堆栈中的第二个最后一项。。。
是的,我意识到这是一个愚蠢的(显然是不客观的)问题,但我认为这仍然值得一问。

对不起,但我投票以基于意见的方式结束这一问题。。。也就是说,我个人的观点是,指令后面的分号是不好的,因为它看起来像指令的一部分,但它不是。此外,在C/C++/Java中,分号是语句分隔符,允许您在一行上使用多个语句,而在asm中,行末注释的工作方式当然不一样。总的来说,试图使asm看起来类似于C语法可能会在以后适得其反,因为某些类似的C语法的工作原理完全不同。我建议把它当作不同的语言,用不同的语法来学习。我的意见是——我更喜欢
。我发现,如果分号不容易识别,我的眼睛会被迫搜索分号,以确认我看到的实际上是一条注释。同意这两种说法,同样在C语言中,我不会立即将
/
放在code语句之后,然后出现一个很大的间隙(如上一个示例中所示):我尽可能将它们垂直排列,用
/
直观地表达评论的一部分,而不是代码的一部分。这不是一个愚蠢的问题:有些人可能会发现演示是浪费时间,而他们只是想完成作业。但表达的风格和编码的风格是并行不悖的。除了让代码在稍后回溯时更具可读性之外,很好的格式化并不浪费时间:它允许大脑的另一部分检查刚刚编写的代码,或者考虑下一步要编写的代码。在编写了更多的汇编代码之后,您将不再在每一行上写入注释。如
现在将结果存储在dx…
。就像你不写
a=1;//在C或Java中将a设置为1
。然后分号就会被浪费掉。而且它看起来也很难看!
// C++ based pseudocode
//  (notice how the semicolon and "//" are mashed together)

std::vector<int> stack(DEFINED_ELSEWHERE);
int
 var1 = stackArray[1];//   Adds the second last item in the stack...