私は最初のアセンブリプログラムをプログラミングしていますが、最後に文字列の長さを探したいのですが、結果を変換して表示しますが、アセンブリは私の結果に9以上出力されません
操作の前に変数を10進数に変換してから、ASCIIに変換して表示します。
結果だけを変換しようとしましたが、どちらも機能しません。
私はNASMを使用しており、Ubuntu Linuxでプログラムを実行しています。
マイコード:
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
「うまくいかない」と私たちにはあまり言いません。正確なエラーまたは間違った出力は何ですか? ([How to Ask] [http://www.stackoverflow.com/help/how-to-ask]を参照してください。) – CodeMouse92
申し訳ありませんが、私はそれについて説明しませんでした。サイズが9以下の場合。数値は印刷されますが、サイズが大きくなると文字や空白も印刷されます – Raphael
このサイトはほとんどが英語の話し手なので、変数名やコメントが翻訳されると、より良い応答を得ることができます。 Google翻訳を開く作業を保存します。 –