Я делаю программу в сборке для чтения диска через порты (0x1f0-0x1f7), и я смешиваю его с c. У меня есть функция в сборке, которую я назову в своем основном funtion. Моя главная функция, как 1 параметров: секторам следующим образом:Смешивание C и сборка
Kernel.c
extern int _readd(int nmrsector);
(...)
int sector = 257;
int error = _readd(sector);
if(error == 0) PrintString("Error"); //It is declared on my screen.h file
disk.asm
global _readd
_readd:
push eax
push ebx
push ecx
push edx
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ecx, eax
cmp ecx, 256
jg short _fail
jne short _good
_fail:
xor eax, eax
leave
ret
_good:
xor eax, eax
mov eax, 12
leave
ret
Это происходит сбой при запуске его с VirtualBox. Есть идеи?
* Как * вы запускаете его в VirtualBox? Возможно, вы захотите попробовать его с помощью [QEMU] (http://wiki.qemu.org/Main_Page), у которого есть крючки, которые позволяют использовать отладчик. –
Правильно использовать фреймы стека. Прочитайте, как работают «ENTER» и «LEAVE». После вашего «оставления» у вас все еще есть все, что нужно сделать в стеке. – ElderBug
Я всплыл все, и он всегда возвращает мне ошибку. Когда я меняю свой сектор на 25, он должен возвращать int, отличное от 0, но он возвращает 0. Что я делаю неправильно? – C00LD0WN