在汇编语言NASM中将十进制转换为十六进制

时间:2018-05-04 05:44:46

标签: hex decimal nasm

这是我代码中的十六进制部分之一,我有点卡在十六进制部分。当我键入2560(十进制)并且输出为:00(十六进制)。它给了我正确的价值,但我需要A而不是:。任何人都可以告诉我我的问题在哪里。我将非常感谢你的帮助。谢谢。

DecToHex:

mov eax, msg8
call sprint

mov edx, 255
mov ecx, sinput8
mov ebx, 0
mov eax, 3
int 80h

mov eax, sinput8

call atoiToHex
call iprintLFToHex
ret

iprintToHex:

push    eax             
push    ecx             
push    edx           
push    esi             

mov     ecx, 0          

divideLoopToHex:

inc     ecx              
mov     edx, 0         
mov     esi, 16      
idiv    esi            
add     edx, 48         
push    edx            
cmp     eax, 0          
jnz     divideLoopToHex 

printLoopToHex:

dec     ecx             
mov     eax, esp        
call    sprint          
pop     eax             
cmp     ecx, 0          
jnz     printLoopToHex       

pop     esi            
pop     edx             
pop     ecx             
pop     eax             
ret

iprintLFToHex:

call    iprintToHex     
push    eax            
mov     eax, 0Ah         
mov     eax, esp        
call    sprint          
pop     eax            
pop     eax             
ret

atoiToHex:

push    ebx             
push    ecx             
push    edx             
push    esi             
mov     esi, eax        
mov     eax, 0          
mov     ecx, 0          

.multiplyLoopToHex:

xor     ebx, ebx        
mov     bl, [esi+ecx]   
cmp     bl, 48          
jl      .finishedToHex  
cmp     bl, 70          
jg      .finishedToHex  
cmp     bl, 10          
je      .finishedToHex 
cmp     bl, 0           
jz      .finishedToHex  

sub     bl, 48         
add     eax, ebx        
mov     ebx, 10         
mul     ebx             
inc     ecx             
jmp     .multiplyLoop   

.finishedToHex:

mov     ebx, 10         
div     ebx             
pop     esi            
pop     edx            
pop     ecx             
pop     ebx             
ret

0 个答案:

没有答案