4

これは私のアセンブリレベルのコードです...

section .text
global _start
_start  mov eax, 4
        mov ebx, 1
        mov ecx, mesg
        mov edx, size
        int 0x80
exit:   mov eax, 1
        int 0x80
section .data
mesg    db      'KingKong',0xa
size    equ     $-mesg

出力:

root@bt:~/Arena# nasm -f elf a.asm -o a.o
root@bt:~/Arena# ld -o out a.o
root@bt:~/Arena# ./out 
KingKong

行の $ は何ですかsize equ $-mesg$使用されている記号について誰か説明してください...

4

1 に答える 1

5

$進行中のアセンブラの「現在の位置」を示します。この場合、mesg文字列の長さを格納するために使用されます。

size equ $-msg

「ラベルを作成sizeし、現在の場所からラベルの場所を引いた値に設定する」と言いmesgます。「現在の場所」は文字列「KingKong\n」の末尾の 1 つ後ろにsizeあるため、その長さ (9 文字) に設定されます。

ドキュメントから:

NASM は、式で 2 つの特別なトークンをサポートしており、計算に現在のアセンブリ位置を含めることができます:$および$$トークン。$式を含む行の先頭のアセンブリ位置に評価されます。を使用して無限ループをコーディングできますJMP $$$現在のセクションの先頭に評価されます。を使用して、セクションのどこまで進んでいるかを知ることができます($-$$)

于 2013-07-27T16:54:45.287 に答える