Assembler i pisanie dlugich lancuchow w kolorze

0

Witam chciałbym napisać program, który wyświetli mi długi ciąg znaków w kolorze. Wiem, że są przerwania odpowiednie do tego by wyświetlić znak w kolorze (09h) jednak chciał bym przy możliwie krótkim kodzie wyświetlić dużo różnych znaków. Pomyślałem o pętli która by przelatywała przez zadeklarowaną tablicę. Udało mi się póki co napisać coś takiego:

org 100h
start:

    mov ah,09h
    mov al,[nazwa+i]
    mov bh,0
    mov bl,04h
    mov cx,1
    int 10h
    inc [i]
    cmp [i],5
    jne start

    mov ax,4c00h
    int 21h

nazwa db 'Tekst.$'
i db 0

jednak to nie zadziała jak należy... nie za bardzo mam pomysł jak zrobic taka petle by za kazdym razem odwolac sie do kolejnego elementu tablicy...

0
mov al,[nazwa+i]

"nazwa" oraz "i" to są pewne etykiety w pamięci a ty w swoim zapisie jednej chcesz użyć jako adresu a drugiej jako wartości. Widzisz chyba ze to nie może tak działać jak napisałeś? Patrz niżej...

inc [i]
cmp [i],5

Od kiedy można niby wykonywać operacje bezpośrednio na danych w pamięci? o_O Musisz:

  • wczytać wartość do rejestru
  • wykonać operację
  • zapisać wartość do pamięci
    Ergo:
#inc [i] powinno wyglądać tak:
mov bx,[i]
inc bx
mov [i],bx

Tak samo z cmp i z tym twoim pobieraniem znaku do wypisania...
Poważnie, rejestrów jest więcej iż tylko ax, bx, cx (którego nie wiem po co tu użyłeś skoro nie korzystasz...)

0

Fakt już rozumiem gdzie leży błąd :) Dzięki za wskazówkę

1 użytkowników online, w tym zalogowanych: 0, gości: 1