如何在32位Linux上运行16位代码?

4

我写了一个小的16位汇编程序,它在一些内存位置中写入一些值。有没有办法让我在Linux的32位保护模式下测试它?


2
什么指令集架构?AVR?MSP430?8088?8086?Thumb?16位MIPS?... - old_timer
8086。我尝试编写实模式代码。它只包含一些movw语句。 - vjain27
将pcemu添加到Yahn提供的列表中。 - old_timer
2个回答

7

具体示例:https://dev59.com/HWEh5IYBdhLWcg3wwly8#32483545 - Ciro Santilli OurBigBook.com

4

是的,在Linux中,用户进程支持16位代码。调用它的系统调用称为vm86()(有一个man页面,但内容不多)。很自然地,它只在x86平台上有效(仅限32位)。

如果您需要示例,则ELKS项目有一个完整的工具,可以在Linux上运行ELKS 8086二进制文件,该工具使用它:

https://github.com/lkundrak/dev86/tree/master/elksemu

查找run_elks()函数即可。它相当简单明了。


在x86_64中是否有类似的系统调用? - Ciro Santilli OurBigBook.com
3
在x86-64本地模式中不支持v86模式。要实现此系统调用,Linux必须先切换到32位模式,然后再切换到v86模式,这样做会对性能造成很大的开销,但所得益处又微不足道。不过,还有一个V86-64补丁(最近更新于2008年)。 - Ruslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接