当前位置: 首页 > wzjs >正文

柳市那些做网站的公司下载百度导航最新版本

柳市那些做网站的公司,下载百度导航最新版本,外包网站开发哪家好,有关网站开发的知识ASMbits--常用算术运算指令 1 基本运算算术指令--最基础1.1 加法和减法1.2 移位操作1.3 乘法 2 practice2.1 编写invert(int n)2.2 编写judge_odd(int n)2.3 计算绝对值abs(int n)2.4 add(int n1, int n2)函数2.4 shift寄存器2.5 sihft ath right2.6 shift left 在ARMv7汇编中&…

ASMbits--常用算术运算指令

  • 1 基本运算算术指令--最基础
    • 1.1 加法和减法
    • 1.2 移位操作
    • 1.3 乘法
  • 2 practice
    • 2.1 编写invert(int n)
    • 2.2 编写judge_odd(int n)
    • 2.3 计算绝对值abs(int n)
    • 2.4 add(int n1, int n2)函数
    • 2.4 shift寄存器
    • 2.5 sihft ath right
    • 2.6 shift left

在ARMv7汇编中,代码片段:

1: b 1b	//Done

作用是创建一个无限循环,使程序永远停留在当前位置,不在执行后续命令;

语法解释:

  • 1::这是一个局部标签(local label)。在 ARM 汇编中,以数字开头的标签(如 1:)是局部标签,可以通过 b 1b 或 b 1f 引用。
    1b:表示向后查找最近的 1: 标签(Backward)。
    1f:表示向前查找最近的 1: 标签(Forward)。

  • b 1b:这是一个分支指令(Branch),跳转到最近的 1: 标签(向后查找)。由于标签 1: 就在当前行,这条指令会无限循环跳转到自身。

代码 1: b 1b 的作用是让程序在当前位置无限循环,防止后续未定义代码的执行。这是裸机编程或嵌入式系统中常见的“安全终止”方法。
具体在裸机程序(无操作系统)或嵌入式系统中,这种无限循环常用于:

  • 防止程序执行到未定义的内存区域(例如代码结束后未初始化的内存)。
  • 保持程序在完成所有任务后“挂起”(例如在调试时观察结果);

1 基本运算算术指令–最基础

1.1 加法和减法

  • ADD 加法
    语法:ADD{条件}{S} 目标寄存器, 操作数1, 操作数2
    功能:将操作数1和操作数2相加,结果存入目标寄存器。
ADD R0, R1, R2     @ R0 = R1 + R2
ADD R3, R4, #10    @ R3 = R4 + 10
  • SUB减法
    语法:SUB{条件}{S} 目标寄存器, 操作数1, 操作数2
    功能:从操作数1中减去操作数2,结果存入目标寄存器。
SUB R0, R1, R2     @ R0 = R1 - R2
SUB R3, R4, #5      @ R3 = R4 - 5

1.2 移位操作

  • LSL逻辑左移
    语法:LSL{条件}{S} 目标寄存器, 操作数, 移位位数
    功能:将操作数左移指定位数,低位补零。
LSL R0, R1, #4      @ R0 = R1 << 4
  • LSR逻辑右移
    语法:LSR{条件}{S} 目标寄存器, 操作数, 移位位数
    功能:将操作数右移指定位数,高位补零。
LSR R0, R1, #3      @ R0 = R1 >> 3(无符号)
  • ASR(算术右移)
    语法:ASR{条件}{S} 目标寄存器, 操作数, 移位位数
    功能:将操作数右移指定位数,高位补符号位(用于有符号数)
ASR R0, R1, #2      @ R0 = R1 >> 2(保留符号)
  • ROR循环右移
    语法:ROR{条件}{S} 目标寄存器, 操作数, 移位位数
    功能:将操作数循环右移指定位数,移出的位补到高位。
ROR R0, R1, #8      @ R0 = R1 循环右移8位

1.3 乘法

  • MUL无符号乘法
    语法:MUL{条件}{S} 目标寄存器, 操作数1, 操作数2
    功能:操作数1 × 操作数2,结果低32位存入目标寄存器。
MUL R0, R1, R2     @ R0 = (R1 × R2) 的低32位
  • MIL乘加
    语法:MLA{条件}{S} 目标寄存器, 操作数1, 操作数2, 操作数3
    功能:操作数1 × 操作数2 + 操作数3。
MLA R0, R1, R2, R3  @ R0 = (R1 × R2) + R3

2 practice

2.1 编写invert(int n)

Write a function that returns the bitwise inversion of its parameter.
int invert (int n);

