목록SISS (2017-2018)/어셈블리어 (16)
알맹이방
offset을 이용하여 메모리 공간을 접근하는 방법을 알아보겠다. offset이란 기준점에서 얼만큼 떨어져있는 메모리의 값을 지칭할 때 쓰는 단어다. (변위차를 나타내는 정수형) 보통 메모리에서 쓰인다. 이렇게 명령어를 적으면 기준점인 ebx 402000에서부터 1, 2, 3, 4먼큼 차례로 커지며 그 자리에 1, 2, 3, 4를 저장한다. 결과를 보면 402000에 0, 402001에 1, 402002에 2 ... 가 저장되어있다. 그렇다면 이 명령어의 결과는 무엇일까? 402000에서부터 ecx만큼을 더한 주소, 처음에 ecx가 0이니까 402000, inc로 ecx가 1이 올라서 402002, inc로 ecx가 또 1이 증가해서 402002를 가리키게 될 것이다. 결과를 확인해보면 402000에 0..
본가에서 와이파이가 고장난 관계로 핸드폰으로 직접 찍어 올립니다.... 서울 가는대로 원본으로 바꿔 올리겠습니다ㅠㅠ 메모리의 간접참조란 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..