8086:qemu执行汇编

时间:2024-04-27 17:14:38

正文

环境:macOS M1。

QEMU(Quick EMUlator)是一个开源的虚拟机监视器,可以模拟多种硬件平台,包括处理器架构、设备和操作系统。QEMU具有以下主要功能和用途:

  1. 硬件模拟器:QEMU可以模拟多种处理器架构,如x86、ARM、MIPS等,以及各种设备,如网络适配器、显卡、存储设备等。这使得开发人员可以在虚拟环境中测试和调试他们的软件,而无需实际硬件设备。

  2. 虚拟机管理:QEMU可以用作虚拟机管理器,允许用户创建、启动、停止和管理虚拟机实例。用户可以在QEMU中运行多个虚拟机,每个虚拟机可以运行不同的操作系统和应用程序。

  3. 嵌入式开发:QEMU可以用于嵌入式系统开发,开发人员可以在QEMU中模拟嵌入式处理器和设备,以便开发和调试嵌入式软件。

  4. 交叉编译:QEMU提供了交叉编译的功能,可以在一个平台上编译运行在另一个平台上的程序。这对于开发跨平台应用程序和移植软件非常有用。

  5. 快照和恢复:QEMU支持虚拟机快照功能,用户可以创建虚拟机快照,以便在需要时恢复到之前的状态。

QEMU是一个功能强大的虚拟化工具,可以用于多种用途,包括软件开发、测试、嵌入式系统开发等。它为开发人员提供了一个灵活的虚拟化平台,可以更高效地进行软件开发和调试。

本次实验用的是 8086 汇编,然后用 qemu-system-i386 硬件跑这个汇编程序:

org 0x7c00

start:
	mov ah,15
	int 10h
	mov ah,0
	int 10h
	mov cx,9
	mov bx,1
_next:
	mov dx,bx
	add dx,48
	mov ax,dx
	mov ah,0eh
	int 10h
	inc bx
	push cx
	mov ah,86h
	mov cx,3h
	mov dx,0h
	int 15h
	pop cx
	loop _next

	jmp start


times 510 - ($ -$$) db 0
dw 0xaa55

写好了以后,进行变编译:

nasm print.asm -o demo.img

执行:

qemu-system-i386 -drive format=raw,file=demo.img -nographic

我不用显示界面,直接输出打印结果,加了-nographic 参数。这样程序就可以跑起来了:

1234

跑这个程序指定的是QEMU虚拟机的架构,这里是i386,即Intel x86架构的32位处理器。当使用qemu-system-i386命令并提供一个二进制文件作为参数时,QEMU会尝试以i386架构的处理器来执行这个二进制文件。虽然这个二进制文件不是一个完整的操作系统或磁盘镜像文件,但QEMU仍然可以尝试执行它,并显示输出结果。

在这种情况下,如果将一个包含汇编程序编译后的机器码的二进制文件作为参数提供给qemu-system-i386命令,QEMU会尝试执行这个二进制文件,并显示执行结果。这种情况下,QEMU会将这个二进制文件当做一个可执行程序来执行,而不是一个完整的镜像文件。