我有一个问题,而在NASM节目。 我正在学习如何开发纯粹的OS装配,并通过创建一个引导装载程序启动。
目前我的目标是要打印“你好,世界!” 和“再见!” 使用的BIOS中断0x10的。
而在屏幕上打印值时我似乎有问题。 两个标签似乎是在内存中彼此相邻造成打印一个字符串打印其他字符串的内容。
为什么不hlen
在第一字符串的结尾停止循环?
[org 0x7c00]
mov ah, 0x0e
mov bx, HELLO_MSG
mov cx, hlen
call print_string
mov bx, GOODBYE_MSG
mov cx, glen
call print_string
jmp $
%include "print_string.asm"
HELLO_MSG db 'Hello, World!',0
GOODBYE_MSG db 'Goodbye!',0
hlen equ $ - HELLO_MSG
glen equ $ - GOODBYE_MSG
times 510-($-$$) db 0
dw 0xaa55
BUGS:
打印再见消息两次
这是由于HELLO_MSG打印
Hello, World!
与Goodbye!
。 我相信这是因为Hello_MSG
标签旁边GOODBYE_MSG
在内存标签
;;;print_string.asm
print_string: ;cx = string length
;bX = string label - memory offset
; -- if you want the data at a memory adress use [bx]
mov al, [bx]
int 0x10
inc bx
loop print_string
ret