01 void main(){
02 unsigned int a = 5;
03 signed int b = -1;
04 if(a > b)
05 printf("True");
06 else
07 printf("False");
08 }
Hasil >> False ( line 07)
Kenapa?
Sebab perbandingan di buat antara signed dan unsigned.
Compiler akan assume perbandingan dibuat guna mode unsigned.
Note: jika mode signed, assembly instruction yg digunakan adalah jg(jump greater ).
Jika mode unsigned, assembly instruction adalalah ja(jump above )
Data variable a yg disimpan dalam memori adalah 0x00000005.
Data variable b yg disimpan dalam memori adalah 0xffffffff (value adalah -1)
utk jg:
a > b # hasilnya true
utk ja:
a > b # hasilnya false (sebab 0x00000005 (a) lebih kecil dari 0xffffffff (b) )
assembly code utk line 04:
mov eax, 0x5
mov ebx, 0xffffffff
cmp eax, ebx
ja binary.true
(kalau both variable adalah signed int, compiler akan gunakan jg, bukan ja)
extra:
JG will jump if ZF = 0 and SF = OF
JA will jump if CF = 0 and ZF = 0
(ref. http://www.unixwiz.net/techtips/x86-jumps.html)
No comments:
Post a Comment
Terima kasih