Olen tässä kirjoitellut omaa pientä MBR ohjelmaa. Toistaiseksi kaikki on mennyt ihan ok, mutta nyt en saa ohjelmaa tulostamaan tekstiä, joka on tallennettu muistialuelle str_ent kohdasta eteenpäin. Tässä koodi:
BITS 16 start: mov ax, 07C0h add ax, 288 mov ss, ax mov sp, 4096 mov ax, 07C0h mov ds, ax main: mov ah, 05 mov al, 00 int 10 xor ax, ax mov si, start_msg call print_string .loop: mov al, '>' call print_char call read_string call print_string jmp .loop print_string: .repeat: lodsb cmp al, 0 je .done call print_char jmp .repeat .done: ret print_char: mov ah, 0Eh int 10h ret read_char: xor ax, ax int 16h ret read_string: mov ax, str_ent mov word [str_p], ax .loop: call read_char cmp ah, 14 je .bs cmp al, 13 je .nl inc word [str_p] mov bx, [str_p] mov [bx], al xor bx, bx call print_char jmp .loop .nl: mov si, nl_msg call print_string mov bx, [str_p] mov [bx], byte 0 xor bx, bx jmp .done .bs: mov ax, [str_p] cmp ax, str_ent je .loop mov si, bs_msg call print_string dec word [str_p] jmp .loop .done: mov si, str_ent ret start_msg db 'Welcome to JOSb 0.1.0', 13, 10, 0 nl_msg db 13, 10, 0 bs_msg db 8, ' ', 8, 0 str_p dw 0000h str_ent times 128 db 0 times 510-($-$$) db 0 dw 0xAA55
Mikä kääntäjä? Missä vaiheessa str_ent saa jonkin arvon?
Ongelma lienee tässä kohtaa:
inc word [str_p] mov bx, [str_p] mov [bx], al
Kasvatat ensin osoitinta str_p ja kirjoitat sitten merkin kohtaan str_p. Kuitenkin merkkijonon alkuun jää nollatavu, jolloin siitä ei tulostu mitään.
Aihe on jo aika vanha, joten et voi enää vastata siihen.