-
[libasm] 어셈블리 (about 1 week) - 2일차(ft_strlen, ft_strcmp)42seoul 2021. 5. 6. 17:00
어셈블리 2일차(2) - ft_strlen, ft_strcmp에서 보아야할 개념들
jmp
- jmp는 무조건 점프이다. 조건 없이 주소로 점프한다. 유용하게 이용하면 strlen 잘 짤 수 있음
je & jne
- je는 zero flag가 1일 때 수행함.
- jne는 je에 not이 붙은 것, je가 zero flag가 1일 때 수행한다면 jne는 zero flag가 0이면 jump 수행함.
- je: jump if equal, jne: jump if not equal
- 사용예시: cmp 후에 jne쓰면 비교하여 다른 경우 jne 라인을 수행함
- Zero Flag (ZF) : 단일비트플래그, 연산 결과가 0일때 1로 설정. [출처]
sub, cmp
- sub(subtraction)는 빼기, cmp(compare)는 비교함
- cmp는 요소가 서로 같으면 zero flag를 1로 바꾼다.(flag를 세팅하는 일만 함, 요소의 크기가 같아야 비교 가능함)
- sub는 앞 요소에서 뒤 요소를 뺀 값을 다시 앞 요소에 저장함. sub a, b -> a -= b 와 같다.
- cmp는 요소의 값이 바뀌지 않고 sub는 바뀐다는 차이가 있다.
범용 레지스터
우리가 쓰는 rax, rcx 같은 레지스터는 64bits인데 그 일부분만 선택적으로 쓸 수도 있다.
ex) al은 rax의 첫 8bits이다. cl은 rcx의 첫 8bits이다.
char size(1byte, 8bits)로 비교하고 싶을때 이용하게 됨.
여기까지 공부하고 사소한 실수로 첫번째 평가 fail하고 retry 해서 결과적으로 7일안에 끝냈다.
실제로 코딩하고 평가받는 시간은 7일 안걸렸지만
그 전부터 유튜브로 리브어셈 강의를 전철에서 이동할때 꾸준히 들었는데 그게 도움이 많이 됨
지금 하고 있는 과제만 보면 재미없으니
이동시간에 다음과제 살펴보는 것도 좋은듯하다.
'42seoul' 카테고리의 다른 글
[Philosophers] 필로소퍼 70시간만에 끝내기(2)-첫번째 문제 파악하기 (0) 2021.05.21 [Philosophers] 필로소퍼 70시간만에 끝내기(1)-과제파악하기 (0) 2021.05.18 [libasm] 어셈블리 (about 1 week) - 2일차(ft_write, ft_read) (0) 2021.05.06 [libasm] 어셈블리 (about 1 week) (0) 2021.03.26 [cub3d] map parse 맵 파싱하기 (0) 2021.03.21