Переводить.код раздела данных от nasm до газа?

#assembly #nasm #gnu-assembler

Вопрос:

Переводить.код раздела данных от nasm до gas. раздел данных nasm:

 TssDesc:
    dw TssLen-1
    dw 0
    db 0
    db 0x89
    db 0
    db 0
    dq 0

Tss:
    dd 0
    dq 0xffff800000190000
    times 88 db 0
    dd TssLen

TssLen: equ $-Tss
 

моя попытка перевести на газ:

 TssDesc:
    .word TssLen-1
    .word 0
    .byte 0
    .byte 0x89
    .byte 0
    .byte 0
    .quad 0

Tss:
    .long 0
    .quad 0xffff800000190000
    .fill 88,8,0
    .long TssLen

TssEnd:
    .set TssLen, TssEnd - Tss
 

Правильно ли это?

И можно ли использовать TssLen(.длинный TssLen) перед .set(.set TssLen, TssEnd — Tss)?

Комментарии:

1. .fill 88,8,0 это неправильно. Обратите внимание, что оригинал имеет db . Так что это просто .fill 88 .

2. Стиль кодирования: я бы предпочел использовать .equ для определения целочисленных констант или TssLen = . - Tss , по аналогии с equ ключевым словом NASM. .set это синоним в GAS, но я предпочитаю не использовать его для определенных констант времени сборки, которые я на самом деле не хочу или не хочу видеть в таблице символов в .o.

3. Но если я напишу .equ TssLen = . — Tss, это выдаст мне ошибку boot64.S:25: Ошибка: ожидаемая запятая после «TssLen».