ASSEMBLER MODULE (Win32 Console Application solution in the Microsoft Visual Stu
ID: 3938468 • Letter: A
Question
ASSEMBLER MODULE (Win32 Console Application solution in the Microsoft Visual Studio)
Step1: Count the number of odd values (n mod 2 <> 0) for each row.
Use template the following template below as a base for the solution!
Important: All calculations, conditions and jumps must be implemented only with Inline or full assembler!
#include "stdafx.h"
#include
#include
void solution_for_grade_7(const int * arr, size_t arr_rows, size_t arr_cols, int * result)
{
__asm
{
// Your Inline Assembler instructions for grade 7 level go here
// :::
}
}
const int ROWS = 2;
const int COLS = 3;
int main()
{
// Change the array definitions to be appropriate for your assignments:
int data1[ROWS][COLS] = { { 0, -1, 2 }, { 3, 4, -5 } };
int result1[ROWS]; // Note: for some assignments the result size will depend on the COLS!
// Change the parameters according to your assignment function, e.g.:
solution_for_grade_7((const int *)data1, ROWS, COLS, result1);
// Print the result one-dimensional array to the console:
for (size_t i = 0; i < ROWS; i++)
printf("%d ", res1[i]);
// :::
return 0;
}
Step2: Implement task (Count the number of odd values (n mod 2 <> 0) for each row) and place them in separate assembler module (in file with extension .ASM) and use the template below for assembler module.
Important: Demonstrate assembler module by calling procedures from the C/C++ code.
.586
.model flat, C
.code
SolutionForGrade7 PROC PUBLIC USES ...
[LOCAL ...]
:::
ret
SolutionForGrade7 ENDP
:::
END
Explanation / Answer
Answer
The required is as below:
#include "stdafx.h"
#include <cstdio>
#include <cassert>
// Variant implement own function for each grade level , e.g.:
void solution_for_grade_7(const int* arr, size_t arr_rows, size_t arr_cols, int* result)
{
int counter = 0;
int modNumb = 2;
__asm
{
mov ecx, [arr_rows] // ecx == for(int ROWS = 2;----;----;)
Loop_for_Row:
mov ebx, arr //defining arr here
push ecx //saving row loop counter
xor esi, esi
mov ecx, [arr_cols]
Loop_for_Col :
xor edx, edx
mov eax, dword ptr[ebx + esi] // eax = arr[ROWS][n]
idiv[modNumb] // eax = eax mod 2
cmp edx, 0 // (eax mod 2) == 0 ?
je Skip // jump to Skip, if true
inc [counter]
Skip:
add esi, 4
loop Loop_for_Col // repeat (for COL=N;------;-----) loop
add ebx, esi //next row
pop ecx //restore Loop_for_Row counter i.e. ecx = 2
//Store the counted odd values into the result1 array
xor edx, edx
xor eax, eax
mov edx, result
mov eax, [counter]
mov [edx + ecx * 4], eax
mov [counter], 0
loop Loop_for_Row
}
}
const int ROWS = 2;
const int COLS = 3;
int main()
{
// Change the array definitions to be appropriate for your assignments:
int data1[ROWS][COLS] = { { 0, -1, 2 }, { 3, 4, -5 } };
int result1[ROWS] = {}; // Note: for some assignments the result will depend on the COLS!
// Change the parameters according to your assignment function, e.g.:
solution_for_grade_7((const int*)data1, ROWS, COLS, result1);
// Print the result one-dimensional array to the console:
for (size_t i = 0; i < ROWS; i++)
{
printf("%d ", result1[i]);
}
// :::
getchar();
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.