어셈블리(3)
-
[9] 어셈블리 스택 메모리를 이용한 간단한 덧셈 ( leave, ret, call )
C언어 코드를 어셈블리코드로 표현하자 [ C언어 코드 ] int sum( int a, int b ){ int sum = 0 ; sum = a + b ; return sum ; } int main(){ int a = 10; int b = 20; int ret = 0; ret = sum(a,b); printf("Sum : %d\n",ret ); return 0 ; } [ 어셈블리 코드 ] extern printf section .dataprompt_hex: db '0x%08x',10,00prompt_int: db '%d',10,00prompt_sum: db 'Sum is : %d',10,00section .textglobal mainsum:push ebpmov ebp, esp ; function prolog..
2017.10.27 -
[4] 어셈블리 명령어 add,sub,mul,div
1-1> 덧셈: ADD 1-2> 뺄셈: SUB [ 덧셈 ] [ 코드 설명 ] main: mov dword [sum], 10 ; sum = 10 add dword [sum], 20 ; sum = sum + 20 push dword [sum] push argv1 call printf ; printf("%d",30) 뺄셈은 덧셈과 같은 형식으로 사용한다 1-3> 곱셈 MUL : unsigned(부호가 없는 연산) # 부호 없는 al, ax, eax 레지스터 의 값을 피연산자와 곱한다 # 형식 : mul register|memory # 원리 AL(8) * 8bit x/m -> AX ( 16bit ) AX(16) * 16bit x/m -> DX:AX ( 16bit 레지스터 2개를 사용한다 ) EAX(32) * 3..
2017.10.18 -
[2] 어셈블리 문자열 표현방식 / 데이터단위 / 레지스터 종류
NASM 이라는 어셈블러를 사용하도록 하겠습니다 NASM 에서는 한 개의 문자나 문자열 모두 ' ' 로 표현합니다 또한 문자와 문자를 , 를 사용해서 연결합니다 1> 'abcd' = 'ab' , 'cd' 2> 'Hello, World!!!' , 10 , 00 10과 00 은 무엇일까? 아스키 코드 10 => New Line ( Enter ) 아스키 코드 00 => NULL ( 문자열의 끝을 알림 ) * 어셈블러 기본 데이터의 단위 단위 크기 C NASM(문자로표현) byte 1 char b word 2 short w double word 4 int,long, float(32bit기준) d pointer(32bit기준) quad word 8 long long, double q ten byte 10 * 어셈..
2017.10.16