Кто-нибудь знает, как установить исходный адрес, используя синтаксис AS86?
В NASM вы, например, добавили бы (в загрузчике B IOS): ORG 0x7c00.
Кто-нибудь знает, что такое эквивалент AS86? Или какой функциональный эквивалент был бы?
Я использую AS86, потому что я компилирую программы с выводом 16-битной сборки из B CC (компилятор Брюса C). Если кто-нибудь знает настоящий 16-битный C компилятор, который будет производить NASM-совместимую сборку, это также решило бы мою проблему (поскольку, в отличие от AS86, у меня не было проблем с получением необработанных двоичных файлов NASM для работы с использованием определенной памяти смещения адреса).
2/1 Редактировать с примером кода AS86:
ORG 0x7c00
USE16
mov ah, 0x0e
mov al, 0x61
xor bx, bx
int 0x10
ORG 0x7DFE
.word 0xAA55
Файл сгенерированного символа (кажется правильным):
+ 00007C00 ----- $start
+ 00007E00 ----- $end
И сгенерированный двоичный файл 512 байт, что означает (я думаю), что директива ORG в конце дополняет остальную часть файла таким же образом, как это происходит с NASM с использованием директивы times.
Спасибо!
Окончательное редактирование: Итак, это было решено. Исходя из полученной мной помощи, решение проблемы адреса отправителя состояло в том, чтобы поместить адрес отправителя в начале с помощью директивы ORG, а затем также использовать директиву ORG в конце, чтобы указать адрес памяти, по которому программа должна находиться в этот конкретный момент в файле. Затем файл на ассемблере должен быть скомпилирован в as86 с использованием опции -s для генерации файла символов.
Затем причина, по которой этот код не работал, хотя проблема с адресом памяти была решена, заключалась в том, что я Я не очень внимательно читал страницы руководства и эффективно загружал (в регистры) содержимое областей памяти, указанных в операндах, которые я использовал, а не их непосредственные значения.
Итак, после устранения этой проблемы тестовый код запускается при загрузке и печатает символ «a», как и ожидалось.
Еще раз спасибо всем.