DeckardCain
Cadet 4th Year
- Registriert
- Jan. 2015
- Beiträge
- 86
Guten Abend!
Ich habe die Aufgabe bekommen im Assembler einen Prüfziffertester für Ausweise zu schreiben.
Man nimmt z.B. die Ausweisnummer 'ABCD12345'. Hierbei stehen die Buchstaben für Zahlen: A=10, B=11, C=12 und so weiter.
Also muss man die einzelnen Ziffern mit 7,3,1,7,3,1,7,3,1 multiplizieren und alle addieren. Die letze Ziffer der Summe ergibt dann die Prüfziffer, in diesem Fall die 0.
Nun würde ich gerne wissen, wie ich es schaffe mit den Buchstaben, die ich auf dem Stack habe zu rechnen. Also den ASCII-Wert so zu verringern, dass ich den tatsächlichen Integer, den ich brauche rausbekomme.
(ASCII-Wert von A -> 65; 65-55 = 10)
Ich hoffe hier gibt es einige Assemblerprogrammierer, die mir da helfen können.
Ich habe die Aufgabe bekommen im Assembler einen Prüfziffertester für Ausweise zu schreiben.
Man nimmt z.B. die Ausweisnummer 'ABCD12345'. Hierbei stehen die Buchstaben für Zahlen: A=10, B=11, C=12 und so weiter.
A | B | C | D | 1 | 2 | 3 | 4 | 5 | |
10*7+ | 11*3+ | 12*1+ | 13*7+ | 1*3+ | 2*1+ | 3*7+ | 4*3+ | 5*1 | =250 |
Nun würde ich gerne wissen, wie ich es schaffe mit den Buchstaben, die ich auf dem Stack habe zu rechnen. Also den ASCII-Wert so zu verringern, dass ich den tatsächlichen Integer, den ich brauche rausbekomme.
(ASCII-Wert von A -> 65; 65-55 = 10)
Ich hoffe hier gibt es einige Assemblerprogrammierer, die mir da helfen können.
Code:
global main
extern printf
extern atoi
segment .data
printausweisnummer: db "Ausweisnummer: ",0
printnr: db "%d", 0
enter: db "",10,0
segment .text
main:
; print out "Ausweisnummer: <Eingabe>"
push printausweisnummer
call printf
add esp,4
mov eax, esp
add eax, 8
mov eax, [eax]
add eax, 4
mov eax, [eax]
add eax, 9
mov DWORD [eax],0
sub eax, 9
push eax
call printf
add esp,4
push enter
call printf
add esp,4
; Ausgabe ende
mov eax, esp
add eax, 8
mov eax, [eax]
add eax, 4
mov eax, [eax]
; von hinten anfangen alles zusammenzurechnen
add eax, 8
mov DWORD [eax], 0
sub eax, 1
push eax
call atoi
add esp,4
push eax
push printnr
call printf
add esp,8
; Zahl '4' ausgeben
end:
push enter
call printf
add esp,4