+1 (315) 557-6473 

Generating integer sequences in x86 assembly assignment help

The assignment deals with the generation of a given integer sequence using assembly code. A sample program in C++ that implements the required functionality is given and must be converted to assembly. The implementation is based on the Irvine library. The following solution provided by our assembly assignment help solvers demonstrates how to generate integers in x86.
Table Of Contents
  • Converting a C++ Program to x86 Assembly

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