Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Assembly ongelma

nörtti [05.01.2011 14:07:36]

#

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

Jokotai [05.01.2011 14:54:39]

#

Mikä kääntäjä? Missä vaiheessa str_ent saa jonkin arvon?

Antti Laaksonen [05.01.2011 15:02:50]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta