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