mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 16:36:21 +00:00
70 lines
842 B
C
70 lines
842 B
C
|
|
#include <stdio.h>
|
|
|
|
typedef unsigned long long int ULong;
|
|
typedef unsigned int UInt;
|
|
|
|
ULong arg64, res64;
|
|
|
|
extern void foo64 ( void );
|
|
asm("\n"
|
|
"foo64:\n"
|
|
"\tpushq %rcx\n"
|
|
|
|
"\tmovq $0, %rax\n"
|
|
"\tmovq arg64, %rcx\n"
|
|
|
|
"Lagain64:\n"
|
|
"\taddq $177, %rax\n"
|
|
"\tdecq %rcx\n"
|
|
"\tjrcxz Lout64\n"
|
|
"\tjmp Lagain64\n"
|
|
|
|
"Lout64:\n"
|
|
"\tmovq %rax, res64\n"
|
|
|
|
"\tpopq %rcx\n"
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
UInt arg32, res32;
|
|
|
|
extern void foo32 ( void );
|
|
asm("\n"
|
|
"foo32:\n"
|
|
"\tpushq %rcx\n"
|
|
|
|
"\tmovq $0, %rax\n"
|
|
"\tmovl arg32, %ecx\n"
|
|
|
|
"Lagain32:\n"
|
|
"\taddq $177, %rax\n"
|
|
"\tdecl %ecx\n"
|
|
"\tjecxz Lout32\n"
|
|
"\tjmp Lagain32\n"
|
|
|
|
"Lout32:\n"
|
|
"\tmovl %eax, res32\n"
|
|
|
|
"\tpopq %rcx\n"
|
|
"\tret\n"
|
|
);
|
|
|
|
|
|
|
|
int main ( void )
|
|
{
|
|
arg64 = 100;
|
|
res64 = 0;
|
|
foo64();
|
|
printf("%lld\n", res64);
|
|
|
|
arg32 = 1234;
|
|
res32 = 0;
|
|
foo32();
|
|
printf("%d\n", res32);
|
|
|
|
return 0;
|
|
}
|