Если начальная часть вашей программы умещается в 512 байт, и вы не возражаете ограничивать себя вызовами BIOS, инструкциями in
/ out
и записью в магические области памяти для ввода / вывода ... Тогда да!
Предполагая, что вы используете NASM, вот глупый пример ... (Внимание: мои навыки 16-битной сборки не очень хороши и немного ржавые, так что это может быть не самый лучший код.)
[org 7c00h] ; BIOS will load us to this address
mov ax, 0b800h ; Console memory is at 0xb8000; set up a segment
mov es, ax ; for the start of the console text.
;
; Let's clear the screen....
;
xor di, di ; Start at beginning of screen
mov cx, 80*25 ; Number of chars in the screen
mov al, ' ' ; Space character
mov ah, 0fh ; Color (white on black)
repne stosw ; Copy!
;
; Write an 'a' to the screen...
;
mov byte [es:0], 'a' ; Write an 'a'
sleep:
hlt ; Halts CPU until the next external interrupt is fired
jmp sleep ; Loop forever
times 510-($-$$) db 0 ; Pad to 510 bytes
dw 0aa55h ; Add boot magic word to mark us as bootable
Тогда вы можете собрать с:
nasm foo.asm
И запишите это на образ дискеты следующим образом: (Предполагая систему типа Unix ...)
$ dd if=/dev/zero of=floppy.img bs=512 count=2880
$ dd if=foo of=floppy.img conv=notrunc
Теперь вы можете загрузить этот образ дискеты в Bochs (или, если вы записываете его на дискету, запустить его на реальном ПК), и он должен написать «a» на экране.
Обратите внимание, что это обычно полезно, только если вы пишете загрузчик или операционную систему ... Но с экспериментом весело, особенно если вы учитесь.
Обновление: Я прочитал веб-сайт emu8086 ... Кажется, что-то вроде ориентированного на встроенное использование x86, а не ПК. Похоже, у него есть некоторые интересные функции для моделирования оборудования. Если вы не заинтересованы в ориентации на ПК, Bochs не будет интересен. Если это не то, что вы хотите сделать, я согласен с комментатором, который предложил использовать emu8086.
Если вы заинтересованы в компьютерах, но хотите, чтобы что-то проходило через ваши программы ... Я часто использовал qemu для этой цели. Его флагов отладки (см. Man-страницу под -d
) достаточно для наблюдения за состоянием выполнения программы x86 на уровне сборки. (Я даже нашел его достаточно полезным для отладки ядер ОС, написанных на C, при условии, что вы очень внимательно посмотрите, что генерирует компилятор C).