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.
Converting a C++ Program to x86 Assembly
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
Related Samples
Enhance your understanding with our free Assembly Language assignment samples. These resources provide clear, detailed solutions, helping you grasp complex concepts and improve your skills.
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language