TI-RSLK 模块 3 - 讲座视频 - ARM Cortex M 组件
Loading the player...
将在30s后自动为您播放下一课程
大家好, 我是 我们将讨论 正如我上次说过的, 了解的越多, 计算机实际上 代码的,也就越有可能 系统工程师。 因此,即使您使用 我也认为您 或汇编级别了解 执行方式。 因此,我们要 Cortex 调试 让我们开始吧。 让我们从逻辑 正如您知道的,我们将 因此,如果我们以“1”结束, 如果我们以零结束, 这里的或运算 因此,如果我们与一执行 如果我们与零执行或运算, 我们将 或将两个不同 合并到一个值中。 我要讨论的 运算是异或。 因此,如果我与一执行异或 换句话说,如果我进行 异或运算,它将从一 如果我与零执行异或 那么,再说一次,我们 这里是汇编 这里是操作码。 这些是操作数。 这恰好是寄存器 具体而言,在这里, 都沿着这个方向执行。 换句话说,这里的 R1 并将结果放回到 您需要从这 我们也会在 这称为按位 那么,在本例中, 与 在这里,我有一些 已位于 可以看到会 它是按位发生的。 因此,如果您选择 让我们看看位八 我们会看到它将 以及 对齐,然后将该值 它会对全部 再说一次,逻辑运算 移位运算本质上 换句话说,向右 向左移位 但您需要了解的 一个事实,即您需要 无符号数还是 对您而言非常重要。 因为如果它是 您需要进行 零移位到这里,您 相反,如果它 那么您将在将其 最高有效位。 因此,了解该运算的 即您看到您具有 因此,我们将在对该 您应该知道您具有的 无符号数,这一点很重要。 当您向左移位时, 还是无符号数 我们将放入一个零。 再说一次,运算 因此,它会获取 将其右移多次,然后 寄存器中。 因此,我们将使用 执行乘和除。 这里的重点是, 您必须知道它 无符号数。 算术运算 我将获取两个 将它们相加。 P 但这里的问题是, 如果我获取该 另一个 这就导致了一种 可能无法重新 寄存器中,我可能会出错。 该错误 该情况会在加法 它实际上在 如果我获取一个 数字相乘,那么我 我得到 那么,这是一条 那么,当您编写您的 对该溢出情况的担忧时, 第一件事是,我们将 预测中间结果的 并确保该值 因此,这通常意味着 我们的输入的范围,并且 那么,例如,如果您知道 换句话说,我知道我的数字 我获取该数字,然后 我知道它可能达到的 这是它可能达到的最大值。 因此,理论上而言, 因此,我知道该数字 因此,如果我可以 知道该限制是 在理论上证明, 任何中间结果都 我们将用于解决 将其升级至 因此,我可能必须在 或者我可能必须获取 模式下执行它们。 因此,升级将 在该更高的 然后再将其降级回到原来的精度。 因此,您需要 数字的大小, 因为我们在该处理器结构中 当我们执行除法时,很显然, 另一个可能 称为掉出的问题, 此外,它还会在向右移位上 向右移位是除法。 基本而言,掉出 正如您看到的, 如果我获取数字 这在本质上 因此,我将丢失我的 因此,再说一次,我要 而导致灾难性的信息 灾难性的信息 除法或向右移位 就像移位、加法、 和除法一样,您 它是有符号数 使用一个有符号数 进行加、 是没有意义的。 因此,我们无法对两个 算术运算。 这没有任何意义。 基本而言,我们必须 更大的有符号数, 一起进行运算。 这是加法指令。 再说一次,它的 它获取第二个操作数, 将其与中间操作数 操作数进入这里。 请注意,在汇编级别, 进位标志会在发生 溢出 不幸的是,C 当我们执行加、 我们必须 或者我们必须 以防发生溢出。 当我们获取 指令。比较指令 但它不在 存储结果, 乘法和除法 先前已提到, 知道您的数字是 实际上,我们 用于无符号数/除法与 就像所有 该运算沿着 您可以看到它 因此,它获取 乘以该数字,然后 存储在该寄存器中。 这是前一个讲座中 访问变量的原理。 那么这位于 那么我在这里有一个 我在那里有 我们上次看到了 执行两个步骤。 第一步是 这是该指令。 这里是指针。 那么,这是指向 那么,这里的第一条 该 然后,我们可以使用 在本例中, 现在,我们 并除以五, 这里是乘法指令。 它获取 然后将结果存储回到 除法指令获取 除以 再说一次,我们看到用于 第一步是使一个 现在,该访问 因此它要将结果 总之,需要 总之,需要考虑它是 堆栈非常重要。 我们将在整个 我们可以将其 比如我们有 我们希望临时存储它, 这是后进 换句话说,我可以保存某些 它还是编译器 方法之一, 变量也是 不过,让我们 堆栈位于 当我绘制一个 我要将零地址 将 在这里的某个 分配一些空间。 现在,很显然,它必须 然后,我将设置 以指向该位置。 我将定义堆栈 堆栈的顶部 我最近,上次 因此,如果我查看 该堆栈指针将最初 元素。 我将在这里 最初等于 R2 我将执行 那么,这是第一条 它的工作方式是, 它将递减四。 这是因为,您应该 是 或四个字节。 因此,为了腾出空间, 我将在该位置 因此,请记住, 我要将零 然后,我执行 它存储一,递减堆栈 进行存储。 第三条指令,使 然后在该位置使 因此,在任何给定的 都会指向数据,并且 最后入栈的数据。 因此,堆栈的顶部 入栈的数据。 但是,出栈按照 这是出栈。 现在,我要 因此,这现在也 第五条指令,弹出 R4 堆栈现在与 实现了平衡。 那么,三个入栈,三个 移动了一些数据。 再说一次,入栈指令 而出栈会首先 那么,再说一次, 当您在计算机上进行 实际看到的东西。 因此,在整个 都将讨论 它是一种用于 那么,具体而言, 如何定义和 这是一个函数。 它是一种用于 因此,如果我有大量的代码, 这是低级别的代码 而这是高级别代码。 那么,函数 这些点是伪操作, 这三个。 因此,当这执行时, 函数调用。 因此,该函数的 是函数调用, 在这里看到 我们将看到这是怎么工作的。 让我们来执行它。 第一条指令将 那么,在我的寄存器中, R0 第二条指令是 分支连接上会 然后,它要将连接 设置为返回地址, 返回地址是 那么,这里的 调用函数之后的指令 它插入到 然后,它将更改或 使其等于函数地址。 程序计数器在这里。 就是这样。 因此,要执行的 该指令,第三条指令。 我们以前看到过它。 它要将 因此,R1 那么,第三条 要获取该存储到 因此,我初始化 但这里有趣的是 构造,以及一条 BXLR,它基本上会 并将其放置到 但连接寄存器 这是程序计数器 因此,第六条指令将是 另一个子例程调用。 那么,让我们来执行它。 现在连接寄存器 程序计数器已 然后它将执行 10, 现在,这恰好是 这不是一个非常好的 但是它会返回一个介于 请注意,它使用了 它在 然后,它还将使用 因此,R0 但 实际上是子例程 它获取连接寄存器 计数器中。 因此,现在程序计数器 那么,第 它将存储值, 那一个中。 那么,现在我们使 现在,在第 随机数生成器, 将存储在这里。 现在,第 因此,我们在 那么,这里的重点是, 来降低复杂性, 并且我们将 来调用函数。 我们将使用 这是有关条件 这里的重点是,需要 还是有符号数。 由于我们有一组 基本而言,我们会 一个寄存器中。 我们将使用比较指令, 进行比较。 然后,我们将 如果该条件为真, 那么,这就是我们 再说一次,我们 存储到一个寄存器中,将某个 然后进行比较。 然后,我们可以 只要两侧都是 两个值都是有符号数, 我们使用循环 那么,在本例中, G1 不断地运行 有时,我们会将某个 那么,我们可以通过 在本例中,R4 我们将使 然后,我们将退出。 这就是我们将 总之,我们 概述了 我建议您打开 您的 是否还有什么不明白的地方。 在本次讲座中, 可以使您成为 重点是:需要考虑 太大而无法存储; 这会在除法或向右移位上 确保您了解您的 还是 随着我们继续学习, 因为这些指令专门 数字运行。 非常感谢,祝您 再说一次,在那里稍微深入 该汇编语言的某些部分。
大家好, 我是 我们将讨论 正如我上次说过的, 了解的越多, 计算机实际上 代码的,也就越有可能 系统工程师。 因此,即使您使用 我也认为您 或汇编级别了解 执行方式。 因此,我们要 Cortex 调试 让我们开始吧。 让我们从逻辑 正如您知道的,我们将 因此,如果我们以“1”结束, 如果我们以零结束, 这里的或运算 因此,如果我们与一执行 如果我们与零执行或运算, 我们将 或将两个不同 合并到一个值中。 我要讨论的 运算是异或。 因此,如果我与一执行异或 换句话说,如果我进行 异或运算,它将从一 如果我与零执行异或 那么,再说一次,我们 这里是汇编 这里是操作码。 这些是操作数。 这恰好是寄存器 具体而言,在这里, 都沿着这个方向执行。 换句话说,这里的 R1 并将结果放回到 您需要从这 我们也会在 这称为按位 那么,在本例中, 与 在这里,我有一些 已位于 可以看到会 它是按位发生的。 因此,如果您选择 让我们看看位八 我们会看到它将 以及 对齐,然后将该值 它会对全部 再说一次,逻辑运算 移位运算本质上 换句话说,向右 向左移位 但您需要了解的 一个事实,即您需要 无符号数还是 对您而言非常重要。 因为如果它是 您需要进行 零移位到这里,您 相反,如果它 那么您将在将其 最高有效位。 因此,了解该运算的 即您看到您具有 因此,我们将在对该 您应该知道您具有的 无符号数,这一点很重要。 当您向左移位时, 还是无符号数 我们将放入一个零。 再说一次,运算 因此,它会获取 将其右移多次,然后 寄存器中。 因此,我们将使用 执行乘和除。 这里的重点是, 您必须知道它 无符号数。 算术运算 我将获取两个 将它们相加。 P 但这里的问题是, 如果我获取该 另一个 这就导致了一种 可能无法重新 寄存器中,我可能会出错。 该错误 该情况会在加法 它实际上在 如果我获取一个 数字相乘,那么我 我得到 那么,这是一条 那么,当您编写您的 对该溢出情况的担忧时, 第一件事是,我们将 预测中间结果的 并确保该值 因此,这通常意味着 我们的输入的范围,并且 那么,例如,如果您知道 换句话说,我知道我的数字 我获取该数字,然后 我知道它可能达到的 这是它可能达到的最大值。 因此,理论上而言, 因此,我知道该数字 因此,如果我可以 知道该限制是 在理论上证明, 任何中间结果都 我们将用于解决 将其升级至 因此,我可能必须在 或者我可能必须获取 模式下执行它们。 因此,升级将 在该更高的 然后再将其降级回到原来的精度。 因此,您需要 数字的大小, 因为我们在该处理器结构中 当我们执行除法时,很显然, 另一个可能 称为掉出的问题, 此外,它还会在向右移位上 向右移位是除法。 基本而言,掉出 正如您看到的, 如果我获取数字 这在本质上 因此,我将丢失我的 因此,再说一次,我要 而导致灾难性的信息 灾难性的信息 除法或向右移位 就像移位、加法、 和除法一样,您 它是有符号数 使用一个有符号数 进行加、 是没有意义的。 因此,我们无法对两个 算术运算。 这没有任何意义。 基本而言,我们必须 更大的有符号数, 一起进行运算。 这是加法指令。 再说一次,它的 它获取第二个操作数, 将其与中间操作数 操作数进入这里。 请注意,在汇编级别, 进位标志会在发生 溢出 不幸的是,C 当我们执行加、 我们必须 或者我们必须 以防发生溢出。 当我们获取 指令。比较指令 但它不在 存储结果, 乘法和除法 先前已提到, 知道您的数字是 实际上,我们 用于无符号数/除法与 就像所有 该运算沿着 您可以看到它 因此,它获取 乘以该数字,然后 存储在该寄存器中。 这是前一个讲座中 访问变量的原理。 那么这位于 那么我在这里有一个 我在那里有 我们上次看到了 执行两个步骤。 第一步是 这是该指令。 这里是指针。 那么,这是指向 那么,这里的第一条 该 然后,我们可以使用 在本例中, 现在,我们 并除以五, 这里是乘法指令。 它获取 然后将结果存储回到 除法指令获取 除以 再说一次,我们看到用于 第一步是使一个 现在,该访问 因此它要将结果 总之,需要 总之,需要考虑它是 堆栈非常重要。 我们将在整个 我们可以将其 比如我们有 我们希望临时存储它, 这是后进 换句话说,我可以保存某些 它还是编译器 方法之一, 变量也是 不过,让我们 堆栈位于 当我绘制一个 我要将零地址 将 在这里的某个 分配一些空间。 现在,很显然,它必须 然后,我将设置 以指向该位置。 我将定义堆栈 堆栈的顶部 我最近,上次 因此,如果我查看 该堆栈指针将最初 元素。 我将在这里 最初等于 R2 我将执行 那么,这是第一条 它的工作方式是, 它将递减四。 这是因为,您应该 是 或四个字节。 因此,为了腾出空间, 我将在该位置 因此,请记住, 我要将零 然后,我执行 它存储一,递减堆栈 进行存储。 第三条指令,使 然后在该位置使 因此,在任何给定的 都会指向数据,并且 最后入栈的数据。 因此,堆栈的顶部 入栈的数据。 但是,出栈按照 这是出栈。 现在,我要 因此,这现在也 第五条指令,弹出 R4 堆栈现在与 实现了平衡。 那么,三个入栈,三个 移动了一些数据。 再说一次,入栈指令 而出栈会首先 那么,再说一次, 当您在计算机上进行 实际看到的东西。 因此,在整个 都将讨论 它是一种用于 那么,具体而言, 如何定义和 这是一个函数。 它是一种用于 因此,如果我有大量的代码, 这是低级别的代码 而这是高级别代码。 那么,函数 这些点是伪操作, 这三个。 因此,当这执行时, 函数调用。 因此,该函数的 是函数调用, 在这里看到 我们将看到这是怎么工作的。 让我们来执行它。 第一条指令将 那么,在我的寄存器中, R0 第二条指令是 分支连接上会 然后,它要将连接 设置为返回地址, 返回地址是 那么,这里的 调用函数之后的指令 它插入到 然后,它将更改或 使其等于函数地址。 程序计数器在这里。 就是这样。 因此,要执行的 该指令,第三条指令。 我们以前看到过它。 它要将 因此,R1 那么,第三条 要获取该存储到 因此,我初始化 但这里有趣的是 构造,以及一条 BXLR,它基本上会 并将其放置到 但连接寄存器 这是程序计数器 因此,第六条指令将是 另一个子例程调用。 那么,让我们来执行它。 现在连接寄存器 程序计数器已 然后它将执行 10, 现在,这恰好是 这不是一个非常好的 但是它会返回一个介于 请注意,它使用了 它在 然后,它还将使用 因此,R0 但 实际上是子例程 它获取连接寄存器 计数器中。 因此,现在程序计数器 那么,第 它将存储值, 那一个中。 那么,现在我们使 现在,在第 随机数生成器, 将存储在这里。 现在,第 因此,我们在 那么,这里的重点是, 来降低复杂性, 并且我们将 来调用函数。 我们将使用 这是有关条件 这里的重点是,需要 还是有符号数。 由于我们有一组 基本而言,我们会 一个寄存器中。 我们将使用比较指令, 进行比较。 然后,我们将 如果该条件为真, 那么,这就是我们 再说一次,我们 存储到一个寄存器中,将某个 然后进行比较。 然后,我们可以 只要两侧都是 两个值都是有符号数, 我们使用循环 那么,在本例中, G1 不断地运行 有时,我们会将某个 那么,我们可以通过 在本例中,R4 我们将使 然后,我们将退出。 这就是我们将 总之,我们 概述了 我建议您打开 您的 是否还有什么不明白的地方。 在本次讲座中, 可以使您成为 重点是:需要考虑 太大而无法存储; 这会在除法或向右移位上 确保您了解您的 还是 随着我们继续学习, 因为这些指令专门 数字运行。 非常感谢,祝您 再说一次,在那里稍微深入 该汇编语言的某些部分。
大家好,
我是
我们将讨论
正如我上次说过的,
了解的越多,
计算机实际上
代码的,也就越有可能
系统工程师。
因此,即使您使用
我也认为您
或汇编级别了解
执行方式。
因此,我们要
Cortex
调试
让我们开始吧。
让我们从逻辑
正如您知道的,我们将
因此,如果我们以“1”结束,
如果我们以零结束,
这里的或运算
因此,如果我们与一执行
如果我们与零执行或运算,
我们将
或将两个不同
合并到一个值中。
我要讨论的
运算是异或。
因此,如果我与一执行异或
换句话说,如果我进行
异或运算,它将从一
如果我与零执行异或
那么,再说一次,我们
这里是汇编
这里是操作码。
这些是操作数。
这恰好是寄存器
具体而言,在这里,
都沿着这个方向执行。
换句话说,这里的
R1
并将结果放回到
您需要从这
我们也会在
这称为按位
那么,在本例中,
与
在这里,我有一些
已位于
可以看到会
它是按位发生的。
因此,如果您选择
让我们看看位八
我们会看到它将
以及
对齐,然后将该值
它会对全部
再说一次,逻辑运算
移位运算本质上
换句话说,向右
向左移位
但您需要了解的
一个事实,即您需要
无符号数还是
对您而言非常重要。
因为如果它是
您需要进行
零移位到这里,您
相反,如果它
那么您将在将其
最高有效位。
因此,了解该运算的
即您看到您具有
因此,我们将在对该
您应该知道您具有的
无符号数,这一点很重要。
当您向左移位时,
还是无符号数
我们将放入一个零。
再说一次,运算
因此,它会获取
将其右移多次,然后
寄存器中。
因此,我们将使用
执行乘和除。
这里的重点是,
您必须知道它
无符号数。
算术运算
我将获取两个
将它们相加。
P
但这里的问题是,
如果我获取该
另一个
这就导致了一种
可能无法重新
寄存器中,我可能会出错。
该错误
该情况会在加法
它实际上在
如果我获取一个
数字相乘,那么我
我得到
那么,这是一条
那么,当您编写您的
对该溢出情况的担忧时,
第一件事是,我们将
预测中间结果的
并确保该值
因此,这通常意味着
我们的输入的范围,并且
那么,例如,如果您知道
换句话说,我知道我的数字
我获取该数字,然后
我知道它可能达到的
这是它可能达到的最大值。
因此,理论上而言,
因此,我知道该数字
因此,如果我可以
知道该限制是
在理论上证明,
任何中间结果都
我们将用于解决
将其升级至
因此,我可能必须在
或者我可能必须获取
模式下执行它们。
因此,升级将
在该更高的
然后再将其降级回到原来的精度。
因此,您需要
数字的大小,
因为我们在该处理器结构中
当我们执行除法时,很显然,
另一个可能
称为掉出的问题,
此外,它还会在向右移位上
向右移位是除法。
基本而言,掉出
正如您看到的,
如果我获取数字
这在本质上
因此,我将丢失我的
因此,再说一次,我要
而导致灾难性的信息
灾难性的信息
除法或向右移位
就像移位、加法、
和除法一样,您
它是有符号数
使用一个有符号数
进行加、
是没有意义的。
因此,我们无法对两个
算术运算。
这没有任何意义。
基本而言,我们必须
更大的有符号数,
一起进行运算。
这是加法指令。
再说一次,它的
它获取第二个操作数,
将其与中间操作数
操作数进入这里。
请注意,在汇编级别,
进位标志会在发生
溢出
不幸的是,C
当我们执行加、
我们必须
或者我们必须
以防发生溢出。
当我们获取
指令。比较指令
但它不在
存储结果,
乘法和除法
先前已提到,
知道您的数字是
实际上,我们
用于无符号数/除法与
就像所有
该运算沿着
您可以看到它
因此,它获取
乘以该数字,然后
存储在该寄存器中。
这是前一个讲座中
访问变量的原理。
那么这位于
那么我在这里有一个
我在那里有
我们上次看到了
执行两个步骤。
第一步是
这是该指令。
这里是指针。
那么,这是指向
那么,这里的第一条
该
然后,我们可以使用
在本例中,
现在,我们
并除以五,
这里是乘法指令。
它获取
然后将结果存储回到
除法指令获取
除以
再说一次,我们看到用于
第一步是使一个
现在,该访问
因此它要将结果
总之,需要
总之,需要考虑它是
堆栈非常重要。
我们将在整个
我们可以将其
比如我们有
我们希望临时存储它,
这是后进
换句话说,我可以保存某些
它还是编译器
方法之一,
变量也是
不过,让我们
堆栈位于
当我绘制一个
我要将零地址
将
在这里的某个
分配一些空间。
现在,很显然,它必须
然后,我将设置
以指向该位置。
我将定义堆栈
堆栈的顶部
我最近,上次
因此,如果我查看
该堆栈指针将最初
元素。
我将在这里
最初等于
R2
我将执行
那么,这是第一条
它的工作方式是,
它将递减四。
这是因为,您应该
是
或四个字节。
因此,为了腾出空间,
我将在该位置
因此,请记住,
我要将零
然后,我执行
它存储一,递减堆栈
进行存储。
第三条指令,使
然后在该位置使
因此,在任何给定的
都会指向数据,并且
最后入栈的数据。
因此,堆栈的顶部
入栈的数据。
但是,出栈按照
这是出栈。
现在,我要
因此,这现在也
第五条指令,弹出
R4
堆栈现在与
实现了平衡。
那么,三个入栈,三个
移动了一些数据。
再说一次,入栈指令
而出栈会首先
那么,再说一次,
当您在计算机上进行
实际看到的东西。
因此,在整个
都将讨论
它是一种用于
那么,具体而言,
如何定义和
这是一个函数。
它是一种用于
因此,如果我有大量的代码,
这是低级别的代码
而这是高级别代码。
那么,函数
这些点是伪操作,
这三个。
因此,当这执行时,
函数调用。
因此,该函数的
是函数调用,
在这里看到
我们将看到这是怎么工作的。
让我们来执行它。
第一条指令将
那么,在我的寄存器中,
R0
第二条指令是
分支连接上会
然后,它要将连接
设置为返回地址,
返回地址是
那么,这里的
调用函数之后的指令
它插入到
然后,它将更改或
使其等于函数地址。
程序计数器在这里。
就是这样。
因此,要执行的
该指令,第三条指令。
我们以前看到过它。
它要将
因此,R1
那么,第三条
要获取该存储到
因此,我初始化
但这里有趣的是
构造,以及一条
BXLR,它基本上会
并将其放置到
但连接寄存器
这是程序计数器
因此,第六条指令将是
另一个子例程调用。
那么,让我们来执行它。
现在连接寄存器
程序计数器已
然后它将执行
10,
现在,这恰好是
这不是一个非常好的
但是它会返回一个介于
请注意,它使用了
它在
然后,它还将使用
因此,R0
但
实际上是子例程
它获取连接寄存器
计数器中。
因此,现在程序计数器
那么,第
它将存储值,
那一个中。
那么,现在我们使
现在,在第
随机数生成器,
将存储在这里。
现在,第
因此,我们在
那么,这里的重点是,
来降低复杂性,
并且我们将
来调用函数。
我们将使用
这是有关条件
这里的重点是,需要
还是有符号数。
由于我们有一组
基本而言,我们会
一个寄存器中。
我们将使用比较指令,
进行比较。
然后,我们将
如果该条件为真,
那么,这就是我们
再说一次,我们
存储到一个寄存器中,将某个
然后进行比较。
然后,我们可以
只要两侧都是
两个值都是有符号数,
我们使用循环
那么,在本例中,
G1
不断地运行
有时,我们会将某个
那么,我们可以通过
在本例中,R4
我们将使
然后,我们将退出。
这就是我们将
总之,我们
概述了
我建议您打开
您的
是否还有什么不明白的地方。
在本次讲座中,
可以使您成为
重点是:需要考虑
太大而无法存储;
这会在除法或向右移位上
确保您了解您的
还是
随着我们继续学习,
因为这些指令专门
数字运行。
非常感谢,祝您
再说一次,在那里稍微深入
该汇编语言的某些部分。
大家好, 我是 我们将讨论 正如我上次说过的, 了解的越多, 计算机实际上 代码的,也就越有可能 系统工程师。 因此,即使您使用 我也认为您 或汇编级别了解 执行方式。 因此,我们要 Cortex 调试 让我们开始吧。 让我们从逻辑 正如您知道的,我们将 因此,如果我们以“1”结束, 如果我们以零结束, 这里的或运算 因此,如果我们与一执行 如果我们与零执行或运算, 我们将 或将两个不同 合并到一个值中。 我要讨论的 运算是异或。 因此,如果我与一执行异或 换句话说,如果我进行 异或运算,它将从一 如果我与零执行异或 那么,再说一次,我们 这里是汇编 这里是操作码。 这些是操作数。 这恰好是寄存器 具体而言,在这里, 都沿着这个方向执行。 换句话说,这里的 R1 并将结果放回到 您需要从这 我们也会在 这称为按位 那么,在本例中, 与 在这里,我有一些 已位于 可以看到会 它是按位发生的。 因此,如果您选择 让我们看看位八 我们会看到它将 以及 对齐,然后将该值 它会对全部 再说一次,逻辑运算 移位运算本质上 换句话说,向右 向左移位 但您需要了解的 一个事实,即您需要 无符号数还是 对您而言非常重要。 因为如果它是 您需要进行 零移位到这里,您 相反,如果它 那么您将在将其 最高有效位。 因此,了解该运算的 即您看到您具有 因此,我们将在对该 您应该知道您具有的 无符号数,这一点很重要。 当您向左移位时, 还是无符号数 我们将放入一个零。 再说一次,运算 因此,它会获取 将其右移多次,然后 寄存器中。 因此,我们将使用 执行乘和除。 这里的重点是, 您必须知道它 无符号数。 算术运算 我将获取两个 将它们相加。 P 但这里的问题是, 如果我获取该 另一个 这就导致了一种 可能无法重新 寄存器中,我可能会出错。 该错误 该情况会在加法 它实际上在 如果我获取一个 数字相乘,那么我 我得到 那么,这是一条 那么,当您编写您的 对该溢出情况的担忧时, 第一件事是,我们将 预测中间结果的 并确保该值 因此,这通常意味着 我们的输入的范围,并且 那么,例如,如果您知道 换句话说,我知道我的数字 我获取该数字,然后 我知道它可能达到的 这是它可能达到的最大值。 因此,理论上而言, 因此,我知道该数字 因此,如果我可以 知道该限制是 在理论上证明, 任何中间结果都 我们将用于解决 将其升级至 因此,我可能必须在 或者我可能必须获取 模式下执行它们。 因此,升级将 在该更高的 然后再将其降级回到原来的精度。 因此,您需要 数字的大小, 因为我们在该处理器结构中 当我们执行除法时,很显然, 另一个可能 称为掉出的问题, 此外,它还会在向右移位上 向右移位是除法。 基本而言,掉出 正如您看到的, 如果我获取数字 这在本质上 因此,我将丢失我的 因此,再说一次,我要 而导致灾难性的信息 灾难性的信息 除法或向右移位 就像移位、加法、 和除法一样,您 它是有符号数 使用一个有符号数 进行加、 是没有意义的。 因此,我们无法对两个 算术运算。 这没有任何意义。 基本而言,我们必须 更大的有符号数, 一起进行运算。 这是加法指令。 再说一次,它的 它获取第二个操作数, 将其与中间操作数 操作数进入这里。 请注意,在汇编级别, 进位标志会在发生 溢出 不幸的是,C 当我们执行加、 我们必须 或者我们必须 以防发生溢出。 当我们获取 指令。比较指令 但它不在 存储结果, 乘法和除法 先前已提到, 知道您的数字是 实际上,我们 用于无符号数/除法与 就像所有 该运算沿着 您可以看到它 因此,它获取 乘以该数字,然后 存储在该寄存器中。 这是前一个讲座中 访问变量的原理。 那么这位于 那么我在这里有一个 我在那里有 我们上次看到了 执行两个步骤。 第一步是 这是该指令。 这里是指针。 那么,这是指向 那么,这里的第一条 该 然后,我们可以使用 在本例中, 现在,我们 并除以五, 这里是乘法指令。 它获取 然后将结果存储回到 除法指令获取 除以 再说一次,我们看到用于 第一步是使一个 现在,该访问 因此它要将结果 总之,需要 总之,需要考虑它是 堆栈非常重要。 我们将在整个 我们可以将其 比如我们有 我们希望临时存储它, 这是后进 换句话说,我可以保存某些 它还是编译器 方法之一, 变量也是 不过,让我们 堆栈位于 当我绘制一个 我要将零地址 将 在这里的某个 分配一些空间。 现在,很显然,它必须 然后,我将设置 以指向该位置。 我将定义堆栈 堆栈的顶部 我最近,上次 因此,如果我查看 该堆栈指针将最初 元素。 我将在这里 最初等于 R2 我将执行 那么,这是第一条 它的工作方式是, 它将递减四。 这是因为,您应该 是 或四个字节。 因此,为了腾出空间, 我将在该位置 因此,请记住, 我要将零 然后,我执行 它存储一,递减堆栈 进行存储。 第三条指令,使 然后在该位置使 因此,在任何给定的 都会指向数据,并且 最后入栈的数据。 因此,堆栈的顶部 入栈的数据。 但是,出栈按照 这是出栈。 现在,我要 因此,这现在也 第五条指令,弹出 R4 堆栈现在与 实现了平衡。 那么,三个入栈,三个 移动了一些数据。 再说一次,入栈指令 而出栈会首先 那么,再说一次, 当您在计算机上进行 实际看到的东西。 因此,在整个 都将讨论 它是一种用于 那么,具体而言, 如何定义和 这是一个函数。 它是一种用于 因此,如果我有大量的代码, 这是低级别的代码 而这是高级别代码。 那么,函数 这些点是伪操作, 这三个。 因此,当这执行时, 函数调用。 因此,该函数的 是函数调用, 在这里看到 我们将看到这是怎么工作的。 让我们来执行它。 第一条指令将 那么,在我的寄存器中, R0 第二条指令是 分支连接上会 然后,它要将连接 设置为返回地址, 返回地址是 那么,这里的 调用函数之后的指令 它插入到 然后,它将更改或 使其等于函数地址。 程序计数器在这里。 就是这样。 因此,要执行的 该指令,第三条指令。 我们以前看到过它。 它要将 因此,R1 那么,第三条 要获取该存储到 因此,我初始化 但这里有趣的是 构造,以及一条 BXLR,它基本上会 并将其放置到 但连接寄存器 这是程序计数器 因此,第六条指令将是 另一个子例程调用。 那么,让我们来执行它。 现在连接寄存器 程序计数器已 然后它将执行 10, 现在,这恰好是 这不是一个非常好的 但是它会返回一个介于 请注意,它使用了 它在 然后,它还将使用 因此,R0 但 实际上是子例程 它获取连接寄存器 计数器中。 因此,现在程序计数器 那么,第 它将存储值, 那一个中。 那么,现在我们使 现在,在第 随机数生成器, 将存储在这里。 现在,第 因此,我们在 那么,这里的重点是, 来降低复杂性, 并且我们将 来调用函数。 我们将使用 这是有关条件 这里的重点是,需要 还是有符号数。 由于我们有一组 基本而言,我们会 一个寄存器中。 我们将使用比较指令, 进行比较。 然后,我们将 如果该条件为真, 那么,这就是我们 再说一次,我们 存储到一个寄存器中,将某个 然后进行比较。 然后,我们可以 只要两侧都是 两个值都是有符号数, 我们使用循环 那么,在本例中, G1 不断地运行 有时,我们会将某个 那么,我们可以通过 在本例中,R4 我们将使 然后,我们将退出。 这就是我们将 总之,我们 概述了 我建议您打开 您的 是否还有什么不明白的地方。 在本次讲座中, 可以使您成为 重点是:需要考虑 太大而无法存储; 这会在除法或向右移位上 确保您了解您的 还是 随着我们继续学习, 因为这些指令专门 数字运行。 非常感谢,祝您 再说一次,在那里稍微深入 该汇编语言的某些部分。
大家好,
我是
我们将讨论
正如我上次说过的,
了解的越多,
计算机实际上
代码的,也就越有可能
系统工程师。
因此,即使您使用
我也认为您
或汇编级别了解
执行方式。
因此,我们要
Cortex
调试
让我们开始吧。
让我们从逻辑
正如您知道的,我们将
因此,如果我们以“1”结束,
如果我们以零结束,
这里的或运算
因此,如果我们与一执行
如果我们与零执行或运算,
我们将
或将两个不同
合并到一个值中。
我要讨论的
运算是异或。
因此,如果我与一执行异或
换句话说,如果我进行
异或运算,它将从一
如果我与零执行异或
那么,再说一次,我们
这里是汇编
这里是操作码。
这些是操作数。
这恰好是寄存器
具体而言,在这里,
都沿着这个方向执行。
换句话说,这里的
R1
并将结果放回到
您需要从这
我们也会在
这称为按位
那么,在本例中,
与
在这里,我有一些
已位于
可以看到会
它是按位发生的。
因此,如果您选择
让我们看看位八
我们会看到它将
以及
对齐,然后将该值
它会对全部
再说一次,逻辑运算
移位运算本质上
换句话说,向右
向左移位
但您需要了解的
一个事实,即您需要
无符号数还是
对您而言非常重要。
因为如果它是
您需要进行
零移位到这里,您
相反,如果它
那么您将在将其
最高有效位。
因此,了解该运算的
即您看到您具有
因此,我们将在对该
您应该知道您具有的
无符号数,这一点很重要。
当您向左移位时,
还是无符号数
我们将放入一个零。
再说一次,运算
因此,它会获取
将其右移多次,然后
寄存器中。
因此,我们将使用
执行乘和除。
这里的重点是,
您必须知道它
无符号数。
算术运算
我将获取两个
将它们相加。
P
但这里的问题是,
如果我获取该
另一个
这就导致了一种
可能无法重新
寄存器中,我可能会出错。
该错误
该情况会在加法
它实际上在
如果我获取一个
数字相乘,那么我
我得到
那么,这是一条
那么,当您编写您的
对该溢出情况的担忧时,
第一件事是,我们将
预测中间结果的
并确保该值
因此,这通常意味着
我们的输入的范围,并且
那么,例如,如果您知道
换句话说,我知道我的数字
我获取该数字,然后
我知道它可能达到的
这是它可能达到的最大值。
因此,理论上而言,
因此,我知道该数字
因此,如果我可以
知道该限制是
在理论上证明,
任何中间结果都
我们将用于解决
将其升级至
因此,我可能必须在
或者我可能必须获取
模式下执行它们。
因此,升级将
在该更高的
然后再将其降级回到原来的精度。
因此,您需要
数字的大小,
因为我们在该处理器结构中
当我们执行除法时,很显然,
另一个可能
称为掉出的问题,
此外,它还会在向右移位上
向右移位是除法。
基本而言,掉出
正如您看到的,
如果我获取数字
这在本质上
因此,我将丢失我的
因此,再说一次,我要
而导致灾难性的信息
灾难性的信息
除法或向右移位
就像移位、加法、
和除法一样,您
它是有符号数
使用一个有符号数
进行加、
是没有意义的。
因此,我们无法对两个
算术运算。
这没有任何意义。
基本而言,我们必须
更大的有符号数,
一起进行运算。
这是加法指令。
再说一次,它的
它获取第二个操作数,
将其与中间操作数
操作数进入这里。
请注意,在汇编级别,
进位标志会在发生
溢出
不幸的是,C
当我们执行加、
我们必须
或者我们必须
以防发生溢出。
当我们获取
指令。比较指令
但它不在
存储结果,
乘法和除法
先前已提到,
知道您的数字是
实际上,我们
用于无符号数/除法与
就像所有
该运算沿着
您可以看到它
因此,它获取
乘以该数字,然后
存储在该寄存器中。
这是前一个讲座中
访问变量的原理。
那么这位于
那么我在这里有一个
我在那里有
我们上次看到了
执行两个步骤。
第一步是
这是该指令。
这里是指针。
那么,这是指向
那么,这里的第一条
该
然后,我们可以使用
在本例中,
现在,我们
并除以五,
这里是乘法指令。
它获取
然后将结果存储回到
除法指令获取
除以
再说一次,我们看到用于
第一步是使一个
现在,该访问
因此它要将结果
总之,需要
总之,需要考虑它是
堆栈非常重要。
我们将在整个
我们可以将其
比如我们有
我们希望临时存储它,
这是后进
换句话说,我可以保存某些
它还是编译器
方法之一,
变量也是
不过,让我们
堆栈位于
当我绘制一个
我要将零地址
将
在这里的某个
分配一些空间。
现在,很显然,它必须
然后,我将设置
以指向该位置。
我将定义堆栈
堆栈的顶部
我最近,上次
因此,如果我查看
该堆栈指针将最初
元素。
我将在这里
最初等于
R2
我将执行
那么,这是第一条
它的工作方式是,
它将递减四。
这是因为,您应该
是
或四个字节。
因此,为了腾出空间,
我将在该位置
因此,请记住,
我要将零
然后,我执行
它存储一,递减堆栈
进行存储。
第三条指令,使
然后在该位置使
因此,在任何给定的
都会指向数据,并且
最后入栈的数据。
因此,堆栈的顶部
入栈的数据。
但是,出栈按照
这是出栈。
现在,我要
因此,这现在也
第五条指令,弹出
R4
堆栈现在与
实现了平衡。
那么,三个入栈,三个
移动了一些数据。
再说一次,入栈指令
而出栈会首先
那么,再说一次,
当您在计算机上进行
实际看到的东西。
因此,在整个
都将讨论
它是一种用于
那么,具体而言,
如何定义和
这是一个函数。
它是一种用于
因此,如果我有大量的代码,
这是低级别的代码
而这是高级别代码。
那么,函数
这些点是伪操作,
这三个。
因此,当这执行时,
函数调用。
因此,该函数的
是函数调用,
在这里看到
我们将看到这是怎么工作的。
让我们来执行它。
第一条指令将
那么,在我的寄存器中,
R0
第二条指令是
分支连接上会
然后,它要将连接
设置为返回地址,
返回地址是
那么,这里的
调用函数之后的指令
它插入到
然后,它将更改或
使其等于函数地址。
程序计数器在这里。
就是这样。
因此,要执行的
该指令,第三条指令。
我们以前看到过它。
它要将
因此,R1
那么,第三条
要获取该存储到
因此,我初始化
但这里有趣的是
构造,以及一条
BXLR,它基本上会
并将其放置到
但连接寄存器
这是程序计数器
因此,第六条指令将是
另一个子例程调用。
那么,让我们来执行它。
现在连接寄存器
程序计数器已
然后它将执行
10,
现在,这恰好是
这不是一个非常好的
但是它会返回一个介于
请注意,它使用了
它在
然后,它还将使用
因此,R0
但
实际上是子例程
它获取连接寄存器
计数器中。
因此,现在程序计数器
那么,第
它将存储值,
那一个中。
那么,现在我们使
现在,在第
随机数生成器,
将存储在这里。
现在,第
因此,我们在
那么,这里的重点是,
来降低复杂性,
并且我们将
来调用函数。
我们将使用
这是有关条件
这里的重点是,需要
还是有符号数。
由于我们有一组
基本而言,我们会
一个寄存器中。
我们将使用比较指令,
进行比较。
然后,我们将
如果该条件为真,
那么,这就是我们
再说一次,我们
存储到一个寄存器中,将某个
然后进行比较。
然后,我们可以
只要两侧都是
两个值都是有符号数,
我们使用循环
那么,在本例中,
G1
不断地运行
有时,我们会将某个
那么,我们可以通过
在本例中,R4
我们将使
然后,我们将退出。
这就是我们将
总之,我们
概述了
我建议您打开
您的
是否还有什么不明白的地方。
在本次讲座中,
可以使您成为
重点是:需要考虑
太大而无法存储;
这会在除法或向右移位上
确保您了解您的
还是
随着我们继续学习,
因为这些指令专门
数字运行。
非常感谢,祝您
再说一次,在那里稍微深入
该汇编语言的某些部分。
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
TI-RSLK 模块 3 - 讲座视频 - ARM Cortex M 组件
所属课程:TI-RSLK 模块 3 - ARM Cortex M
发布时间:2018.08.27
视频集数:3
本节视频时长:00:23:00
在该模块中你将开发并测试迷宫机器人可能会用于进行数值计算的汇编函数。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>