0

I've wrote cpp code that uses inline assembly to calculate z = x/(y-7) and w = x%(y-7):

#include <stdio.h>
#include <iostream>


int main() {
    unsigned int x = 28, y = 12, z, w;
    
    std::cout << "result: " << std::endl;
    asm (
         "movl   (%[pX]), %%eax\n\t"
         "movl   (%[pY]), %%ebx\n\t"
         "subl   $7, %%ebx\n\t"
         "divl   %%ebx\t"
         :"=a"(z), "=&d"(w)
         :[pX]"r"(&x), [pY]"r"(&y)
         :"cc"
         );
    
    std::cout << "z = " << z << std::endl;
    std::cout << "w = " << w << std::endl << std::endl;
    
    return 0;
}

The output is correct:

result: 
z = 5
w = 3

Program ended with exit code: 0

But when I remove std::cout << "result: " << std::endl; line I've got a Thread 1: EXC_ARITHMETIC (code=EXC_I386_DIV, subcode=0x0) in asm ( which is division by zero error

I'm running this code in Xcode 14.3 on Intel Mac

0 Answers0