본문 바로가기

[어셈블리어]imul과 div(idiv)와 확장명령어 imul 음수를 포함한 수를 곱할때 필요한 명령어 eax와의 연산만이 아닌 레지스터끼리의 곱, eax가아닌 다른 레지스터와 메모리의 곱, 상수와의 곱을 가능하게한다. imul source eax와의 곱셈, 레지스터와 메모리만 올 수 있다. imul register, source 두개의 operand를 가진다. add의 형식과 같이 곱한값이 operand1로 대입된다. imul register, source, immediate 두개의 operand와 immediate 즉 상수를 가진다. imul source에 대한 Operand 표 imul register, source에 대한 Operand표 imul register, source, immediate에 대한 Operand표 - imul의 곱 연산예시- 1.. 더보기
[어셈블리어] adc와 Jump 4.5 Addition and Subtraction of Larger Numbers adc add 와 기능은 같지만, carry(자리올림수)를 포함해서 덧셈을 하기 때문에 64bit의 연산이 가능하다. .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD .STACK 4096 .DATA Ndr1Hi DWORD ? Ndr1Lo DWORD ? Ndr2Hi DWORD ? Ndr2Lo DWORD ? .CODE _start: mov Ndr1Lo, 0FFFFFFFFh mov Ndr2Lo, 0FFFFFFFFh mov Ndr1Hi, 0 mov Ndr2Hi, 0 mov eax, Ndr1Lo add eax, Ndr2Lo mov Ndr1Lo, eax mov.. 더보기
[어셈블리어]inc(증가), dec(감소), mul(곱셈)명령 자주쓰는 메모리를 cache영역에 저장해두고 필요할 때마다 메모리 영역까지 갈 필요없이 cache영역으로 가서 저장해둔 메모리를 사용할 수 있다. 각 명령어에 해당하는 OP코드가 없으면 컴파일 에러가 난다. 즉 add에 add eax, a 의 경우 OP코드가 05로 존재하지만 add 20, eax의 경우 컴파일 할 OP코드가 없기 때문에 컴파일 불가능. 논리적으로는 20 = 20 + eax의 수식이 불가능 하기 때문에 컴파일이 안되는 걸로 보이지만 컴파일 상으로는 20 = 20 + eax 라는 형식자체가 없기 때문에 컴파일 에러가 뜬다. inc의 386 클럭 = 2, byte = 1 add의 386 클럭 = 2, byte = 5 inc - 1을 증가시키는 어셈블리 명령어 dec - 1을 감소시키는 어셈블.. 더보기