Ich versuche, ein Assembly-Programm zu erstellen, das eine Benutzereingabe hexadezimale Zahl nicht mehr als 4 Ziffern nimmt und dieselbe Nummer in Basis 10 ausgibt. Dies geschieht mit NASM bei einer Linux-Installation . Ich habe einige Tutorials gefunden, die ich gefunden habe, und mein sehr begrenztes Verständnis dieser Sprache habe ich mir ausgedacht.Konvertieren von Benutzereingabe Hexadezimal in Dezimal in Assembly
section .data
inp_buf: times 6 db 0
numPrompt: db "Enter a hexadecimal value no greater than 4 digits: "
len1 equ $ - numPrompt
answerText: db "The decimal value is: "
len2 equ $ - answerText
section .bss
dec: resb 5
section .text
global _start
_start:
mov edx, len1
mov ecx, numPrompt
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 3
mov ebx, 0
mov ecx, inp_buf
mov edx, 6
int 0x80
mov esi, dec+11
mov byte[esi], 0xa
mov eax, ecx ;I feel like the problem must be here
mov ebx, 0xa
mov ecx, 1
next:
inc ecx
xor edx, edx
div ebx
add edx, 0x30
dec esi
mov [esi], dl
cmp eax, 0
jnz next
mov edx, len2
mov ecx, answerText
mov ebx, 1
mov eax, 4
int 0x80
mov edx, ecx
mov ecx, esi
mov ebx, 1
mov eax, 4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80
Es soll beachtet werden, dass, wenn die Benutzereingabe ignoriert und Sie gerade in einer Variablen mit dem Hex im Datenteil setzen, das Programm, dass ohne Probleme umwandeln kann. Wenn Sie z. B. die Zeile hexNum: equ 0xFFFF
haben und die oben erwähnte kommentierte Zeile durch mov eax, hexNum
ersetzen, kann der Code diese korrekt in die Basis 10 konvertieren. Der Fehler muss mit dem Format der Benutzereingabe übereinstimmen, aber ich weiß nicht, wie das zu überprüfen ist.
Ich freue mich über jeden Einblick, was mein Problem hier ist. Dies ist mein erstes Assembly-Programm außer "Hallo Welt" und viele dieser neuen Konzepte sind immer noch verwirrend und schwer für mich zu verstehen. Wenn es für mich einen besseren oder einfacheren Weg gibt, dieses ganze Programm zu machen, dann würde ich das gerne auch hören. Vielen Dank!
Ihr Code kann nur eine Nummer drucken, wenn es bereits eine Nummer ist. Sie nehmen die Eingabe als ASCII-Text, den Sie zuerst in eine Zahl umwandeln müssen. Wie es ist, versuchen Sie nur, die Adresse des Eingabepuffers zu drucken. – Jester