2015-01-18 2 views
1

계승을 계산하는 프로그램을 작성하려고하지만 inttostring 기능 때문에이 코드가 무한 루프로 연결됩니다. 나는 문제가 DIV의 기능이라고 생각하지만 난 솔루션 당신은 분할을하기 전에 EDX를 삭제해야조립식 팩토리얼 x86 (Ubuntu의 NASM)

section .text 
    global _start 

_start: 
    inc eax  
mov ebx, 2 
mov ecx, 3 
jmp count  

count: 
imul eax, ebx  
cmp ebx, ecx  
je inttostring 
inc ebx  
jmp count 

inttostring:  
mov ebx, 10  
mov esi, 3 
div ebx  
add [result+esi], dl  
dec esi  
cmp esi, 0 
je displey 
jmp inttostring   

displey: 
     mov eax, 4 
     mov ebx, 1 mov ecx, result 
     mov edx, size 
     int 80h 
     mov eax, 1 int 80h 

    section .data 

    result times 4 db 48 
    size equ $ - result 

답변

1

표시되지 않습니다.

이 프로그램은 EAX = 0으로 시작하는 경우에만 작동합니다. EAX는 어디에서 초기화 되었습니까?

반복적으로 ESI를 다시 초기화하면 무한 루프가 발생합니다!
inttostring 앞에 mov esi,3을 붙이십시오.