【发布时间】:2022-08-11 23:34:53
【问题描述】:
我想在内联 asm 中使用中断,但它不允许我认为我的应用程序是这样的
__asm__(\"movb %ah,9;\"
\"movb %al,0x41;\"
\"movb %bh,0x0;\"
\"movw %cx,0x1; \"
\"movb %bl,0x0F ;\"
\"int $10; \");
运行这只是一个空白区域后我什么也没有得到我该怎么办?
-
你想用这个中断来完成什么,它是否可以在不使用中断的情况下完成?
-
你在做什么?操作系统?视窗?还有什么?
int指令实际上是一个系统调用。你期望这个系统调用做什么?你是什么意思你得到一个空格?还有其他输出吗?你如何运行程序?你怎么知道有一个空白而不是什么都没有? -
第一个注意是它是中断
0x10,而不是10(十六进制不是十进制)。但是还有很多其他的问题。你有 AT&T 语法倒退;缺少立即数上的$前缀;你没有注册破坏者;等等。此外,这看起来像 gcc,它通常为 32 位或 64 位 x86 生成代码,但 BIOS 中断只能在 16 位实模式下工作。这应该是 MS-DOS 应用程序、引导加载程序、裸机应用程序还是什么?你打算如何编译和运行它? -
是的,我在这里有一些例子stackoverflow.com/questions/43668314/…。内联汇编很难做到正确,即使看起来很简单。如果您真的了解它,请使用内联汇编。 Code Project 上有一些教程很糟糕,它们结合了内联汇编和 16 位代码,并不是很好(而且有问题)的资源。
-
但假设是此代码正在编写、编译和链接,以便在旧版 BIOS 中以实模式运行。它不会在保护模式或长模式下正常运行。
标签: c assembly interrupt cpu-registers