搜索
bottom↓
回复: 17

51是小端模式,还是大端模式呢?

[复制链接]

出0入0汤圆

发表于 2009-3-25 08:52:40 | 显示全部楼层 |阅读模式
51是小端模式,还是大端模式呢?
还是51本身没有大小端之分,只是编译器采用大端或者小端。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入54汤圆

发表于 2009-3-25 08:54:44 | 显示全部楼层
是编绎器的关系。。

出0入0汤圆

发表于 2009-3-25 08:57:44 | 显示全部楼层
应该是和芯片有关的吧

51是大端模式

出0入0汤圆

发表于 2009-3-25 09:07:14 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-3-25 09:33:17 | 显示全部楼层
很久没有用51了。

标准52的指令集和寄存器,基本上都是8位的,因此不分大小端。
涉及大于8Bit操作应该是只有MOV DPTR, #imm一个指令,这个指令的编码印象中是大端的。就是OPCode, Hi 8Bit, Lo 8Bit,共3字节。

其它的数据类型,在C是编译器实现的,Keil用的是大端。用别的编译器可能会有变化。

出0入0汤圆

发表于 2009-3-28 14:51:29 | 显示全部楼层
【2楼】 billowtust 回答的很正确。是和芯片有关,51是大端模式 !!!!!!!!!!!!!

出0入0汤圆

发表于 2009-3-28 16:04:27 | 显示全部楼层
KEIL C51 是大端模式 SDCC是小端模式
其它的MCU的其它编译器我都见过的是小端模式
从个人主观上讲我喜欢小端模式.

出0入0汤圆

 楼主| 发表于 2009-3-28 16:27:14 | 显示全部楼层
iar8051也是小端模式。

出0入0汤圆

发表于 2009-3-28 21:27:23 | 显示全部楼层
51大端,AVR、微机小端。
小端就是“高高低低”(16位数的高8位放高地址),大端则刚好相反

出0入0汤圆

发表于 2009-3-28 22:59:23 | 显示全部楼层
【2楼】 billowtust 回答的很正确。是和芯片有关,51是大端模式 !!!!!!!!!!!!!

     本人无聊再重复一边。看来大家的51单片机,,,呵呵。。。

    建议大家好好的找本单片机的书好好的看看。

出0入0汤圆

发表于 2009-3-28 23:02:41 | 显示全部楼层
看一个CPU是大端模式,还是小端模式,主要看该CPU的WORD的存放方式。例如ARM,既可以是大端模式,也可以是小端模式;80X86是小端模式。

出50入0汤圆

发表于 2009-3-28 23:16:34 | 显示全部楼层
我只有在用联合体的时候才会去编译器里看下是什么模式,一般使用不用操心,

模式在8位机里面是看编译器的吧。

出0入0汤圆

发表于 2009-4-3 16:35:20 | 显示全部楼层
4楼正解,大小端只与编译器有关,跟芯片没关系

出0入0汤圆

发表于 2009-4-3 23:28:20 | 显示全部楼层
大端.高字节在前.
unsigned long *x = 0x1000;
*x = 0x12345678;

:

0x1000: 12
0x1001: 34
0x1002: 56
0x1003: 78

大端小端并不是编译器说了算,是CPU架构说了算.8位机一样有16位操作数,你看16位操作数是大端还是小端.比如
ljmp 0x1234
看它的机器码是怎么写的,就清楚了:

02 12 34

出0入0汤圆

发表于 2009-4-4 10:07:50 | 显示全部楼层
自己试试就知道了!!
keil是低地址存高字节!

出0入0汤圆

发表于 2009-12-3 23:41:08 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2012-2-28 23:04:49 | 显示全部楼层
关于大小端的问题,我同意4楼的意见。就CPU指令来讲肯定是分大小端的,除非全部指令都是8位的。对于8位机来说,多字节的数据类型是由编译器来处理的,所以编译器就存在了大小端的问题。

如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
            大端        小端
0x0000      0x12        0xcd
0x0001      0x34        0xab
0x0002      0xab        0x34
0x0003      0xcd        0x12

下面Keil C51编译出的代码来看,Keil 是大端的
    68: a.w = 0x1234;
    69:  
C:0x15AC    752812   MOV      0x28,#0x12
C:0x15AF    752934   MOV      0x29,#0x34

从C51定时器的寄存器地址来看,我认为C51 CPU本身应该是小端的,以下摘自Keil 的帮助文档:
the 8052 uses addresses 0xCC and 0xCD for the low and high bytes of timer/counter 2 respectively.

Access to 16-bit SFRs using sfr16 is possible only when the low byte immediately precedes the high byte (little endian) and when the low byte is written last. The low byte is used as the address in the sfr16 declaration. For example:

sfr16 T2 = 0xCC;     /* Timer 2: T2L 0CCh, T2H 0CDh */
sfr16 RCAP2 = 0xCA;  /* RCAP2L 0CAh, RCAP2H 0CBh */

出0入0汤圆

发表于 2012-2-28 23:45:01 | 显示全部楼层
和CPU的指令有关系,51芯片本身是大端模式
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 00:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表