Na wstępie zaznaczę, że z Assemblera miałem 3 ćwiczenia, a wcześniej 4 wykłady teorii o architekturze von Neumanna, rejestrach czy działaniach na liczbach binarnych. Moja wiedza na ten temat jest strasznie uboga. Na ćwiczeniach robiliśmy proste programy typu Hello World, dodawanie, odejmowanie, mnożenie, dzielenie liczb i echo liter, a teraz prof. kazał zrobić coś takiego samodzielnie...
@Shalom
Jeżeli chodzi o te numerki to w kodzie ASCII numery 97-122 odpowiadają literom a-z. Numery 65-90 odpowiadają literom A-Z. Litery małe na wielkie zamieniam poprzez odjęcie różnicy, która jest stała i wynosi 32. Takie podpowiedzi otrzymałem od profesora, dlatego tak to próbowałem rozwiązać :(
@Azarien
To samo co wyżej. Profesor dał mi taką podpowiedź, dlatego użyłem jg i jl. O ja i jb w ogóle nie miałem pojęcia, że istnieją :(
Poprawiłem kod, ale co do uwagi @Shalom (sprawdzania obydwu warunków i dopiero skok) nie mam pojęcia jak to zapisać.
org 100h
start:
xor di,di
read:
mov ah,1 ; odczytuje znak z klawiatury i wypisuje na ekran
int 21h
inc di
cmp al, 'a'
ja capital
cmp al, 'z'
jb capital
mov [tablica+di], al ; przypisanie znaku do wyświetlenia
cmp al,13
jne read
mov cx,di
mov ah,2
capital:
sub al, 32
mov [tablica+si], al
jmp read
print:
mov si,di
sub si,cx
mov dx, [tablica+si]
int 21h
loop print
mov ax, 4c00h
int 21h
tablica TIMES 50 db 0
Teraz, gdy odpalam program, trwa on w nieskończoność. Wciśnięcie entera powoduje przejście do nowej linii i pozwala wpisywać kolejne łańcuchy, a powinien wypisać łańcuch z wielkimi literami.