c_汇编_0101
所有的标识符,无论是‘’int a ,b;‘’的“a,b”还是 ”char* c,d;”的“c,d”还是”void find()” 的find 都是一个32位(32位机中)的无符号整数,而他们之间的映射关系是在编译器里面实现的,而且是在汇编过程中完成替换。有符号的11111111和无符号的1111111,他们的存储方式是相同的,那么如何区别呢?今天恍然大明白了。决定他们正负的是对他们有生杀大权的操作码。比如说:”我们定义了一个 unsigned chat a 和一个signed char b,后面的程序把a b写入文件”,那么编译后,在汇编文件中,这个存储标识符是不一样的,也就是说汇编指令不同,汇编后当然也不是相同的操作码了,这样就决定他们是不是有符号了!在c语言中,放眼望去皆地址,为什么会这样?根源在于处理器。处理器的所有寻址方式中,只有一个立即数寻址,而这个数存放于代码段中,一条32位的指令,操作码占去32位的几位,条件码占去几位,剩下的就是几个操作数可以用的了,如果这个操作数是立即数,那么他只能用那么有限的几位来表示,显然不能满足需求。所以操作数大多用地址表示,并且出现了因地址计算方法不同而取名不同的寄存器寻址/寄存器间接寻址等好多寻址方式。正所谓没有无缘无故的爱,也没有无缘无故的恨,因为处理器用地址方便工作,所以有了机器码中的操作数部分多数是地址,汇编语言只是这些010101110~~~~方便记忆和书写的另一种表示方法(但是伪指令就有点c语言的味道了),所以地址的使用是必需的,到了c语言,不管有多么华丽,你对数据的操作还是得从地址入手!
怎么把东西有条理地写出来这么难啊!

浙公网安备 33010602011771号