[Asembler] Program nie działa tak jak powinien


(kamilos876) #1

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:

15_1263156899.jpg

A jak dam jakieś imię na 9 liter to wtedy jest dobrze:

38_1263157020.jpg

W pierwszym przypadku widać że tak jakby część msg1 jest na początku msg2, nie wiem dlaczego tak się dzieje

Proszę o odp


([alex]) #2

msg1 DB"Podaj imie: ",'$'

msg2 DB"Twoje imie to: ",'$'

wczyt DB FFh,257 dup ($)

lea DX,wczyt

mov AH,0AH ;wprowadzenie znakow z klawiatury do bufora

int 21h

;sub AL,48 - poco??

;inc CX nie potrzebne

;inc CX

lea DX,[wczyt+2]

mov AH,09H

int 21H


(kamilos876) #3

Dzieki za odp ale cos mi nie dziala ten twoj kod

W linijce: wczyt DB FFh,257 dup ($) wyskakuje blad ("zero prefix must be added to a HEX value, for example: 0Ch")

i czemu jest "lea DX,wczyt" powinno byc chyba "lea wczyt,DX"


([alex]) #4

wczyt DB FFh,257 dup ('$') ; cudzysłów został zjedzony nie wiem jakim cudem.

lea DX,wczyt ; wpisać w rejestr DX adres zmiennej wczyt - na odwrót było by bez sensu