[어셈블리어] CMP 명령어 종류 CMPoperand 를 비교(묵시적 마이너스 연산)첫번째 operand 에서 두번째 operand 값을 뺀다.결과 = 상태레지스터operand에 영향 없음. CMP reg, reg ex) CMP EAX, EBX CMP mem, reg ex) CMP [EBP-0x04], EAX CMP reg, mem ex) CMP EAX, [EBP-0x04] CMP reg, imm ex) CMP EAX , 0x02 CMP mem, imm ex) [EBP-0x04], 0x05 CMP 연산 결과 ZF(Zero Flag) CF (Carry Flag) dest sourcea > b 0 0 dest == sourcea == b 1 0 a가 b 보다 작다..
어셈블리어 명령어(Opcode) INCoperand 값이 1 증가 INC reg ex) INC EAX INC mem ex) INC [EBP-0x04] DECoperand 값이 1 감소 DEC reg ex) DEC EAX DEC mem ex) DEC [EBP-0x04] ADD(a+=b 와 동일)두 operand 값을 더해첫번째 operand 값에 저장.-첫번째 operand 에 상수가 올 수 없음 ADD reg, reg ex) ADD EAX, EBX ADD mem, reg ex) ADD [EBP-0x04] EAX ADD reg, mem ex) ADD EBX, [EBP-0x08] ADD reg, imm ex) add ECX, 0x05 ADD mem, imm ex) ADD [EBP-0x04], 0x04 SUB..
어셈블리 언어 명령어와 Operand 표시기호설명 mem메모리 label지정된 레이블 imm즉시 값(상수) reg 범용 레지스터 label = JMP 사용시 위치값 필요.INC = 인크리먼트 ( Operand 값을 1만큼 증가 ) [] 대괄호는 C언어에서 역참조(*)와 같은 역할.C언어에서 PTR을 안써주면 컴파일할때 1byte만 읽는다.ex) DWORD PTR[EBP-4] : EBP-4 부터 DWORD만큼 역참조해서 읽겠다. 인라인어셈상위레벨언어에서(C언어) 어셈블리언어를 사용할때 사용.상위레벨언어의 변수를 사용 가능하다.ex) int main(){ int a=0; _asm { INC a INC a } //
레지스터란? 레지스터 : CPU 내부에 있는 저장공간 *프로그램 실행 과정1.보조기억장치인 하드디스크에 실행파일 보관2.주기억장치인 RAM에 실행파일을 복사함.3. RAM에 데이터를 중앙처리장치인 CPU 레지스터를 이용하여 복사해와서 처리. 32bit General-purpose Resgisters(32bit 범용 레지스터)이름 명칭 해당 레지스터만의 기능 EAX 누산기 함수의 리턴값을 저장 (EDX와 같이쓸땐 하위 4byte) EBX 간접주소 지정자 간접 주소 지정. ECX 반복카운터 0과 같을때까지 하나씩 감소시키면서 반복한다.ECX값이 감소하면서 0이 될때까지 반복함.0 < ECX 0 < 3 0 < 20 < 10 < 0 EDX EAX 보조 4byte 이상의 값을 EAX와 나눠서 해결.(상위4byte..