1
我正在使用某些彙編函數和16位C編譯器創建操作系統的工作。我的任務是使用0x10中斷在屏幕上打印字符串。由於中斷可以在彙編文件中調用,因此我提供了一個彙編文件,其中包含一個名爲interrupt的函數,其中包含五個參數:中斷號和在AX
,BX
,CX
和DX
中傳遞的中斷參數。 例如,要打印 'Q' 與所提供的功能,我需要寫這樣的:如何使用BIOS中斷打印字符串
char al = 'Q'
char ah = 0xE
int ax = ah*256+al;
interrupt(0x10,ax,0,0,0);
,或者簡單:
interrupt(0x10,0xE*256+'Q',0,0,0);
中稱爲
ç程序
kernel.c
我的任務是寫一個函數printString(char *chars)
在C它採用一個字符串並使用討論的彙編函數在屏幕上打印它。
我已經這樣做了:
void printString(char * chars){
int i = 0;
int l = length(chars);
for(; i < l; i++){
interrupt(0x10,0xE*256+chars[i],0,0,0);
}
}
,但它的字符串多次打印而不是打印一次。 當我嘗試打印「Hello World」時,它打印了11次,因爲它包含11個字符,其他字符串也是如此。
您可能在處理中斷的代碼上遇到問題。你可以添加它嗎? –
不會''strlen()'而不是'length()'?這段代碼是否實際編譯?或者是'length()'自定義函數來獲取字符串的長度?在這種情況下,你可以添加它嗎? –
這是一個體面的練習入門,但使用BIOS不是編寫操作系統的方式。將東西寫入屏幕的正確方法是爲視頻界面編寫驅動程序。 –