.global _start
_start:mov r0, #1bl invert1: b 1b    // Done.global invert
invert:MVN r0,r0  // MVN把R0里面的数取反然后再进行存储BX lr	//return caller

2.2 编写judge_odd(int n)

算法:最低位是0还是1,若是1则odd为1,若是为0,则odd为0;如何获得最低位呢,直接使用n & 1;
Steps:

  1. 将r0与1进行AND操作,结果存在某个寄存器,比如r0本身。
  2. 然后比较这个结果是否为0,如果不为0,则返回1,否则返回0。
.global _start
_start:mov r0, #1bl odd1: b 1b    // Done.global odd
odd:AND r0,r0,#1BX lr

2.3 计算绝对值abs(int n)

算法:进制补码中,负数的符号位是1,正数或零是0。所以,如果我能得到符号位的掩码,可能可以用异或和减法来计算绝对值。比如,对于n,如果符号位是0,那么绝对值是n本身;如果符号位是1,绝对值是~n + 1。或者用另一种方法:将n与符号位的掩码异或,然后减去掩码。这可能更高效。
步骤:

  1. 将n算术右移31位,得到mask(0或-1)。
  2. 异或n和mask,得到n ^ mask。
  3. 减去mask,即(n ^ mask) - mask。因为mask是0或-1,当mask是-1时,减法相当于加1。
.global _start
_start:mov r0, #10bl abs1: b 1b    // Done.global abs
abs:ASR r1, r0, #31	// r1 = n>>31 to generate maskEOR r0, r0, r1		// r0 = n ^ maskSUB r0, r0, r1		// r0 = r0 - maskBX lr

2.4 add(int n1, int n2)函数

即第一个参数传递给R0,第二个参数传递给R1;

.global _start
_start:mov r0, #1  // First function parameter is always passed through r0.mov r1, #1  // Second function parameter is always passed through r1.bl add      // Return value is always in r0.1: b 1b     // Done.global add
add:ADD R0,R0,R1BX LR

2.4 shift寄存器

即将该参数移位到24位,低8位;

.global _start
_start:ldr r0, =0x12345678bl shiftb _start        // End of testing code// Convert one U32 sample to U8 format
shift:LSR r0,r0,#24	//将输入参数 r0 右移24位,保留高8位到低8位BX lr

2.5 sihft ath right

// A test case to test your function with.global _start
_start:ldr r0, =0x40000bl shiftb _start        // End of testing code// Return 1/4 amplitude for a S32 sample
shift:ASR r0,r0,#2	//算数右移BX lr

2.6 shift left

// A test case to test your function with.global _start
_start:ldr r0, =0x1234bl shiftb _start        // End of testing code// Convert one S16 to S32 format
shift:LSL R0,R0,#16	// left shift 16BX lr

以上是ARMv7汇编语言的常见算术指令运算;

http://www.dtcms.com/wzjs/398702.html

相关文章:

  • 二手车网站怎么做域名查询138ip
  • 李连杰做的功夫网站沈阳seo排名优化推广
  • 新网站应该怎么做可以排名靠前免费的郑州网络推广服务
  • 《网页设计与网站建设》在线测试重庆seo网络优化咨询热线
  • 逻辑图在线制作网站文库百度登录入口
  • 做网站多少太原网站推广排名
  • phpcms 网站栏目宁德市医院
  • 怎样能创建一个网站百度搜索风云榜小说
  • 自己做网站需要固定ip吗网络营销策划方案范文
  • 做网站应该考虑哪些问题北京官方seo搜索引擎优化推荐
  • vr全景网站开发制作营销广告
  • 免费做爰小说网站小红书软文案例
  • 杭州网站建设 网站设计编程培训
  • 做国际贸易都用什么网站所有代刷平台推广
  • 高职高专图书馆网站建设互联网培训
  • 贵阳网站建设搜王道下拉云南seo简单整站优化
  • ai特效字体网站百度注册网站
  • 做网站的步骤 主题网络营销和传统营销的区别
  • 做58同城这样的网站关于市场营销的培训课程
  • 做淘宝头像的网站有哪些百度推广怎么收费标准
  • 做地方网站赚钱吗搜索引擎优化seo公司
  • 网站优化推广公司推荐免费推广广告链接
  • 郑州网站推广价格信息佛山seo优化外包
  • 计算机网络技术电商网站建设与运营方向互动营销案例100
  • 做网站需要什么营业执照知识营销成功案例介绍
  • wordpress iis8.5seo排名查询软件
  • 交互网站怎么做大学生网页设计主题
  • 网站建设多少钱专业互联网推广好做吗
  • 无锡优化网站费用如何注册一个自己的网站
  • 中企动力销售好处单吗网页seo优化