Ostatnio uczę się języka Asembler i napisałem taki prosty programik:
name "program"
dane SEGMENT
msg1 DW "Podaj imie: ",'$'
msg2 DW "Twoje imie to: ",'$'
nast DB 0DH,0AH,'$'
dane ENDS
stos SEGMENT
DB 64 DUP('KAMILOSS')
stos ENDS
kod SEGMENT
start:
mov AX,dane
mov DS,AX
lea DX,msg1 ;wyswietlenie msg1
mov AH,09H
int 21H
mov AH,0AH ;wprowadzenie znakow z klawiatury do bufora
int 21h
sub AL,48
lea CX,DX ;przeniesienie DX do CX by uniknac zmazania wprowadzonej wartosci
lea DX,nast ;przejscie do nowego wiersza
mov AH,09H
int 21H
lea DX,msg2 ;wyswietlenie msg2
mov AH,09H
int 21H
inc CX ;zwiekszenie CX (czyli DX) o 2
inc CX
mov DX,CX ;przeniesienie zapisanej wczesniej wartosci DX do nowego DX
mov AH,09H
int 21H
lea DX,nast ;przejscie do nowego wiersza
mov AH,09H
int 21H
mov AH,01H ;czekanie na nacisniecie jakiegokolwiek przycisku
int 21H
mov AH,4CH ;konczy program
int 21H
kod ENDS
END start
Program się kompiluje, nie ma błędów, ale nie działa tak jak powinien.
Jeżeli dam imię np: kamil, które ma 5 liter to wyrażenie msg2 jest jakoś dziwnie napisane:
A jak dam jakieś imię na 9 liter to wtedy jest dobrze:
W pierwszym przypadku widać że tak jakby część msg1 jest na początku msg2, nie wiem dlaczego tak się dzieje
Proszę o odp