본문 바로가기

공부,일/어셈블리25

ch 6 . Procedures push & pop pop, push 는 다른레지스터는 건드릴수 있지만 EFL 의 경우 전용 명령어를 사용해야 한다. 모든 레지스터 값을 스택에 넣는 명령어 (플레그 레지스터 제외) 동작하는 프로그램이 변경될때 원래 동작되던 프로그램의 레지스터의 정보를 저장할 필요가 있다. 레지스터의 정보는 스택에 저장하는데 이를 위한 명령어가 위의 pusha, popa 명령어 이다. 함수 호출 , 리턴 EIP : 간접적으로 값 변경가능 jmp(지정한 코드로 점프), call(EIP 에 있는 주소의 다음 주소를 스택에 저장한다. ),(프로시저로 점프) ex) call Smart 1. push next주소 1-1. sub esp , 4 1-2 mov [esp], eip 2. jmp Smart ret(스택에 있는 주소를 E.. 2021. 9. 8.
Branching and Looping jmp goto 문이랑 동일 ;; jmp label 실습 SMART_SART: mov ecx, 0 inc ecx jmp SMART_SART ex) jmp StatementLabel ; Label 이 있는 곳으로 점프하라 점프 명령어 구조 near : 4 byte , 멀리 갈때는 short : 1byte , 근처 갈 때는 short 쓸 때는 밑의 경우와 같이 조금 이동할 경우 에만 (1byte 미만 이동) jmp 01 ; 1칸 앞으로 이동 jmp ff ; -1 칸 이동 ( 점프는 항상 singed이다.) 결국 jmp LabelName 명령어는 기계어로 해석되면 Label까지의 상대적인 거리만큼 계산해서 jmp 한다. 00000008SMART_SART: 00000008 49dec ecx 00000009 74.. 2021. 9. 1.
add & sub LargeNumber 32bit -> 63 bit 계산 하기 Num1_HI DWORD 11112222h Num1_LI DWORD 33334444h Num2_HI DWORD 22223333h Num2_LI DWORD F5551111h mov eax , Num1_LI ; Low 덧셈 add eax , Num2_LI ; 33334444h + 0F5551111h mov Num1_LI , eax mov eax , Num1_HI ; high 덧셈 adc eax , Num2_HI ; 11112222h + 22223333h + carry mov Num1_HI, eax adc 캐리 bit 까지 더함 2021. 8. 31.
mul,imul cf ) 레지스터 상식 eax 계산용 ebx 주소 ecx 반복 edx 계산용 서브 mul 곱셉의 경우 곱셈후 결과 값이 자리수가 커질 가능성이 높다. 따라서 자릿수 확장이 필요하다. 위 그림에서 ax 16bit 곱셈은 eax 의 ax 와 edx 의 dx 를 사용해서 32bit 로 표현 한다. eax, edx 32bit 의 곱셈또한 두개의 레지스터를 사용해서 32 bit로 표현한다. 단 : al 8bit 단위의 곱셈은 ah 가 앞의 숫자를 갖는다. 이는 16bit 컴퓨터의 잔제로 16bit 컴퓨터를 만들때 위와 같이 만들었기 때문에 32bit로 넘오 와서도 똑같은 명령어를 가지고 있는것이다. 속도를 보면 32 bit 가 16bit 나 8bit 보다 빠른것을 알수 있다. 이는 32bit cpu 에서 사용할 .. 2021. 8. 31.
덧셈 뺄셈 숙제 코드 .386; 80386 이상 급 명령어 적용 .MODEL FLAT PUBLIC _Wowcat; Wowcat Fuction .data NumX DWORD 1 NumY DWORD 2 NumZ DWORD 3 ; ---------------------------------------------------------------- 계산식 FIRST_NUMVER10 WORD 12*12 .CODE ; -------------------------------------------------- - _Wowcat PROC NEAR32 push ebp; 프로시저 시작 코드 mov ebp, esp ; ----------------------------------------------------- mov eax ,NumX add .. 2021. 8. 26.
여러가지 어셈블리 명령어 copy data(mov) 1. immeditate(source) to resgister (Destination) prefix 설명 ex) mov ax, 1234h ; 66 B8 34 12 mov eax, 12345678h ; B8 78 56 34 12 2 가지 어셈블리어의 니모닉이 똑같아서 어디까지가 데이타인지 모른다. 때문에 prefix byte 를 붙여서 알려주는거임 (66 이 붙으면 16 bit 를 사용한다는 의미인다. ) 2.immediate to memory or register(indirect) mov memory , 100 3. register to register 2021. 8. 25.
어셈블리 변수 선언 , 명령어 구조 .data 디렉티브에서 변수를 선언해주면 된다. 여기서 선언해준 변수는 모두 전역변수이며 , 지역변수는 따로 선언하지 않고 주소로만 가지고 있다. .data FIRST_NUMVER1 BYTE 01111101b; byte FIRST_NUMVER1 = 0x7D FIRST_NUMVER2 BYTE 0ABh; byte FIRST_NUMVER1 = 0xAB; 무조건 앞에 0을 붙여야지 숫자로 인식한다. FIRST_NUMVER3 BYTE 77o; FIRST_NUMVER4 BYTE 100; FIRST_NUMVER6 DWORD 12345678h FIRST_NUMVER5 WORD 1234h 배열 사용법 STRING1 BYTE "Test" ; string STRING1 = "Test" FIRST_NUMVER7 WORD 10.. 2021. 8. 25.
어셈블리 수업 기초 수업 내용을 의심의 흐름대로 정리 80x86 : intel 계열 cpu ( 인텔아키텍처 ) 비쥬얼 스튜디오에 깔려있는 ml (경로) C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.29.30129\bin\Hostx64\x86 목적 : 어셈블리를 통해서 컴퓨터 실행 과정을 알수있다. + 최적화 각각의 bit 에 따른 표현 단위 32bit = 4,294,967,296 = 4Gbyte 가 한계이다. 64bit = 18,446,744,073,709,551,616 = 16,777,216 Tbyte 한계가 없다고 봐도 된다. register PC Hardware : input/output Devices memory mapped.. 2021. 8. 24.
스택 ebp ,esp레지스터 , 함수 호출 , return(수업준비) 스택 ebp ,esp레지스터 스택은 높은 주소 부터 낮은 주소로 쓰여지는 특징을 가진다. ( 즉 높은 주소에 먼저 데이터가 들어간다. ) ebp , esp 레지스터는 이러한 스택의 주소를 저장하기 위해서 설계된 레지스터이다 esp: Extended Stack Poinater (sp) 스택포인터 (현재 스택의 최상단의 주소 값을 저장하고 있는 레지스터 - 위에서 스택은 낮은 주소일수록 최상단의 주소라고 했음으로 항상 가장 낮은 주소를 가지고 있다) ebp: Extended Base Pointer (FP) 현재 스택 프레임의 베이스 주소를 갖는다. (스택 프레임의 최하단 주소) 즉 어디까지가 함수가 반환 될때는 ebp 까지 스택의 변수들이 pop 된다. push , pop 명령어 push : ESP 데이터의.. 2021. 8. 20.