最近在學習微機接口技術和網絡編程基礎,在這兩門學科裡都提到計算機字節的大小端判斷問題
什麼是大小端呢?
如果在連續的兩個地址空a,a+1面存入一個占用這兩個空間的整數。以十六位數為例 0x0102 如果a裡面是01 則說明是大端存儲 如果a裡面是02則說明是小端存儲
c語言代碼:
#include <stdio.h>
union {
short num;
char num1[sizeof(short)];
} un;
int main(int argc,char **argv)
{
un.num = 0x0102;
if (sizeof(short)==2)
{
if(un.num1[0] == 1 && un.num1[1] == 2)
printf("big-endian");
else if(un.num1[0] == 2 && un.num1[1] == 1)
printf("little-andian");
else
printf("erro!");
}
else
printf("erro!");
return 0;
}
匯編代碼實現:
include io32.inc
.data
msg1 byte 'big-endian',13,10,0
msg2 byte 'little-endian',13,10,0
num word 1234h
.code
start:
xor ebx,ebx
mov bl,byte ptr num
;mov eax,ebx
;call dispuid
cmp bl,12h
je loop1
mov eax,offset msg2
jmp loop2
loop1:
mov eax,offset msg1
loop2:
call dispmsg
exit 0
end start