Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2016, 04:41   #1
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию не происходит вызов С функции из ассемблера, очень странная ситуация

В кратке,

Есть файт "kernel.c" и "kernel.h"

PHP код:
void kernel_main() {

    
char BUFF = (char*) 0xb8000;

    
int i=0int ii=0;

    while ( 
80*25) {
        
BUFFii++ ] = '#'BUFFii++ ] = 0x7i++;
    }

в "kernel.h" одна строка "extern void kernel_main();"

Запускаю всю эту кухню через qemu, is ISO файла.

qemu -cdrom ./os.iso

Еси запускать только ядро, то все в порядке.
Код:
    echo " Loading kernel"
    multiboot /boot/kernel.bin
    echo " Loading kernel: done" // эта строка выводится
Дело в том что GDB не засекает момент когда идет вызов kernel_main,

GRUB просто выводит строку что, он запустил ядро.

Я уже даже не знаю в какую строну смотреть, где искать. Удалил вообще все что было. Как видно по количестку строк.


PHP код:
bits    32

section 
.text
    align   4                       
align at 4 byte
    dd      0x1BADB002              
MAGIC
    dd      0x00
    dd      
- (0x1BADB002 0x00)

global 
start
extern kernel_main

start
:

    
cli                     Clear interrupt flag [IF = 0]; 0xFA
    mov esp
kernel_stack   set stack pointer
    
;push eax               multiboot structure
    
;push ebx               MAGIC
    call kernel_main        
controll to kernel_main(); in kernelc.
    hlt                     
HLT   Enter halt state 0xF4

end
:
    
cli
    hlt
    jmp end

section 
.bss
    resb 1024
*256           ; *Kb for stack

kernel_stack
:           ; <= stack_space 

Запускал в virtual-box, ситуация таже

Вообщем как я понял, не происходит "call kernel_main".

Но почему ? Как такое может быть.

Есть такой же kernel чуть-чуть измененны, в нем запускается.

Пробовал тупо копировать содержимое файлов, думал может просто не вижу чего.

А после того как GDB даже не увидел ничего
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 28.09.2016 в 04:45.
pompiduskus вне форума Ответить с цитированием
Старый 28.09.2016, 08:56   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Вообщем магия, все работает.

Попытался переписать все что было на ассемблере под синтакс AT&T, но некоторые вещи так и не смог реализовать, ядро или падало, или мертвый цикл.

Попробовал еще раз кодов в стиле NASM и все, заупустилось.

Вроде как хорошо, но так как я даже и не понял что произошло, хрен его знает как будет дальше
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странная ситуация с apache2 buffalord Администрирование dedicated серверов, VPS/VDS, shared хостингов, IaaS, PaaS. 5 07.09.2016 15:07
Очень странная ошибка в PHP alhon PHP 7 22.10.2015 15:10
формулировка задачи очень странная i.yakushev Общие вопросы C/C++ 4 05.05.2011 10:12
C++ Функции...Немонятная ситуация Помогите плиз Myau Thai Помощь студентам 11 28.05.2009 00:08