어셈블리어 -(2)
2022. 12. 12. 16:46ㆍ리눅스
728x90
<condition 명령어>
1. cmpl b,a // b랑 a 비교 위해 a-b 계산
->
캐리 발생하면 CF가 1로 세팅
a==b라면 ZF가 1로 세팅
a-b<0이라면 SF가 1로 세팅
양수 - 음수 <음수 이거나 음수-양수>양수 처럼 잘못된 값이 나오면(오버플로우 난 경우) OF가 1로 세팅
2. test b,a //b & a
->
a&b==0이라면 ZF를 1로 세팅
a&b < 0이라면 SF를 1로 세팅
*위의 두 명령어를 기반으로 SetX 명령어를 사용한다

*위의 명령을 하기 전에 cmpl로 비교해야함
*sete: 비교한 값이 같으면 Dest를 1로 설정
setne: 비교한 값이 같지 않으면 Dest를 1로 설정
sets: 비교한 값이 음수가 나오면 Dest를 1로 설정
setg: cmpl b,a 했을 때 a>b이면 Dest를 1로 설정
setge: cmpl b,a 했을 때 a>=b이면 Dest를 1로 설정

cmpl %eax, 8(%ebp): cmpl y,x // x-y 계산으로 비교
setg %al : x>y라면 al에 1 저장
movzbl %al,%eax: al 공간을 제외하고 eax 공간을 다 0으로 채우고 eax 값을 리턴 -> 1 리턴
<점프>

*위의 명령을 하기 전에 cmpl로 비교해야함
*jmp: 무조건 점프
je: 비교한 값이 같으면 점프
코드를 먼저 goto 버전으로 바꾸고 어셈블리어 코드로 바꾼다.
while문은 do-while문으로 바꿔주고 goto문으로 바꿔준다.
728x90
'리눅스' 카테고리의 다른 글
| 어셈블리어-(3) (0) | 2022.12.12 |
|---|---|
| 어셈블리어 -1 (0) | 2022.12.12 |
| (리눅스) Makefile (0) | 2022.11.29 |
| gdb 명령어 모음 (0) | 2022.11.28 |
| 디버깅 (0) | 2022.11.26 |