게하! 개하! (게임도 하고 개발도 하고)

어셈블리어 11. add, sub 본문

SISS (2017-2018)/어셈블리어

어셈블리어 11. add, sub

Sorrel 2018. 7. 30. 16:33

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로 eax가 바뀌었다.

 

메모리 402000에 eax 값을 더해보았다.

리틀엔디안으로 앞에서부터 쓰여지므로 45가 쓰여진 것을 볼 수 있다.

 

ecx에 402000에서부터 4바이트 만큼 더해보았다.

 

ecx에 2E+45가 되어 73이 된 것을 알 수 있다.

 

eax에도 더해보았다. 8A가 되었다.

 

데이터 사이즈가 되면 당연히 되질 않는다.

 

ax, cx 2바이트 끼리도 가능하다.

 

ax에 402000을 더할 때는 dword가 아닌 word를 쓰면 가능하다.

 

 

ax에 142가 된 것을 볼 수 있다.

 

 

메모리도 된다. 402000을 0으로 만들고

10을 더해보겠다.

 

402000메모리에 10이 된 것을 볼 수 있다.

 

402000에 10을 또 더해서 20이 되었다.

 

메모리끼리는 안 된다. mov에서도 그렇다.

sub 도 add와 같은 원리이다.

해당 명령어는 402000에 10을 뺀다는 의미이다.

 

402000이 10이 된 것을 알 수 있다.

 

sub eax, 10

eax에 10을 뺀다는 의미이다.

 

eax가 142에서 132로 변한 것을 알 수 있다.

 

레지스터와 메모리 사이에도 뺄셈이 가능하다.

eax에서 402000에서부터 4바이트만큼에 해당하는 값을 빼라는 소리이다

eax가 132에서 122로 10이 감소했다.

 

0 Comments
댓글쓰기 폼