首页 > 解决方案 > 在汇编语言 NASM 中将十进制转换为十六进制

问题描述

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

十六进制:

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          

分割循环到十六进制:

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

标签: hexdecimalnasm

解决方案


推荐阅读