linux下bochs创建最简单的OS(二)
来源:互联网 发布:批处理开启端口 编辑:程序博客网 时间:2024/06/12 20:05
接自 linux下bochs创建最简单的OS 一篇
作者:帅得不敢出门 C++爱好者灌水天堂群 3503799 转载请保留此信息
org 07c00h
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov ah,0ch
mov al,'H'
mov [gs:0],ax
jmp $
times 510-($-$$) db 0
dw 0xaa55
这个代码是直接操作视频缓冲区显示字符的,只能显示单个H
我们要让他显示Hello World OS
org 07c00h
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov ah,0ch
mov al,'H'
mov [gs:0],ax
jmp $
times 510-($-$$) db 0
dw 0xaa55
这个代码是直接操作视频缓冲区显示字符的,只能显示单个H
我们要让他显示Hello World OS
org 07c00h
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov si,HelloWorld
xor di,di
PutStr:
mov ah,0ch ;黑底红字 注:颜色代码见下对照表
lodsb ;Loads [SI] into AL and increases SI by one
or al,al
jz ToEnd
mov [gs:di],ax
add di,2
jmp PutStr
ToEnd:
jmp $
HelloWorld db 'Hello World OS',0
times 510-($-$$) db 0
dw 0xaa55
这样便可满足需求了。
LABEL_START:
mov ax,cs
mov ds,ax
mov es,ax
mov ax,0b800h
mov gs,ax
mov si,HelloWorld
xor di,di
PutStr:
mov ah,0ch ;黑底红字 注:颜色代码见下对照表
lodsb ;Loads [SI] into AL and increases SI by one
or al,al
jz ToEnd
mov [gs:di],ax
add di,2
jmp PutStr
ToEnd:
jmp $
HelloWorld db 'Hello World OS',0
times 510-($-$$) db 0
dw 0xaa55
这样便可满足需求了。
颜色代码对照表
1 2 3 4 5 6 7 8
BL R G B I R G B
闪烁 字符底色 加亮 字符颜色
1 2 3 4 5 6 7 8
BL R G B I R G B
闪烁 字符底色 加亮 字符颜色
再进一步,我们现在只是在右上角显示,如果要在当前光标位置显示呢,我们现在修改第一个代码来实现
第二个代码(注释请看linux下bochs创建最简单的OS一篇)是:
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $ ;
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
我们只要调用int 10h中断,获取当前的光标位置就行了。
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
mov ah,03h
xor bh,bh
int 10h
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
第二个代码(注释请看linux下bochs创建最简单的OS一篇)是:
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $ ;
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
我们只要调用int 10h中断,获取当前的光标位置就行了。
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
mov ah,03h
xor bh,bh
int 10h
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 15
mov ax, 01301h
mov bx, 000ch
int 10h
ret
BootMessage: db "Hello,World OS!"
times 510-($-$$) db 0
dw 0xaa55
汇编,写入img,bochs加载执行,OK
当然其他的功能只要想的到,都可以自行添加它,希望大家有一个愉快的学习过程。
当然其他的功能只要想的到,都可以自行添加它,希望大家有一个愉快的学习过程。
- linux下bochs创建最简单的OS(二)
- linux下bochs创建最简单的OS(一)
- linux下bochs创建最简单的OS(一)
- Linux下用bochs调试OS(转载)
- linux下bochs的安装及简单运行
- linux下bochs的安装及简单使用
- bochs配置文件最简单的例子
- Linux下的bochs安装
- Linux下Bochs的安装
- windows下bochs调试环境的创建
- bochs在Linux下的环境搭建
- Linux下Bochs的使用(转载)
- linux 下使用bochs遇到的问题
- Linux 下虚拟机Bochs的使用
- 嵌入式操作系统与虚拟机杂记(二)——Linux下安装支持VMX模式的BOCHS
- 创建一个最简单的Linux服务
- 12个最应该使用的Linux服务器OS(下)
- 12个最应该使用的Linux服务器OS(下)
- Office2003 word与PDF的互相转换
- java使用DES加密与解密
- 播放声音文件
- Log4j 配置不好可能导致你的日志重复打印
- memwatch使用笔记
- linux下bochs创建最简单的OS(二)
- 学车(二)
- Beanshell研究
- 构建ARM-PC无线局域网->Tp-link wn321G无线网卡(Rt73)驱动+wireless_tools for Kernel 2.6
- 1752年9月 少了的12天
- Eclipse RCP程序更改原始图标
- 与大学计算机有关的日子
- const用法详解
- 使用Android中数据库来模拟MIDP中的RMS