汇编基础知识(一)

2018-05-04  本文已影响84人  CoderLWG

汇编语言的发展

机器语言

由0和1组成的机器指令.

为什么是0和1来表示?
就是高低电平,1表示有电,0表示没电

汇编语言(assembly language)

使用助记符代替机器语言
如:

因为CPU是不会识别助记符的,所以有了编译器,把助记符转换成一串由0和1组成的语言

高级语言(High-level programming language)

C\C++\Java\OC\Swift,更加接近人类的自然语言
比如C语言:

汇编语言的特点

汇编的用途

汇编语言的种类

架构 设备
armv6 iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7 iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7s iPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64 iPhone5S 以后 iPhoneX , iPad Air, iPad mini2以后

几个必要的常识

总线

内存里面最小单位是字节 1Byte = 8bit

举个例子

CPU读取内存

内存

各类存储区的逻辑连接 各类存储器的逻辑连接-物理地址对应图 各类存储器的物理地址情况

进制

学习进制的障碍

很多人学不好进制,原因是总以十进制为依托去考虑其他进制,需要运算的时候也总是先转换成十进制,这种学习方法是错误的.
我们为什么一定要转换十进制呢?仅仅是因为我们对十进制最熟悉,所以才转换.
每一种进制都是完美的,想学好进制首先要忘掉十进制,也要忘掉进制间的转换!

进制的定义

做个练习

十进制由10个符号组成: 0 1 3 2 8 A B E S 7 逢十进一

如果这样定义十进制: 1 + 1 = 3!就对了!

这样的目的何在?
传统我们定义的十进制和自定义的十进制不一样.那么这10个符号如果我们不告诉别人这个符号表,别人是没办法拿到我们的具体数据的!用于加密!

十进制由十个符号组成,逢十进一,符号是可以自定义的!!

数据的宽度

数学上的数字,是没有大小限制的,可以无限的大。但在计算机中,由于受硬件的制约,数据都是有长度限制的(我们称为数据宽度),超过最多宽度的数据会被丢弃。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int test(){
    int cTemp = 0x1FFFFFFFF;
    return cTemp;
}

int main(int argc, char * argv[]) {
    printf("%x\n",test());
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

计算机中常见的数据宽度

寄存器

内部部件之间由总线连接

寄存器内部器件

通用寄存器

pc寄存器(program counter)

bl指令

bl指令 -- 练习

现在有两段代码!假设程序先执行A,请写出指令执行顺序.最终寄存器x0的值是多少?

_A:
    mov x0,#0xa0
    mov x1,#0x00
    add x1, x0, #0x14
    mov x0,x1
    bl _B
    mov x0,#0x0
    ret

_B:
    add x0, x0, #0x10
    ret
上一篇下一篇

猜你喜欢

热点阅读