簡體   English   中英

我可以在內聯匯編中使用中斷嗎

[英]Can i use interrupts in inline assembly

我想在內聯 asm 中使用中斷,但它不允許我認為我的應用程序是這樣的

__asm__("movb %ah,9;" 
"movb %al,0x41;" 
"movb %bh,0x0;" 
"movw %cx,0x1; "
"movb %bl,0x0F ;" 
"int $10; ");

運行這只是一個空白區域后我什么也沒有得到我該怎么辦?

我可以在內聯匯編中使用中斷嗎?

是的,只要中斷存在並且您通知編譯器如何正確處理它(例如,“clobber list”告訴編譯器哪些寄存器發生了變化等)。 請參閱GCC 手冊https://stackoverflow.com/tags/inline-assembly/info

只要您使用正確的數字,您可能想要int $0x10而不是int $10 而且您需要將立即數移動到寄存器中,而不是將寄存器移動到絕對 memory 地址。

如果這不起作用,我會懷疑您正在嘗試使用 BIOS “視頻服務”在屏幕上打印字符; 但你不是在實模式下(並且使用 32 位代碼或 64 位代碼); 並且 BIOS 可能根本不存在(例如 UEFI 系統); 並且操作系統可能已經接管了對硬件的控制(並打破了 BIOS 期望的所有假設,例如在某些設備中禁用過時的“舊垃圾仿真”,重新配置 memory,以及計時器和中斷控制器;這樣即使 BIOS 存在並且您'在實模式下你仍然不能安全地使用它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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