How to run 16 bit code on 32 bit Linux?
Asked Answered
P

2

4

I have written a small 16-bit assembly program that writes some values in some memory locations.Is there a way I can test it in 32-bit protected mode on Linux?

Perlite answered 19/10, 2011 at 22:36 Comment(3)
what instruction set architecture? avr? msp430? 8088? 8086? thumb? 16 bit mips?...Baccivorous
8086. I was trying to write real mode code.It contains only some movw statements.Perlite
ad pcemu to the list that Yahn provided.Baccivorous
D
7

qemu, dosbox, bochs

Drilling answered 19/10, 2011 at 22:39 Comment(1)
Concrete examples: #22055078Meares
H
4

Yes, 16-bit code is supported in user processes in Linux. The system call to do it is called vm86() (there's a man page, but there's not much in it). It is, naturally, only works on x86 platforms (and 32-bit only).

If you want an example, the ELKS project has a complete tool for running ELKS 8086 binaries on Linux, which uses it:

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

Look for the run_elks() function. It's pretty straightforward.

Hamburger answered 24/2, 2015 at 23:6 Comment(2)
Is there any analogous syscall in x86_64?Meares
@CiroSantilli包子露宪六四事件法轮功 v86 mode isn't supported inside x86-64 native mode. To implement this syscall, Linux would have to switch to 32-bit mode, only then to v86, which would be too much of an overhead for small benefit. But then, there's a V86-64 patch (last updated in 2008).Hade

© 2022 - 2024 — McMap. All rights reserved.