169 похожих чатов

У меня такой вопрос. Вот мне нужно сделать бинарный файл

с ассемблер кода:
[bits 32]
[org 0x7c00]
start:
cli
mov esp, stack_space
call _main

hlt

section .text
align 4
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002 + 0x00)

global start

extern _main


stack_space:

times (510 -($-$$)) db 0x00
dw 0xAA55
Вот тут я использую дериктиву org, но при исполнении команды
nasm -f elf32 boot.asm -o boot.o
Я получаю ошибку: error: unrecognized directive [org]
Я меняю флаг команды место elf32 на bin и мне пишет ошибку что binary output format does not support external references
Можете подсказать как я могу сделать бинарный файл для qemu и с возможностью добавить дерикторию org и внешние подключения?

26 ответов

112 просмотров

ORG 0 BITS 32

1. Синтаксис не такой 2. Куда ты в бинарник символ extern засунешь? Это только для обьектников. Использовал бы ты FASM... Эх.

Ты по-сути определись, тебе extern нужен, или org. Если org - тогда всё на ассемблере писать будешь, либо на С напишешь ядро в виде бинарника, и напишешь загрузчик на ассемблере, который этот бинарник будет подгружать. А потом можно и склеить. Если extern - тогда готовь конфиг линковщика, чтобы свой обьектник в бинарник залепить. И в том же конфиге пропишешь лепку ядра. Дааа... А вот если бы ты на FASM писал...

Вот этих section не было бы, вообще код был бы красивее, удобнее, компиляция была бы проще (всё не флагами передаётся, а прямо в коде прописывается), и вообще всё круто было бы.

вы были бы защищены в чате от обвинения в ереси, за "неправильные" суждения :)

Mixail Frolov
вы были бы защищены в чате от обвинения в ереси, з...

При чём тут это? Я предлагаю лучший вариант. Но не заставляю. Пусть хоть на TASM пишет. А ещё лучше - на GAS вообще. 😁

КТ315
При чём тут это? Я предлагаю лучший вариант. Но не...

по газу в осдев вики вроде как есть хорошее описание на загрузчик

Это не конфиг... Даааааааа, это тебе в чат по OSDev. Долгий путь тебе предстоит, тормозок готовь.

Недолгое время я был в их числе...

Да.

КТ315
Это не так плохо.

Да, не худший вариант из возможных

The Bird of Hermes
Да, не худший вариант из возможных

Я на MASM тоже писал, мне вот понравилась IDE, написанная на MASM, для разработки кода на MASM, в виде Delphi. Открываешь, и там тебе сразу форму дают, лепишь кнопочки, и вот тебе программа на ассемблере. Прикольно. Но на FASM всё же лучше, да и вообще с нуля писать окно лучше, чем лепить в редакторе форм.

а зачем? на логику больше времени уйдёт, а набросать и в vb6 можно

Mixail Frolov
а зачем? на логику больше времени уйдёт, а наброса...

Ну просто все эти мучения с координатами не очень приятны, а в конструкторе привязки есть

Так это простейшая математика. X = (ширина_окна/2)-(ширина_кнопки/2) Можно макрос сделать.

В OSDev иди, там есть готовый пример, называется "Bare Bones".

The Bird of Hermes
Ну просто все эти мучения с координатами не очень ...

Если понять логику, можно вручную как раз даже быстрее писать. В уме просто представляешь окно это, и что тебе надо сделать. Чтобы по центру - делишь ширину на 2, делишь кнопку на 2, и это начальная позиция — её центр ляжет ровно в центр по ширине окна (потому что на 2 поделили). С Y аналогично. Чтобы чуть ниже вторую кнопку положить - аналогично получаешь начальную позицию по центру, и по Y прибавляешь размер предыдущей кнопки+небольшой отступ, готово. Вот тебе 2 кнопки красивенькие. Можешь первую кнопку вверх чуть поднять по Y, чтобы они обе по центру лежали.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта