查看: 1851|回复: 0

[原创] 【一网打尽】rene个人翻译之Lesson 3 OK03

[复制链接]
  • TA的每日心情

    2015-8-29 20:27
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-3-30 12:37:17 | 显示全部楼层 |阅读模式
    分享到:
    原贴地址:https://www.cirmall.com/bbs/thread-41001-1-3.html
    3课ok03
    本课的教学建立在ok03 ok02如何装配使用功能更可重用代码和rereadable。这是假设你的代码为2课:ok02操作系统为基础的。

    1可重复使用的代码
    到目前为止,我们已经通过我们的国产操作系统的码型发生的事情,我们想在秩序。这个小程序是这样好,如果我们像这样写的整个系统的代码,将unreadable完全。相反,我们使用的功能。


    说的功能是被“黑盒”。我们把输入和输出,在外面吃,但我们不需要知道他们的工作。
    高层次的代码,如C或C + +的功能,是语言本身的一部分。汇编代码中的函数是有思想的,只是我们。
    我们想ideally能够设置一些寄存器的值,我们输入一个地址,分支,和期望的是在一些点在我们的代码,将代码分回的HAVING输出设置寄存器的值。这是一个函数的汇编代码是什么。困难是我们的系统使用的是在设置寄存器。如果我们使用任何系统,我们只是觉得每样,可能使用不同的系统程序员,程序员的工作,找到其他坚硬了解。此外,编译器将不能够很容易地与汇编代码的工作,他们将不知道如何使用的功能。为防止混淆,标准的应用程序二进制接口(ABI)是为每个devised这是一个汇编语言函数上的协议应该如何运行。如果每个人都以同样的方式,使得函数,那么每个人都将能够使用每个人的功能。我将在这一标准的教学,从现在开始我将和我的代码的功能来满足所有的标准。
    标准说,R0,R1,R2和R3的输入将被使用的函数中的顺序。如果功能需求的输入,那么它是不是需要有价值的物质。如果它需要的只有一个,它永远都在,如果它需要二,R0的,都在第一和第二的R0,R1和OS都在线,在线。输出将永远是0。蛛网膜下腔出血(SAH)如果函数输出什么,它不是以物的价值R0。
    此外,它也需要这样的功能,在运行到R12的,R4的,他们必须有相同的值,当函数的开始。这意味着,当你调用这个函数,你可以肯定的是R4的到R12的值不会改变,但你不能确定什么是R0到R3的。
    当你完成后,它已到函数的代码分支,然后它。这是地址“必须知道的均值,然后它的代码。为了方便这一点,有一个特殊的寄存器被称为LR(链接在地址寄存器),永远保持的指令后,把这一功能。
    表1.1 ARM寄存器使用ABI(TD)

    RegisterBriefPreservedRules
    r0Argument and resultNor0 and r1 are used for passing the first two arguments to functions, and returning the results of functions. If a function does not use them for a return value, they can take any value after a function.
    r1Argument and resultNo
    r2ArgumentNor2 and r3 are used for passing the second two arguments to functions. There values after a function is called can be anything.
    r3ArgumentNo
    r4General purposeYesr4 to r12 are used for working values, and their value after a function is called must be the same as before.
    r5General purposeYes
    r6General purposeYes
    r7General purposeYes
    r8General purposeYes
    r9General purposeYes
    r10General purposeYes
    r11General purposeYes
    r12General purposeYes
    lrReturn addressNolr is the address to branch back to when a function is finished, but this does have to contain the same address after the function has finished.
    spStack pointerYessp is the stack pointer, described below. Its value must be the same after the function has finished.

    通常的功能需要使用更多的寄存器R0到R3比。但是,由于R4至R12的方法运行后必须保持不变,他们必须保存起来。我们把它们保存在所谓的堆栈。
    由于堆栈是非常有用的,它已经在ARMv6指令集的直接实现。一个特殊的寄存器称为SP(堆栈指针)对堆栈的地址。当项目被添加到堆栈,SP寄存器的更新,所以它总是保持第一项堆栈上的地址。推{ R4,R5 }将R4和R5的值到堆栈的顶部和流行{ R4,R5 }会带他们回来了(以正确的顺序)。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-6-12 06:18 , Processed in 0.103579 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.