[英]Mixing C and Assembly
我正在匯編程序,以通過端口(0x1f0-0x1f7)讀取磁盤,並將其與c混合。 我有一個匯編函數,我將在c主函數中調用該函數。 我的主要功能是作為1個參數:要讀取的扇區:
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一起運行時會崩潰。 有任何想法嗎?
如果在輸入功能時保存CPU寄存器,則需要在完成操作后將其還原。 您的PUSH
必須與POP
匹配。
另外,如果使用堆棧框架訪問局部變量和參數,請在所有內容之前設置框架( push ebp ; mov ebp, esp
),以便更輕松地引用它們。 這里[ebp+8]
並不涉及參數,因為您在設置框架之前先更改了堆棧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.