2013-10-07 4 views
0

J'ai écrit un petit programme de montage simple dans MASM mais la sortie que je reçois est inattendu et est préfixé par 3. Comme je suis entré 12345 sur l'affichage, il affiche la sortie commesortie inattendue avec Dumpmem dans MASM - Assemblée

Où comme si je ne prends pas l'entrée de l'utilisateur et le code dur comme mystring byte 1,2,3,4,6 - il montre la sortie comme 01 02 03 04 06

Aidez-moi à comprendre ce comportement - Merci à l'avance

Voici le code du programme:

INCLUDE Irvine32.inc 

.data 
disp byte "Enter String : ",0 
mystring byte 5 dup(?) 

.code 
main PROC 
mov edx,offset disp 
call writestring 
mov edx, offset mystring 
mov ecx, 50 
call ReadString 
mov esi, offset mystring 
mov ecx, lengthof mystring 
mov ebx, TYPE mystring 
call dumpmem 

exit 
main ENDP 
END main 

Répondre

1

Vous abandonnes les valeurs hexadécimaux des codes ASCII des caractères dans votre chaîne, puisque c'est la façon dont ils sont stockés dans la mémoire. 31 hex = ASCII '0', 32 hex = ASCII '1', etc.

Notez que pour convertir un chiffre ASCII tel que '0' en sa valeur d'octet correspondante, vous devez soustraire 0x30. Inversement, vous pouvez convertir un nombre décimal stocké en octet en son équivalent en code ASCII en ajoutant 0x30.

+1

Oh mon diable - il ne m'a pas cliqué. Merci :) –

+0

Essayez d'entrer une chaîne non numérique comme "Bonjour tout le monde", juste pour le plaisir. –

+0

Oui, je l'essaie. En fait, je suis juste nouveau à l'assemblage: P –