Помогите перевести код с fasm на nasm

Мне нужно вывести текущее время в терминал пишу код на nasm. Для перевода числа в строку решил использовать этот код.

Он написан на fasm и оформлен в отдельную процидуру. Я же хочу использовать его в теле моей программмы. Мне непонятна пара моментов: Что такое @@ и @b в том коде? В остальном же, мне кажется, я понял суть прогрммы и написал правильный код:

  section .bss
  buf resb 250 

  section .text
  global _start
  gettime:

  mov eax, 13
  xor ebx, ebx

  int 0x80

  mov [time], eax ; время в секундах, перевести в строку для вывода

  ; перевод 

   xor ecx, ecx ; 0 в счетчик
   xor edx, edx ; 0

   mov ebx, 10 ; делитель системы счисления

   mov esi, [time]

   mov edi, [esi+4] ; старший dword
   mov esi, [esi+0] ; младший dword

   test edi, edi ; меняем флаги

   jz lowdword

   hightdword:

   ; делим старший dword

   mov eax, edi 
   div ebx
   mov edi, eax

   ; остаток от деления в edx

   lowdword:
   ; делим остаток от деления и младший dword

   mov eax, esi
   div ebx
   add edx, '0'
   push edx ; код символа в стек

   inc ecx
   mov esi, eax
   xor edx, edx

   test edi, edi ; Старшая часть не равна нулю

   jnz hightdword

   test eax, eax ; Младшая часть не равна нулю
   jnz lowdword

   mov edi, [buf]
   ; Дальше идёт метка @@

   ; теперь строка на вывод

   mov eax, 4
   mov ebx, 1
   mov ecx, buf
   mov edx, 8


   int 0x80

Чем можно заменить @b и что это за команда?


Ответы (1 шт):

Автор решения: insolor

@@ - это анонимные метки. Переход на @b или @r - это переход на ближайшую предыдущую метку @@, переход на @f - на ближайшую следующую (документация). Это не специфично именно для fasm, такой вариант меток есть и в masm, например.

Можно заменить на обычные метки:

    ; Считываем символы из стека в буфер
    mov edi, [buf]
loop_start:
    pop edx
    mov [edi], edx
    inc edi
    dec ecx
    jnz loop_start

Не знаю зачем вы в коде заменили локальные метки (с точкой в начале) на обычные - такие метки в nasm поддерживаются (см. тут например: Локальные метки)

→ Ссылка