대소관계
# include <stdio.h>
void sameFunc(int v1, int v2) {
char* prompt = "(%d == %d) \n";
__asm {
push v2; // (" ", , v2);
push v1; // (" ", v1, v2);
push prompt; // ("%d is %d same \n", v1, v2);
call dword ptr[printf]; // printf("%d is %d same \n", v1, v2);
pop ebx; // printf("%d is %d same \n", v1, );
pop ebx; // printf("%d is %d same \n", , );
pop ebx; // printf( , , );
}
} // end of sameFunc
void notSameFunc(int v1, int v2) {
char* prompt = "(%d != %d) \n";
__asm {
push v2; // (" ", , v2);
push v1; // (" ", v1, v2);
push prompt; // ("%d is %d same \n", v1, v2);
call dword ptr[printf]; // printf("%d is %d same \n", v1, v2);
pop ebx; // printf("%d is %d same \n", v1, );
pop ebx; // printf("%d is %d same \n", , );
pop ebx; // printf( , , );
}
} // end of notSameFunc
void aboveFunc(int v1, int v2) {
char* prompt = "(%d > %d) \n";
__asm {
push v2; // (" ", , v2);
push v1; // (" ", v1, v2);
push prompt; // ("%d is %d same \n", v1, v2);
call dword ptr[printf]; // printf("%d is %d same \n", v1, v2);
pop ebx; // printf("%d is %d same \n", v1, );
pop ebx; // printf("%d is %d same \n", , );
pop ebx; // printf( , , );
}
} // end of aboveFunc
void NotAboveFunc(int v1, int v2) {
char* prompt = "(%d < %d) \n";
__asm {
push v2; // (" ", , v2);
push v1; // (" ", v1, v2);
push prompt; // ("%d is %d same \n", v1, v2);
call dword ptr[printf]; // printf("%d is %d same \n", v1, v2);
pop ebx; // printf("%d is %d same \n", v1, );
pop ebx; // printf("%d is %d same \n", , );
pop ebx; // printf( , , );
}
}
int main(void) {
int v1 = 0;
int v2 = 0;
char* prompt_1 = "v1 Write : ";
char* prompt_2 = "v2 Write : ";
char* prompt_3 = "%d";
__asm {
//*********************************************************
/* v1 에 대하여 */
push prompt_1; // ("v1 Write : ");
call dword ptr[printf]; // printf("v1 Write : ")
pop ebx;
lea eax, v1; // eax = &v1
push eax; // ( , &v1)
push prompt_3; // ("%d", &v1);
call dword ptr[scanf];
pop ebx; // 나중에 들어온 "%d" 문자열 제거
pop ebx; // $v1 제거
//*********************************************************
/* v2 에 대하여 */
push prompt_2; // ("v2 Write : ");
call dword ptr[printf]; // printf("v2 Write : ")
pop ebx; // prompt_2 에 관한 문자열삭제
lea eax, v2; // eax = &v2
push eax; // ( , &v2)
push prompt_3; // ("%d", &v2);
call dword ptr[scanf];
pop ebx; // 나중에 들어온 "%d" 문자열 제거
pop ebx; // $v2 제거
//*********************************************************
/* 대소 비교에 관하여 */
mov eax, v1; // eax = v1
mov ebx, v2; // ebx = v2
cmp eax, ebx; // cmp == compara
//*********************************************************
je Same; // if eax == ebx jump equal, goto 문장
//*********************************************************
jne NotSame; // jump if not same
//*********************************************************
Same:
push ebx;
push eax;
call dword ptr[sameFunc];
pop ebx;
pop ebx;
jmp EndLabel;
//*********************************************************
NotSame:
ja Above;
jna notAbove;
//*********************************************************
Above:
push ebx;
push eax;
call dword ptr[aboveFunc];
pop ebx;
pop ebx;
jmp EndLabel;
//*********************************************************
notAbove:
push ebx;
push eax;
call dword ptr[NotAboveFunc];
pop ebx;
pop ebx;
jmp EndLabel;
//*********************************************************
EndLabel:
xor eax, eax; // mov eax, 0
leave;
retn;
}
}