x86直接写屏显示字符串

直接向显存地址(0xb800:xxxx)写入数据,屏幕显示:80列,25行,一个字符显存2byte

/*
 * file showstr.s
*/ 
.code16

.globl  _start, begtext, begdata, begbss, endtext, enddata, endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text


_start:
	movw $0,%dx
	movw $24,%cx
	movw $0x0700,%si
	movw $msg,%bp
	call showstr
end:jmp end

showstr:
	push %ds
	movw $0xb800,%ax
	movw %ax,%ds
show:
	movb $13,%ah
	movb (%bp),%al
	cmp %ah,%al
	je 1f
	movb $10,%ah
	movb (%bp),%al
	cmp %ah,%al
	je 1f
	jmp 2f
1:	movw %dx,%ax
	movw $160,%bx
	div %bl
	sub %ah,%bl
	add %bx,%dx
	sub $2,%dx
	jmp 3f
2:	movw %si,%ax
	movb (%bp),%al
	movw %dx,%bx
	movw %ax,(%bx)		#set ds:bx=ax (0xb800:bx=ax)
3:	dec %cx
	inc %bp
	add $2,%dx
	movw $0,%ax
	cmp %cx,%ax
	jne show
	pop %ds
	ret

msg:
	.byte 13,10
	.ascii "Loading system ..."
	.byte 13,10,13,10

.org 510
.word 0xAA55

.text
endtext:
.data
enddata:
.bss
endbss:

编译

as -o boot.o showstr.s
ld -Ttext 0x07c00 --oformat binary -s -o boot.bin boot.o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值