Ich programmiere mein erstes Assembly-Programm, und ich möchte die Länge eines Strings finden, am Ende konvertiere ich das Ergebnis, um es anzuzeigen, aber die Ergebnisse stammen nur aus 1 bis 9.Assembly gibt nicht mehr als 9 in meinem Ergebnis aus
Ich konvertiere die Variablen in Dezimal vor den Operationen und dann wandle ich sie in ASCII um sie anzuzeigen.
Ich habe versucht, nur das Ergebnis zu konvertieren, aber es funktioniert auch nicht.
Ich verwende NASM und Ausführen der Programme auf Ubuntu Linux.
Mein Code:
segment .data ;Segmento de datos
mensaje db 'Introduzca una cadena: ' ;Mensaje
tamMensaje equ $-mensaje ;Tamaño del mensaje
respuesta db 'Fue: '
respuesta2 db 'Tamaño: '
tamRespuesta equ $-respuesta
tamRespuesta2 equ $-respuesta2
segment .bss
pal resb 50 ;Word
tam resb 1 ;Size of the word
segment .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, mensaje
mov edx, tamMensaje
int 0x80
;Leer
mov eax, 3
mov ebx, 2
mov ecx, pal
mov edx, 50
int 0x80
;Respuesta
mov eax, 4
mov ebx, 1
mov ecx, respuesta
mov edx, tamRespuesta
int 0x80
;Respuesta Numero
mov eax, 4
mov ebx, 1
mov ecx, pal
mov edx, 50
int 0x80
;Count size
mov edi, pal ;move word to edi
sub ecx, ecx ;set ecx to 0
not ecx ;set ecx to highest value
sub ecx, '0' ; conversion to decimal
sub al, al ; set al to zero, looks for a null character
cld ;clear flags
repne scasb ; decreases ecx moving trough the word
mov eax,0fffffffeh ;set eax to highest value minus 1
sub eax, '0' ;conversion to decimal
sub eax,ecx ; lenght = eax - ecx
dec eax ; eax = eax -1
add eax, '0' ; conversion to ascii
mov [tam],eax
int 0x80
;Imprimir mensaje -tamaño:-
mov eax, 4
mov ebx, 1
mov ecx, respuesta2
mov edx, tamRespuesta2
int 0x80
;Imprimir Tamaño
mov ecx, tam
mov ebx, 1
mov edx, 1
mov eax, 4
int 0x80
;salir
mov eax,1
mov ebx,0
int 0x80
"Funktioniert nicht" sagt uns nicht viel. Was ist der genaue Fehler oder die fehlerhafte Ausgabe, die Sie erhalten? (Siehe [Wie man fragt] [http://www.stackoverflow.com/help/how-to-ask).) – CodeMouse92
Entschuldigung, das habe ich nicht erklärt. Wenn die Größe 9 oder niedriger ist. Die Nummer ist gedruckt, aber wenn die Größe höher ist, druckt es Buchstaben oder sogar Leerzeichen – Raphael
Ich möchte hinzufügen, dass, da diese Website meist Englisch-Lautsprecher ist, Sie eine bessere Antwort erhalten können, wenn die Variablennamen und Kommentare übersetzt werden. Es erspart uns die Arbeit, Google Übersetzer zu öffnen. –