ASM --- podstawy

0

mam taki program napisany w assemblerze

sub AH, AH ; zeruje reset ok rozumie
mov AL, '6' ; CZy kod 6 zamieniany jest na ASCII i wynosi 36h??
add AL, '7' ; 36 h + 37h = 6dh czy na pewno tak???
aaa ; aaa to poprawka AX = 0103h co to daje??? po co to??
or AX, 3030h ; wychodzi 13 w ascii czyli 3133h ??? dlaczego

0

sub AH, AH ; zeruje reset ok rozumie
mov AL, '6' ; CZy kod 6 zamieniany jest na ASCII i wynosi 36h??
add AL, '7' ; 36 h + 37h = 6dh czy na pewno tak???
aaa ; aaa to poprawka AX = 0103h co to daje??? po co to??
or AX, 3030h ; wychodzi 13 w ascii czyli 3133h ??? dlaczego

W twoim przykladzie jest jak mowisz, ale aaa stosuje sie troszke inaczej. Chodzi tutaj o dodawanie na liczbach BCD (w tym wypadku niespakowanych).

sub ah, ah ;zerowanie
mov al, 6 ;powinno sie ladowac liczbe, a nie jej kod ASCII
add al, 7 ;otrzymamy 13 dziesietnie czyli 0dh szesnastkowo
aaa ;zamieni nam to co jest w al na 13h, czyli 19 dziesietnie
or ax, 3030h ;dodaje kod '0' zarowno do al jak i do ah, wiec otrzymamy w ax liczbe 3133h a jezeli zamienic to na odpowiadajace znaki w kodzie ASCII to mamy '13', czyli nasz wynik dodawania 6 i 7 :)

Jezeli chcialbys podawac jako wejscie znaki '6' i '7' to nalezaloby najpierw zamienic je na odpowiednie liczby. Wystarczy w tym celu dac:
and R, 0fh ;R to rejestr w ktorym masz odpowiedni znak

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