2017-07-11 1 views
1

NASM manualは言う:文字列が いずれかの単一引用符( '...')、二重引用符(」で囲まれた最大8つの文字で構成されていなぜ彼らは文字列がNASMで最大8文字で構成されていると言っていますか?

3.4.2文字列

を... ")またはバッククォート (` ... `)。一重引用符または二重引用符はNASMに相当します(ただし、一重引用符で定数を囲むと の引用符は二重引用符を含むことができます)。その内容は となっています。バッククォートで囲まれた文字列は、特殊文字のCスタイルの \ -escapesをサポートします。

文字列が最大8文字であると言う理由を理解できません。文字列が9文字で構成されている場合、文字列と呼ばれません。

+5

を意図はい、あなただけの[3.4.4文字列定数](http://www.nasm.us/xdoc/2.11に、2つの以上のサブセクションを読む必要があります。 08/html/nasmdoc3.html#section-3.4.4)_ "文字列定数は文字定数のように見えますが、もっと長くしかありません" – Jester

答えて

5

それはすべて、この

sub al, '0' 

から非常コードの可読性を向上させるために即時のような文字を使用する能力を茎。連続ステップがを即時だったから、ということ

sub al, '0' 
sub ax, '00' 
sub eax, '0000' 
sub rax, '00000000' 

NASMは明らかドキュメントとして区切り文字で本当にうるさいではありません(私は文字と文字列のための二重引用符のための単一引用符を使用しますが、それだけです私の個人的な味)。

文字列は数値の即値を生成し、左端の文字が最下位バイトに配置されることに注意してください。
mov rbx, ''mov rbx,0x3736353433323130に対応し、その値がメモリに格納されるとき、正確な文字列が入力されることを根拠としています。

文字定数式のコンテキストで使用され、最大8バイトの長い文字列、から構成されています

また、それは離れて、文字列と文字列を指示する文脈であることに注意してください。それは整数であるかのように扱われます。

MY_SYMBOL EQU 'abcd'   ;Character string 
MY_VAR dw 'abcd'   ;String 

mov eax, MY_SYMBOL   ;mov eax, 64636261h 
mov eax, MY_VAR    ;mov eax, address_of(MY_VAR) 
mov eax, 'cdef'*2    ;Character string 

彼らは文法的に重なっているため。


ない語呂合わせは

関連する問題