簡體   English   中英

混合C和匯編

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM