알맹이방
어셈블리어 11. add, sub 본문
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이 감소했다.
'SISS (2017-2018) > 어셈블리어' 카테고리의 다른 글
어셈블리어 13. 메모리 주소 지정 방식 (0) | 2018.08.06 |
---|---|
어셈블리어 12. 메모리의 간접참조 (0) | 2018.08.05 |
어셈블리어 10. inc, dec (0) | 2018.07.30 |
어셈블리어 09. JMP 2 (0) | 2018.07.22 |
어셈블리어 08. JMP (0) | 2018.07.22 |