2013-07-27 3 views
3

Это мой код уровня сборки ...

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 

Выход:

[email protected]:~/Arena# nasm -f elf a.asm -o a.o 
[email protected]:~/Arena# ld -o out a.o 
[email protected]:~/Arena# ./out 
KingKong 

Что такое $ в строке size equ $-mesg. Некоторые из них, пожалуйста, объясните, что используется символ $ ...

ответ

3

$ указывает «текущее местоположение» ассемблера, когда он идет. В этом случае он используется для хранения длины строки mesg.

size equ $-msg 

говорит «сделать ярлык size и установить его равным текущее местоположение минус расположение mesg этикетки». Поскольку «текущее местоположение» находится за концом строки «KingKong \ n», size устанавливается на эту длину (9 символов).

Из documentation:

NASM поддерживает два специальных маркеров в выражениях, что позволяет расчеты включать текущую позицию сборки: в $ и $$ жетоны. $ оценивает положение сборки в начале строки, содержащей выражение; поэтому вы можете закодировать бесконечный цикл, используя JMP $. $$ оценивает начало текущего раздела; так что вы можете сказать, насколько далеко вы находитесь в секции, используя ($-$$).

+0

Спасибо ... помог мне снова !!! – vikkyhacks

Смежные вопросы