linux环境下修改linux0.11 bootsect.s并用qemu运行的问题
看了bootsect.s,我想在linux下直接编译,并用qemu 模拟器运行,但是有问题,我将代码最简化,发现可能是段间跳转和ds,es寄存器设置的问题,请帮忙看下是哪里不对,谢谢了,问题描述如下:
bootsect.s的代码:
.set BOOTSEG, 0x07c0
.set INITSEG, 0x9000
.globl start
start:
.code16
# print some inane message
movw $0x0300,%ax #read cursor position
xorb %bh,%bh
int $0x10
movw $28,%cx
movw $0x0004,%bx
movw $msg,%bp
movw $0x1301,%ax # write string and move cursor
int $0x10
# mov this sector to 0x9000 and then jmp to next instruction
movw $BOOTSEG, %ax
movw %ax, %ds # source addr ds:si
movw $INITSEG, %ax
movw %ax, %es # dest addr es:di
xorw %si, %si
xorw %di, %di
movw $256, %cx # 256 *2 = 512 bytes
rep
movsw
ljmp $INITSEG, $go
go:
movw $0x0300,%ax #read cursor position
xorb %bh,%bh
int $0x10
movw $28,%cx
movw $0x0004,%bx
movw $msg,%bp
movw $0x1301,%ax # write string and move cursor
int $0x10
loop:
jmp loop
msg:
.byte 13, 10 #CR LF carriage returns line feeds
.ascii "Loading system ... ^_^"
.byte 13, 10, 13, 10
.org 510
.word 0xaa55
用了shell脚本来编译make.sh:
as bootsect.s -o bootsect
ld -m elf_i386 -N -e start -Ttext 0x7c00 bootsect -o bootblock
objcopy -S -O binary bootblock
qemu -hda bootblock
问题:我是想显示 Loading system ... 然后将这个启动扇区移动到0x9000处跳到标号go并重新显示Loading system ...以验证移动成功,但是,只能显示第一次的Loading system ...,如果没有中间的那段移动启动扇区的代码,那么能够显示两次Loading system ...,请大家看下是哪里的问题,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论