일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- struct
- movdqu
- assembly
- modr/m
- NASM
- GCC
- compare
- call instruction
- return
- stackalign
- 운영체제
- csproj
- C
- 유효 주소
- C#
- WPF
- movaps
- OS
- struct반환
- effective address
- 숏코딩
- movups
- C언어
- load effective address
- instruction
- modrm
- disassemble
- sib
- void main
- 어셈블리
- Today
- Total
프로그래밍 잡화점
bool과 int의 관계 (In C) 본문
0은 false고 나머지를 true로 받는 이유는 C 컴파일러 마음대로 이기 때문이다.
역어셈을 해보면 int -> bool하는 과정은 그저 cmp 하나로 작성되어 있음을 알 수 있다
cmp 변수 0x0 (cmp는 compare)
실제로 다음 코드를 역어셈 해보면 재밌는 사실을 알 수 있다
int main() {
int n = 5;
n = !n;
return 0;
}
설명
1줄 : 변수에 5를 할당한다
2줄 : 변수랑 0을 비교해서 Zero Flag를 설정한다
3줄 : Zero Flag에 따라서 0또는 1을 al 레지스터에 넣는다
4줄 : al 레지스터의 값을 eax 레지스터에 넣는다
5줄 : n에 eax의 값. 즉 Zero Flag에 따라 생성된 0 또는 1의 값이 들어간다
따라서 n이 0이 아니기 때문에 Zero flag에 의해서
sete는 0을 반환한다
이후 그 0이 n에 들어가게 되는 것이다
이렇게 n = 0인 상황에서는 cmp가 Zero를 true 설정하기 때문에
값이 달라진다.
'C, C++ 분석 보고서' 카테고리의 다른 글
struct 반환에 대한 고찰 (2) | 2023.04.06 |
---|---|
함수의 반환에 대한 고찰 (0) | 2022.12.27 |
main의 반환형에 관한 고찰 (In C) (2) | 2022.05.04 |
if에 관한 고찰 (In C) (0) | 2022.03.13 |
for에 관한 작은 고찰 (In C) (0) | 2022.03.11 |
Comments