목록분류 전체보기 (167)
알맹이방
본가에서 와이파이가 고장난 관계로 핸드폰으로 직접 찍어 올립니다.... 서울 가는대로 원본으로 바꿔 올리겠습니다ㅠㅠ 메모리의 간접참조란 C언어를 한 사람이라면 쉬울 것 같다. 포인터의 개념과 비슷하다. [402000]에 402004를 넣고 EAX에 [402000]을 넣고 [EAX]에 4를 넣는다. 이 명령어를 총합하면 결과는 402004에 4 값이 들어가게 된다. 이 내용이 EAX 레지스터를 이용한 메모리 주소 간접참조 강의 내용의 전부이다. EAX에 402000을 넣고 [EAX]에 10을 넣으면 [402000]에 10 값이 들어가게 되는 명령이자 결과이다! 그렇다면 이 명령을 실행하면 어떻게 될까? 402000메모리에 402004이라는 16진수를 넣고 eax레지스터에 402000메모리에 있는 값을 넣어..
addition : 덧셈 subtraction : 뺄셈 뒤에 인자는 mov와 같이 2개, 레지스터도 올 수 있고 메모리도 되고 즉시값도 가능. c언어로 본다면, add a, 10은 a+=10과 같다. 실습을 보자! add eax, 10 이라고 하면 eax 에 10을 더하라는 의미이다. 한번 실행해 보겠다. eax에 10이 더해진 것을 알 수 있다. mov랑 같네! 라고 생각할 수 있으니 eax에 한번 더 더해보겠다. add eax, 7을 해서 eax 에 7을 더해보겠다. mov 처럼 덮어쓰기 하는 것이 아닌 더해진다. 17이 되었다. 레지스터끼리도 가능하다. ecx에 eax를 더한다. *2 한번 더해져서 17이 되었고 두번 더해져서 2E가 되었다. eax에 ecx를 더해보았다. 17+2E = 45 45로..
inc와 dec의 명령어를 설명하겠다. inc는 increase의 약자로 값을 하나 증가시키는 의미이고 dec은 decrease의 약자로 값을 하나 감소시키는 의미이다. inc와 dec는 인자가 하나인 것을 기억하자. 인자의 자리에는 reg이 올 수도 있고 mem이 올 수도 있다. inc를 사용해서 inc eax inc ebx inc ecx inc edx 명령어를 쳐봤다. 결과를 보면 eax, ebx, ecx, edx에 값이 하나씩 증가된 것을 볼 수 있다. al이나 ax 와 같은 2바이트 레지스터에도 적용할 수 있다. al과 ax가 하나씩 증가되어 eax 전체가 3이 된 것을 알 수 있다. 메모리에 넣으려고 하니까 eperand 사이즈를 맞추라는 경고가 뜬다. 저번 시간에 했던 것을 떠올려보자. dwo..
이 jmp 앞의 short의 의미는 f9과 같이 한 바이트로 이동범위를 저장할 수 있으면 short가 붙는다 ( -128 ~ 127) long은 아무것도 붙지 않는다. jmp 뒤에는 레지스터도 쓸 수 있다. 레지스터 eax안에 401005라는 값이 있다면 401005라는 주소값으로 jmp하는 것이다. jmp뒤에 ram 메모리주소도 쓸 수 있다. 402000이라는 ram메모리 안에 401002라는 주소값을 저장하고 [402000]으로 jmp하면 401002라는 주소값으로 jmp한다.