어셈블리 최소값 추출
# include <stdio.h>
int main(void) {
char vData[] = { 10, 2, 9, 12, 15, 20 };
char vSmall = vData[0];
char* prompt = "vSmall => %d\n";
__asm {
mov edi, 1;
Nj:
mov al, [vData + edi];
cmp vSmall, al;
jnl below_;
jl notBelow_;
below_:
mov vSmall, al;
jmp flowJ;
notBelow_:
jmp flowJ;
flowJ:
inc edi;
cmp edi, 6;
jne Nj;
je Sj;
Sj:
push vSmall;
push prompt;
call dword ptr[printf];
pop ebx;
pop ebx;
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 크기 비교 (0) | 2017.09.27 |
---|---|
어셈블리 div (0) | 2017.09.26 |
어셈블리 배열 출력 (0) | 2017.09.26 |
곱하기 어셈 문제 (0) | 2017.09.24 |
jz ==> zero flag (0) | 2017.09.23 |
어셈블리 배열 출력
# include <stdio.h>
int main(void) {
char vData[] = { 10, 2, 9, 12, 15,20 };
char vSmall = 0;
char* prompt = "vSmall => %d\n";
__asm {
mov edi, 0;
Nj:
mov al, [vData + edi];
mov vSmall, al;
push vSmall;
push prompt;
call dword ptr[printf];
pop ebx;
pop ebx;
inc edi;
cmp edi, 6;
jne Nj;
je Sj;
Sj:
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 div (0) | 2017.09.26 |
---|---|
어셈블리 최소값 추출 (0) | 2017.09.26 |
곱하기 어셈 문제 (0) | 2017.09.24 |
jz ==> zero flag (0) | 2017.09.23 |
대소관계 (0) | 2017.09.23 |
http://119.201.123.184/30stair/area/area.php?pname=area
# include <stdio.h>
int main(void) {
int v1 = 0;
int v2 = 0;
int v3 = 0;
char* scanfPrompt = "%d %d";
char* printfPrompt = "%d x %d = %d\n";
__asm {
lea eax, v1; // eax = &v1;
lea ebx, v2; // ebx = &v2;
push ebx; // ( , ,&v2);
push eax; // ( ,&v1 ,&v2);
push scanfPrompt; // ("%d %d" ,&v1 ,&v2);
call dword ptr[scanf]; // scanf("%d %d" ,&v1 ,&v2);
pop ebx; // scanf("%d %d" ,&v1, );
pop ebx; // scanf("%d %d" , , );
pop ebx; // scanf( , , );
mov eax, v1; // eax = v1
imul v2; // eax *= v2
mov v3, eax; // v3 = eax
push v3; // ( , , ,v3);
push v2; // ( , ,v2 ,v3);
push v1; // ( ,v1 ,v2 ,v3);
push printfPrompt; // (%d x %d = %d,v1 ,v2 ,v3);
call dword ptr[printf]; // printf(%d x %d = %d,v1 ,v2 ,v3);
pop ebx;
pop ebx;
pop ebx;
pop ebx;
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 최소값 추출 (0) | 2017.09.26 |
---|---|
어셈블리 배열 출력 (0) | 2017.09.26 |
jz ==> zero flag (0) | 2017.09.23 |
대소관계 (0) | 2017.09.23 |
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기) (0) | 2017.07.30 |
jz ==> zero flag
// jz ==> zero flag
# include <stdio.h>
int main(void) {
int v1 = 10;
int v2 = 20;
char* zeroPrompt = "zero flag is zero \n";
char* zeroNPrompt = "zero flag is not zero \n";
__asm {
mov eax, v1; // eax = v1
mov ebx, v2; // ebx = v2
sub eax, ebx; // eax -= ebx
jz zeroJump; // if eax == 0 then zf == 0
zeroNPrompt:
push zeroNPrompt;
call dword ptr[printf];
pop ebx;
jmp End_;
zeroJump:
push zeroPrompt;
call dword ptr[printf];
pop ebx;
jmp End_;
End_:
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 배열 출력 (0) | 2017.09.26 |
---|---|
곱하기 어셈 문제 (0) | 2017.09.24 |
대소관계 (0) | 2017.09.23 |
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기) (0) | 2017.07.30 |
hello world (0) | 2017.07.20 |
# 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;
}
}
'어셈블리' 카테고리의 다른 글
곱하기 어셈 문제 (0) | 2017.09.24 |
---|---|
jz ==> zero flag (0) | 2017.09.23 |
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기) (0) | 2017.07.30 |
hello world (0) | 2017.07.20 |
인라인 어셈블리 계산기(사칙연산 완성) (0) | 2017.07.04 |
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기)
# include <stdio.h>
void _menu_(void)
{
char* addPrompt = "[1] addition \n";
char* subPrompt = "[2] subtraction \n";
char* mulPrompt = "[3] multiplication \n";
char* divPrompt = "[4] dividen \n";
__asm
{
push addPrompt;
call dword ptr[printf];
pop ebx;
push subPrompt;
call dword ptr[printf];
pop ebx;
push mulPrompt;
call dword ptr[printf];
pop ebx;
push divPrompt;
call dword ptr[printf];
pop ebx;
}
}
void _add_(int nParam1, int nParam2)
{
char* addPrompt = "%d + %d = %d \n";
__asm
{
mov eax, nParam1;
add eax, nParam2;
push eax;
push nParam2;
push nParam1;
push addPrompt;
call dword ptr[printf];
pop ebx;
pop ebx;
pop ebx;
pop ebx;
}
} // end of _add_ function
void _sub_(int nParam1, int nParam2)
{
char* subPrompt = "%d - %d = %d \n";
__asm
{
mov eax, nParam1;
sub eax, nParam2;
push eax;
push nParam2;
push nParam1;
push subPrompt;
call dword ptr[printf];
pop ebx;
pop ebx;
pop ebx;
pop ebx;
}
}
void _mul_(int nParam1, int nParam2)
{
char* mulPrompt = "%d x %d = %d \n";
__asm
{
mov eax, nParam1;
imul eax, nParam2;
push eax; // = %d
push nParam2;
push nParam1;
push mulPrompt;
call dword ptr[printf];
pop ebx;
pop ebx;
pop ebx;
pop ebx;
}
}
void _div_(int nParam1, int nParam2)
{
int que = 0;
int rem = 0;
__asm
{
xor edx, edx;
mov eax, nParam1;
div nParam2;
mov rem, edx;
mov que, eax;
}
printf("remainder => %d\n", rem);
printf("queotiont => %d\n", que);
}
int main(void)
{
int v1 = 0;
int v2 = 0;
int nChoice = 0;
char* ScanfPrompt = "%d";
char* prompt1 = "v1 = ";
char* prompt2 = "v2 = ";
char* PrintF1 = "v1 => %d\n";
char* PrintF2 = "v2 => %d\n";
char* promptChoice = "Write = ";
__asm
{
call dword ptr[_menu_];
// "v1 = " ********************
push prompt1;
call dword ptr[printf];
pop ebx;
lea eax, v1;
push eax; // &v1
push ScanfPrompt; // "%d"
call dword ptr[scanf];
pop ebx;
pop ebx;
// "v2 = " ********************
push prompt2;
call dword ptr[printf];
pop ebx;
lea eax, v2;
push eax; // &v2
push ScanfPrompt; // "%d"
call dword ptr[scanf];
pop ebx;
pop ebx;
// choice
push promptChoice;
call dword ptr[printf];
pop ebx;
lea eax, nChoice; // &nChoice
push eax;
push ScanfPrompt; // "%d"
call dword ptr[scanf];
pop ebx;
pop ebx;
//
cmp nChoice, 0x1;
je addJump;
jne not_addJump;
addJump:
push v2;
push v1;
call dword ptr[_add_];
pop ebx;
pop ebx;
jmp _EnD;
not_addJump:
cmp nChoice, 0x2;
je subJump;
jne not_subJump;
subJump:
push v2;
push v1;
call dword ptr[_sub_];
pop ebx;
pop ebx;
jmp _EnD;
not_subJump:
cmp nChoice, 0x3;
je mulJump;
jne not_mulJump;
mulJump:
push v2;
push v1;
call dword ptr[_mul_];
pop ebx;
pop ebx;
jmp _EnD;
not_mulJump:
push v2;
push v1;
call dword ptr[_div_];
pop ebx;
pop ebx;
jmp _EnD;
}
_EnD:
return 0;
}
'어셈블리' 카테고리의 다른 글
jz ==> zero flag (0) | 2017.09.23 |
---|---|
대소관계 (0) | 2017.09.23 |
hello world (0) | 2017.07.20 |
인라인 어셈블리 계산기(사칙연산 완성) (0) | 2017.07.04 |
nasm (0) | 2017.07.01 |
hello world
section .text ; // .code
global _start
_start:
mov edx, len
mov ecx, msg
mov ebx, 1 ;file descriptor
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1
int 0x80
section .data
msg db "Hello, world!", 0xa
len equ $ - msg ;length of the string
'어셈블리' 카테고리의 다른 글
대소관계 (0) | 2017.09.23 |
---|---|
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기) (0) | 2017.07.30 |
인라인 어셈블리 계산기(사칙연산 완성) (0) | 2017.07.04 |
nasm (0) | 2017.07.01 |
어셈블리어_TEST (0) | 2017.06.23 |
인라인 어셈블리 계산기(사칙연산 완성)
# include <stdio.h>
int __FuncAdd__(int nParam_1, int nParam_2)
{
int result = 0;
__asm
{
mov eax, nParam_2;
add eax, nParam_1;
mov result, eax;
}
return result;
}
int __FuncSub__(int nParam_1, int nParam_2)
{
int result = 0;
__asm
{
mov eax, nParam_2;
sub eax, nParam_1;
mov result, eax;
}
return result;
}
int __FuncMul__(int nParam_1, int nParam_2)
{
int result = 0;
__asm
{
mov eax, nParam_2;
mul nParam_1;
mov result, eax;
}
return result;
}
int __FuncDiv__(int nParam_1, int nParam_2)
{
int result = 0;
__asm
{
xor edx, edx;
mov eax, nParam_2;
div nParam_1;
mov result, eax;
}
return result;
}
int main(void)
{
int choice = 0;
int resultValue = 0;
int value_1 = 0;
int value_2 = 0;
char* prompt = "data input : ";
char* pValue_1 = "value_1 input : ";
char* pValue_2 = "value_2 input : ";
char* Input = "%d";
__asm
{
// ----------------------------------------------------------------------------
push pValue_1; // "value_1 input : "
call dword ptr[printf];
pop ebx;
lea edx, value_1; // edx = &value_1
push edx;
push Input; // "%d"
call dword ptr[scanf]; // scanf("%d", &value_1)
// ----------------------------------------------------------------------------
push pValue_2; // "value_2 input : "
call dword ptr[printf];
pop ebx;
lea edx, value_2; // edx = &value_2
push edx;
push Input; // "%d"
call dword ptr[scanf]; // scanf("%d", &value_2)
// ----------------------------------------------------------------------------
push prompt; // "data input : "
call dword ptr[printf];
pop ebx;
lea edx, choice; // scanf("%d", &choice)
push edx;
push Input;
call dword ptr[scanf];
push ebx;
push ebx;
// ----------------------------------------------------------------------------
push value_2;
push value_1;
cmp choice, 1;
je add_; // jump equal
jne Re_choice_; // jump not equal
add_:// if (choice == 1)
call dword ptr[__FuncAdd__]; // int __FuncAdd__(pValue_1, pValue_2)
mov resultValue, eax;
pop ebx;
pop ebx;
jmp E_;
Re_choice_: // else // choice != 1
cmp choice, 2;
je sub_; // if (choice == 2)
jne Re_choice2_; // else // choice != 2
sub_:
call dword ptr[__FuncSub__]; // int __FuncSub__(pValue_1, pValue_2)
mov resultValue, eax;
pop ebx;
pop ebx;
jmp E_;
Re_choice2_:
cmp choice, 3;
je mul_; // if (choice == 3)
jne Re_choice3_; // else // choice != 3
mul_:
call dword ptr[__FuncMul__]; // int __FuncMul__(pValue_1, pValue_2)
mov resultValue, eax;
pop ebx;
pop ebx;
jmp E_;
Re_choice3_:
cmp choice, 4;
je div_; // if (choice == 4)
jne E_;
div_:
call dword ptr[__FuncDiv__];
mov resultValue, eax;
pop ebx;
pop ebx;
jmp E_;
}
E_:
printf("%d \n", resultValue);
return 0;
}
'어셈블리' 카테고리의 다른 글
어셈블리 계산기(더하기, 빼기, 나누기, 곱하기) (0) | 2017.07.30 |
---|---|
hello world (0) | 2017.07.20 |
nasm (0) | 2017.07.01 |
어셈블리어_TEST (0) | 2017.06.23 |
어셈블리 step_3_mov [대충정리 -> 차후 계속 수정] (0) | 2017.06.23 |
section .text
global _start
_start:
mov edx, len ;message length
mov ecx, msg ;message to write
mov ebx, 1 ; file descriptor (stdout)
mov eax, 4
int 0x80 ; call kernel
mov eax, 1
int 0x80
section .data
msg db "hello, world!", 0xa
len equ $ - msg
'어셈블리' 카테고리의 다른 글
hello world (0) | 2017.07.20 |
---|---|
인라인 어셈블리 계산기(사칙연산 완성) (0) | 2017.07.04 |
어셈블리어_TEST (0) | 2017.06.23 |
어셈블리 step_3_mov [대충정리 -> 차후 계속 수정] (0) | 2017.06.23 |
어셈블리어 STEP_1 (0) | 2017.06.23 |
어셈블리어_TEST
결과가 0이면 ZERO 플래그는 1이 된다.
결과가 0이 아니면 ZERO 플래그는 0 이 된다.
'어셈블리' 카테고리의 다른 글
인라인 어셈블리 계산기(사칙연산 완성) (0) | 2017.07.04 |
---|---|
nasm (0) | 2017.07.01 |
어셈블리 step_3_mov [대충정리 -> 차후 계속 수정] (0) | 2017.06.23 |
어셈블리어 STEP_1 (0) | 2017.06.23 |
어셈블리 + irvine + 문자 출력 (0) | 2017.06.22 |