Bochs上运行BIOS启动失败原因分析
来源:互联网 发布:擂台算法自然语言 编辑:程序博客网 时间:2024/05/29 02:35
之前写了一段BIOS启动代码,在Bochs中测试启动的时候失败。其实当时的代码出了很多问题,只是文件能够编译通过而已。错误的代码如下:
;
; boot.s--bootsect.S framework
;
.globlbegtext,begdata,begbss,endtext,enddata,endbss ;global flag
.text
begtext:
.data
begdata:
.bss
begbss:
.text
BOOTSEG = 0x07c0
entry start
start:
jmpi go,BOOTSEG
go: mov ax,cs
mov ds,ax
mov es,ax
mov [msg1+17],ah ; need to understand
mov cx,#20
mov dx,#0x1004
mov bx,#0x000c
mov bp,#msg1
mov ax,1301
int 0x10
loop0: jmp loop0
msg1: .ascii "Loading system ..."
.byte 31,10;need to understand
.org 510
.word 0xAA55
.text
endtext:
.data
enddata:
.bss
endbss:
其实,这里面的错误有好几处。其中一处是回车换行的代号错了,但是这个还不是主要的问题。最主要的问题还是字符串的显示位置,如果使用十六进制的话现实的效果刚刚好。但是如果使用十进制的话,那么位置就会回退好多,直接超出显示区域。这个才是导致显示失败的原因。
仅仅修改显示位置,代码修改如下:
;
; boot.s--bootsect.S framework
;
.globlbegtext,begdata,begbss,endtext,enddata,endbss ;global flag
.text
begtext:
.data
begdata:
.bss
begbss:
.text
BOOTSEG = 0x07c0
entry start
start:
jmpi go,BOOTSEG
go: mov ax,cs
mov ds,ax
mov es,ax
mov [msg1+17],ah ; need to understand
mov cx,#20
mov dx,#0x1004
mov bx,#0x000c
mov bp,#msg1
mov ax,#0x1301
int 0x10
loop0: jmp loop0
msg1: .ascii "Loading system ..."
.byte 31,10;need to understand
.org 510
.word 0xAA55
.text
endtext:
.data
enddata:
.bss
endbss:
编译执行之后的执行效果:
- Bochs上运行BIOS启动失败原因分析
- Bochs上运行BIOS启动代码
- Wince启动失败原因分析
- tomcat启动失败原因分析
- Android自动运行失败的原因分析
- mysql_install_db 运行失败的一些原因分析
- Winmail服务启动失败原因分析
- [转] 常见WinCE启动失败原因分析
- Wince启动失败的原因分析
- Tomcat 启动失败原因分析--端口问题
- Linux suse x86_64 环境上部署Hadoop启动失败原因分析
- Linux suse x86_64 环境上部署Hadoop启动失败原因分析
- BIOS启动过程分析
- BIOS启动过程分析
- BIOS启动过程分析
- java运行失败原因
- apache启动失败原因
- apache启动失败原因
- linux网络编程中INADDR_ANY的含义
- http请求原理(一)
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- E. Fire in the City Educational Codeforces Round 27 二分+扫描线求面积覆盖+离散化 丧心病狂
- HDU 6166 Senior Pan
- Bochs上运行BIOS启动失败原因分析
- MySQL用SQL开启general_log并设置路径
- python
- 过河
- 数组
- 子元素相对于父元素设定margin-top值的时候
- GO语言学习资源
- python基础入门7--异常
- Java集合类Set的add方法妙用