Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1189|回复: 2
打印 上一主题 下一主题

嵌入式C语言开发

[复制链接]

1228

主题

1996

帖子

7570

积分

认证用户组

Rank: 5Rank: 5

积分
7570
跳转到指定楼层
楼主
发表于 2020-9-12 22:45:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2020-9-12 23:13 编辑

gcc -o output
gcc -o 输出的文件名 输入的文件名
gcc -v -o 输出的文件名 输入的文件名   //其中 -v 显示编译输出的各个阶段

预处理
cpp -o a.i 001.c
替换
[gcc -E]

编译  --->这个阶段存在的称为关键字,而像define  include是在预处理阶段处理掉了,所以不是关键字。
/usr/lib/gcc/i486-linux-gnu/4.4.3/cc1 -o a.s 001.c
[gcc -S]

汇编
as -o a.o a.s
[gcc -c]

链接
/usr/lib/gcc/i486-linux-gnu/4.4.3/collect2 -o build a.o+....
[gcc -o]
gcc -o build 001.c


回复

使用道具 举报

1228

主题

1996

帖子

7570

积分

认证用户组

Rank: 5Rank: 5

积分
7570
沙发
 楼主| 发表于 2020-9-17 23:31:09 | 只看该作者
本帖最后由 Qter 于 2020-9-19 23:02 编辑

char a=-1;  0xff
unsigend char b=-1;

0x10   16  内存表示



回复 支持 反对

使用道具 举报

1228

主题

1996

帖子

7570

积分

认证用户组

Rank: 5Rank: 5

积分
7570
板凳
 楼主| 发表于 2020-9-19 18:19:21 | 只看该作者
本帖最后由 Qter 于 2020-9-19 18:32 编辑

内存地址的最小存储单元是什么? 位 还是 字节?

内存条的最小存储单位?

在内存条中,每一个二进制位都有一个内存地址。
明确地说,在内存条中,每一个晶体管都有一个内存地址。
0x开头的表明0x0001和0x0002都是16进制的数字,他们之间的差距是0x0002-0x0001=1bit。
单位是bit哦!




内存作为一种寄存器存贮单元,其最小单位就是“位”。
二进制的位,就是一个微小的晶体管。晶体管通电时,存储的就是1;关电时,存储的是0。
二进制的“0”或“1”就是1位。
//
内存地址,指的是每一个二进制位的单元地址,
用来标识具体某一个位寄存单元,一般是32位或者64位,这和现在所说的32位系统或64位系统有关系


为什么OD中,相邻的内存地址总是相差4。
//
字节 (Byte)是电脑中 信息含义的最小单位。
进制位(bit)是电脑中 最小的存储单位。
进制位(bit)存储的数据,不是完整的信息。
8个进制位(bit),16个进制位(bit),32个进制位(bit)存储的信息才是完整的。
//
32个进制位(bit)就有32个晶体管。32个内存地址。
这样二进制数换算成十六进制的,相邻的内存地址总是相差4。


在计算机内存中,每个基本单位(字节)都被赋予一个唯一的编号,这个编号称为什么
内存地址
内存地址也是一个值,32位的话是4个字节,
最小的是位,不过大部分处理器最低只能访问到字节,操作位也可以,移位就行


那具体这个内存地址也要占用存储空间吗?




内存作为一种寄存器存贮单元,其最小单位就是“位”。
二进制的位,就是一个微小的晶体管。晶体管通电时,存储的就是1;关电时,存储的是0。
二进制的“0”或“1”就是1位。
//
内存地址,指的是每一个二进制位的单元地址,
用来标识具体某一个位寄存单元,一般是32位或者64位,这和现在所说的32位系统或64位系统有关系。


字节 (Byte)是电脑中 信息含义的最小单位 (注意:不是 存储单位,进制位是电脑中 最小的存储单位。1字节=8位),




根地址总线对应一个内存单元 还是一个二进制位
如果是是一个内存单元,那请问电路不是只有0 与1吗?一根地址线怎么能对应一个内存单元(8个二进制位)一根线怎么能同时控制八个开关呢?
一根地址对应一个二进制位。n位宽度的地址总线可寻址范围是2的n次方个地址。
地址总线是这样的:
比如:若只有一根地址总线,那么可以索引地址0、地址1的两个内存地址。
若有两根地址总线,那么可以索引2^2=4个内存地址:00、01、10、11
以此类推,32位地址总线,能够索引2的32次方个地址,即4G内存地址空间。
然后再说这个电脑的位数,电脑的位数通常是指CPU的处理位数,这个不是靠地址总线来决定的,这个位数指的是CPU 通用寄存器的数据宽度,即CPU一次运算可以处理的数据bit长度






内存可以看作是一个简单的字节数组。在这个数组中,每个内存单元都有自己的地址:
第一个字节的地址是0,后面依次是1、2、3,等等。内存地址相当于普通数组的下标。
在逻辑内存中,
第一个字节的地址是0x00000000
第二个字节的地址是0x00000001
第三个字节的地址是0x00000002
第四个字节的地址是0x00000003
.
.
内存地址的作用:
在8086的实模式下,把某一段寄存器左移4位,然后与地址ADDR相加后,被直接送到内存总线上。
这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(或叫虚地址)。
.
.
在80386的保护模式下,
这个逻辑地址不是被直接送到内存总线,而是被送到内存管理单元(MMU)。
MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。



内存有点像开宾馆的。
不过它开的宾馆有点怪。
首先它的每一个“房间”,大小都是一个字节。
因此,计算机能单独处理的最小内存单位为字节。
它的门牌号也不叫房号,而叫内存地址。


计算机 最小的存储单位是进制位(bit)。计算机能单独处理的最小内存单位是字节(Byte)。//逻辑内存地址,是按最小的内存单位,字节来编号的。










回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-19 23:46 , Processed in 0.061186 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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