首页 > 解决方案 > Intel 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 码以将其转换为整数 14?

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

end:
push enter
call printf
add esp,4

标签: x86nasm

解决方案


推荐阅读