Menu
Coddy logo textTech

$ 記号

CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 29/45。

write システムコール(第5章)を使用して文字列を出力するとき、何バイト出力するかをCPUに伝える必要があります。

手動で文字数を数えることもできます:

message db 'Hello', 0x0a    ; 6バイト (H e l l o 改行)
mov rdx, 6                  ; 手動カウント

しかし、手動でのカウントは時間がかかり、ミスも起こりやすいです。文字列を変更した場合、再度カウントして数値を更新しなければなりません。

解決策:<strong>$lt;/strong>を使用した自動長さ計算

$ロケーションカウンタです。これは、次のバイトが配置される現在のメモリアドレスを表します。

例 1: シンプルな文字列

section .data
    message db 'Hello', 0x0a
    msgLen equ $ - message

仕組み:

  • message は開始アドレスです(例: 1000)
  • 6バイトを格納した後、$ は1006になります
  • $ - message = 1006 − 1000 = 6(長さ)

注: equequate の略です。これは定数 — 値を表す名前を作成します。

例 2: 複数の文字列

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', 改行)
    
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', 改行)

各文字列には、自動的に計算される独自の長さがあります。$ は、常に各文字列の直後の現在の位置を参照するため、計算ごとにリセットされます。

challenge icon

チャレンジ

簡単

値 'Paris' に続いて改行 (0x0a) を持つ、city という名前の文字列を作成してください。次に、$ - city を使用して長さを自動的に計算する cityLen という名前の定数を作成してください。

自分で試してみよう

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン