Assemble language This function takes in a square sized gr

Assemble language

// - This function takes in a square sized grayscale image and applies thresholding on each pixel.
// i.e. it should change pixel values according to this formula:
// 0xFF if x >= threshold
// 0x00 if x < threshold
// - The width and height of the image are equal to dim.
// - You are not allowed to define additional variables.
//
void imageThresholding(unsigned char* image, int dim, unsigned char threshold) {

__asm {
       mov eax, image

       mov edi, 0
       BEGIN_FOR_ROW:
       cmp edi, dim
           jge END_FOR_ROW
           mov esi, 0

           BEGIN_FOR_COL :
           cmp esi, dim
           jge END_FOR_COL
           mov ebx, 0 //Transfer row to ebx

           mov edx, 0 //Multiply row by dim (add row to row dim times)
           BEGIN_FOR_MUL :
           cmp edx, dim
           jge END_FOR_MUL
           add ebx, edi
           inc edx
           jmp BEGIN_FOR_MUL
           END_FOR_MUL :

       add ebx, esi
           xor edx, edx
           mov dl, [eax + ebx]
           mov cl, threshold
           and cl, dl
           cmp cl, 0x00
           jne IF_HIGHER
           xor edx, edx //set to Min
           jmp CONT
           IF_HIGHER :
       or edx, 0xFF
           CONT :
           mov[eax + ebx], dl
           inc esi
           jmp BEGIN_FOR_COL

           END_FOR_COL :
       inc edi
           jmp BEGIN_FOR_ROW

           END_FOR_ROW :
       mov image, eax

}
}

Won\'t printing out the right result,

Test driver

imageThresholding(&testStr1_1[0][0], 3, 90);
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j) {
if (testStr1_1[i][j] != exptectedStr1_1[i][j]) {
std::cout << \"Part 1: Test 1 failed at index: \" << i << \",\" << j << \" got: \" << int(testStr1_1[i][j]) << \" expected: \" << int(exptectedStr1_1[i][j]) << std::endl;
failed = true;
}
}
if (!failed)
std::cout << \"Part 1: Test 1 passed.\" << std::endl;

Solution

x86 code to utilize imageThresholding function:

void imageThresholding(unsigned char* image, int dim)

{

--asm

{

//compiler command line option

push ebx;

push edi;

push esi;

mov eax,

image mov edi,

BEGIN_FOR_ROW:
       cmp edi, dim
           jge END_FOR_ROW
           mov esi, 0

           BEGIN_FOR_COL :
           cmp esi, dim
           jge END_FOR_COL
           mov ebx, 0 //Transfer row to ebx

           mov edx, 0 //Multiply row by dim (add row to row dim times)
           BEGIN_FOR_MUL :
           cmp edx, dim
           jge END_FOR_MUL
           add ebx, edi
           inc edx
           jmp BEGIN_FOR_MUL
           END_FOR_MUL :

       add ebx, esi
           xor edx, edx
           mov dl, [eax + ebx]
           mov cl, threshold
           and cl, dl
           cmp cl, 0x00
           jne IF_HIGHER
           xor edx, edx //set to Min
           jmp CONT
           IF_HIGHER :
       or edx, 0xFF
           CONT :
           mov[eax + ebx], dl
           inc esi
           jmp BEGIN_FOR_COL

           END_FOR_COL :
       inc edi
           jmp BEGIN_FOR_ROW

           END_FOR_ROW :
       mov image, eax

}
}

Test driver

imageThresholding(&testStr1_1[0][0], 3, 90);
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j) {
if (testStr1_1[i][j] != exptectedStr1_1[i][j]) {
std::cout << \"Part 1: Test 1 failed at index: \" << i << \",\" << j << \" got: \" << int(testStr1_1[i][j]) << \" expected: \" << int(exptectedStr1_1[i][j]) << std::endl;
failed = true;
}
}
if (!failed)
std::cout << \"Part 1: Test 1 passed.\" << std::endl;

Assemble language // - This function takes in a square sized grayscale image and applies thresholding on each pixel. // i.e. it should change pixel values accor
Assemble language // - This function takes in a square sized grayscale image and applies thresholding on each pixel. // i.e. it should change pixel values accor
Assemble language // - This function takes in a square sized grayscale image and applies thresholding on each pixel. // i.e. it should change pixel values accor

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site