Converting a C++ Program to x86 Assembly

Generation of Integer Sequence Based on Irvine Library

INCLUDE Irvine32.inc .DATA .CODE ;------------------------------------- ; Function ; int main() ;------------------------------------- main PROC mov ebx, 1 ; ebx = 1; _while1: ; while (ebx < 1400) { cmp ebx, 1400 jge _end_while1 mov eax, ebx ; cout << ebx; call WriteDec mov eax, ',' ; cout << ','; call WriteChar mov eax, ' ' ; cout << ' '; call WriteChar mov ecx, 1 ; ecx = 1; mov esi, ebx ; esi = ebx; _while2: ; while (esi > 0) { cmp esi, 0 jle _end_while2 mov eax, 10 ; edi = Modulus(esi, 10); push eax push esi call Modulus add esp, 8 mov edi, eax _if1: ; if (edi != 0) { cmp edi, 0 je _end_if1 push edi ; ecx = Multiplication(ecx, edi); push ecx call Multiplication add esp, 8 mov ecx, eax ; } _end_if1: mov eax, 10 ; esi = Division(esi, 10); push eax push esi call Division add esp, 8 mov esi, eax jmp _while2 ; } _end_while2: add ebx, ecx ; ebx += ecx; jmp _while1 ; } _end_while1: call CrLf call WaitMsg ; system("PAUSE"); mov eax, 0 ; return 0; ret main ENDP ;------------------------------------- ; Function ; int Multiplication(int eax, int ebx) ;------------------------------------- Multiplication PROC push ebp mov ebp, esp push ebx mov eax, [ebp + 8] mov ebx, [ebp + 12] mul ebx ; eax = eax * ebx pop ebx pop ebp ret ; return eax; Multiplication ENDP ;------------------------------------- ; Function ; int Division(int eax, int ebx) ;------------------------------------- Division PROC push ebp mov ebp, esp push ebx mov eax, [ebp + 8] mov ebx, [ebp + 12] mov edx, 0 ; clear edx before division div ebx ; eax = eax / ebx; pop ebx pop ebp ret ; return eax; Division ENDP ;------------------------------------- ; Function ; int Modulus(int eax, int ebx) ;------------------------------------- Modulus PROC push ebp mov ebp, esp push ebx mov eax, [ebp + 8] mov ebx, [ebp + 12] mov edx, 0 ; clear edx before division div ebx ; eax = eax % ebx; mov eax, edx ; put remainder in eax pop ebx pop ebp ret ; return eax; Modulus ENDP END main