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 ответов

118 просмотров

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, чтобы они обе по центру лежали.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта