赞
踩
预备知识:主引导记录、操作系统的生成和初启、汇编
使用es(附加段寄存器)寄存器来存储和显示字符。首先,通过es寄存器指向显存地址:
mov ax,0xb800
mov es,ax
由于字符和颜色是交替存储的,先指定字符:
mov byte [es:0x00],'H'
mov byte [es:0x02],'e'
mov byte [es:0x04],'l'
mov byte [es:0x06],'l'
mov byte [es:0x08],'o'
mov byte [es:0x0a],','
mov byte [es:0x0c],"u"
mov byte [es:0x0e],'b'
mov byte [es:0x10],'u'
mov byte [es:0x12],'n'
mov byte [es:0x14],'t'
mov byte [es:0x16],'u'
mov byte [es:0x18],'!'
累加器eax从地址0x01开始,ecx控制循环次数。每设置一个颜色后,累加器eax增加2,设置下一地址的颜色。
mov eax, 0x01 mov ecx, 0x19 color: mov byte [es:eax],0x0a add eax,2 mov byte [es:eax],0x0b add eax,2 mov byte [es:eax],0x0c add eax,2 mov byte [es:eax],0x0d add eax,2 mov byte [es:eax],0x0e add eax,2 mov byte [es:eax],0x09 add eax,2 mov byte [es:eax],0x0f add eax,2 loop color
通过int 16h即键盘中断,可以将键盘输入的字符放入寄存器AL中,再通过int 10h中断则可以将AL中的内容回显在屏幕上。
start:
mov ah, 0h
int 16h
mov ah, 0eh
int 10h
jmp start
完整的代码如下:
org 7c00h mov ax,0xb800 mov es,ax mov byte [es:0x00],'H' mov byte [es:0x02],'e' mov byte [es:0x04],'l' mov byte [es:0x06],'l' mov byte [es:0x08],'o' mov byte [es:0x0a],',' mov byte [es:0x0c],"u" mov byte [es:0x0e],'b' mov byte [es:0x10],'u' mov byte [es:0x12],'n' mov byte [es:0x14],'t' mov byte [es:0x16],'u' mov byte [es:0x18],'!' mov eax, 0x01 mov ecx, 0x19 color: mov byte [es:eax],0x0a add eax,2 mov byte [es:eax],0x0b add eax,2 mov byte [es:eax],0x0c add eax,2 mov byte [es:eax],0x0d add eax,2 mov byte [es:eax],0x0e add eax,2 mov byte [es:eax],0x09 add eax,2 mov byte [es:eax],0x0f add eax,2 loop color jmp start start: mov ah, 0h int 16h mov ah, 0eh int 10h jmp start times 510-($-$$) db 0 db 0x55,0xaa
用NASM将汇编程序制作成img映像文件,并用虚拟机打开:
开机,就可以看到程序中设置好的“Hello,ubuntu!”内容,字体的颜色是循环的彩色。
在键盘上输入字符,每输入一个字符就会得到即时的屏幕回显,并且回显的字符也是彩色。
用NASM将汇编程序制作成二进制的bin文件,再用WinHex写入到U盘中的前512个字节。
UEFI似乎是不能启动的,在BIOS中改用传统启动。和虚拟机中的效果基本一致。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。