assembly 我可以在内联汇编中使用中断吗?

iyr7buue  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我想在内联asm中使用中断,但它不允许我使用。我认为我的应用程序是这样的

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

我运行后什么都没有得到,只是一个空白,我该怎么办?

rkue9o1l

rkue9o1l1#

我可以在内联汇编中使用中断吗?
是的,只要中断存在,并且您通知编译器如何正确处理它(例如,“clobber list”告诉编译器哪些寄存器发生了变化,等等)。参见the GCC manualhttps://stackoverflow.com/tags/inline-assembly/info
只要你使用正确的数字,很可能你需要的是int $0x10而不是int $10,你需要的是将立即数移动到寄存器,而不是将寄存器移动到绝对内存地址。
如果这样做不起作用,我会怀疑您试图使用BIOS的“视频服务”在屏幕上打印字符;但不是在真实的模式下(而且是在32位代码或64位代码中);并且BIOS可能根本不存在(例如,UEFI系统);并且OS可能已经接管了对硬件的控制(并且打破了BIOS期望的所有假设,像禁用某些设备中的过时的“遗留垃圾仿真”、重新配置存储器、以及定时器和中断控制器;因此即使BIOS存在并且您处于真实的模式,您仍然无法安全地使用它)。

相关问题