英特尔x86 NASM:转换终端输入

时间:2018-12-14 13:00:10

标签: x86 nasm

启动程序时,我试图从终端获得输入(例如./exec 1234ABCDE)。它有9个字母/数字,我必须将该输入切成三块,再相乘并将所有内容相加。字母代表数字:A = 10; B = 11; C = 12,依此类推。 (1 * 7)+(2 * 3)+(3 * 1)+(4 * 7)+([A] 10 * 3)+([B] 11 * 1)+ ... = 222 之后,我需要总和的最后一位(在本例中为2)。 我希望你能得到我需要做的。

global main
extern printf

segment .data
printausweisnummer: db "Ausweisnummer: ",0
printnr: db "%d", 0
enter: db "",10,0

segment .text

main:
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

到目前为止,一切都很好。我只是打印输入。

mov eax, esp        
add eax, 8
mov eax, [eax]       
add eax, 4
mov eax, [eax]              

;-----

现在,在这种情况下,我需要使用-'E'并获取数字14,将其添加到寄存器中。 (ASCII E-> 69; 69-55 = 14)但是在此处调用printf eax时,它只会打印出“ 1234ABCDE”。

有人解决我如何获取“ E”的ASCII码以将其转换为Integer 14的方法吗?

(然后取下一个(D)并乘以3,依此类推...)

end:
push enter
call printf
add esp,4

0 个答案:

没有答案