最近在学习微机接口技术和网络编程基础,在这两门学科里都提到计算机字节的大小端判断问题
什么是大小端呢?
如果在连续的两个地址空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