// code
#include <stdio.h>
void i_c_c()
{
int num = 1234;
int bit = 0;
bit = num % 1000;
printf("bit = %d\n", bit);
}
int main()
{
i_c_c();
return 0;
}
// asm
#include <stdio.h>
void i_c_c()
{
/*4005fc: a9be7bfd stp x29, x30, [sp, #-32]!
400600: 910003fd mov x29, sp
400604: 52809a40 mov w0, #0x4d2 // #1234
400608: b9001fa0 str w0, [x29, #28]*/
int a = 1234;
/*40060c: b9001bbf str wzr, [x29, #24]*/
int b = 0;
/*400610: b9401fa0 ldr w0, [x29, #28] // w0 = 1234
400614: 5289ba61 mov w1, #0x4dd3 // #19923
400618: 72a20c41 movk w1, #0x1062, lsl #16 // w1 = 0x10624dd3
40061c: 9b217c01 smull x1, w0, w1 // x1 = 1234*274877907 = 339199337238 = 0x4E F9DB 2316
400620: d360fc21 lsr x1, x1, #32 // x1 = 0x4E
400624: 13067c22 asr w2, w1, #6 // w2 = (0x4E>>6) = 1 (2^38)/274877907 = 999.9999 = 1000
400628: 131f7c01 asr w1, w0, #31 // w1 = (1234>>31) = 0
40062c: 4b010042 sub w2, w2, w1 // w2 = w2-w1 = 1
400630: 52807d01 mov w1, #0x3e8 // #1000
400634: 1b017c41 mul w1, w2, w1 // w1 = 1 * 1000
400638: 4b010000 sub w0, w0, w1 // w0 = 1234 - 1000
40063c: b9001ba0 str w0, [x29, #24]*/
b = a % 1000;
/*400640: 90000000 adrp x0, 400000 <_init-0x480>
400644: 911ca000 add x0, x0, #0x728
400648: b9401ba1 ldr w1, [x29, #24]
40064c: 97ffffa9 bl 4004f0 <printf@plt>*/
printf("%d\n", b);
/*400650: d503201f nop
400654: a8c27bfd ldp x29, x30, [sp], #32
400658: d65f03c0 ret*/
}
int main()
{
/*40065c: a9bf7bfd stp x29, x30, [sp, #-16]!
400660: 910003fd mov x29, sp
400664: 97ffffe6 bl 4005fc <i_c_c>*/
i_c_c();
/*400668: 52800000 mov w0, #0x0 // #0
40066c: a8c17bfd ldp x29, x30, [sp], #16
400670: d65f03c0 ret
400674: 00000000 .inst 0x00000000 ; undefined*/
return 0;
}