어셈블리어 -(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