`
buluzhai
  • 浏览: 110186 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

不用分支指令计算一个整数的绝对值

阅读更多
分支指令的代价高,所以尽量避免使用。
跟r = (v < 0) ? -(unsigned)v : v相比,下面的指令数是差不多的,但是更快。


int v;           //找出v的绝对值
unsigned int r;  // 保存结果 
int const mask = v >> sizeof(int) * CHAR_BIT - 1;//CHAR_BIT是字节位数,一般为8

r = (v + mask) ^ mask;
//等价于
r = (v ^ mask) - mask;



分享到:
评论

相关推荐

    MIPSsim的指令系统.doc

    10. `BGEZ`指令是另一个条件分支指令,如果源寄存器中的数值大于或等于零,则执行转移。 这些指令只是MIPS指令系统的一部分,实际的MIPS汇编语言包含更多种类的指令,如比较、加载和存储内存、算术运算、逻辑运算、...

    计算机组成原理课设-设计一台嵌入式CISC模型计算机

    这个任务的核心是构建一个能够处理特定机器语言源程序的CPU,该程序的功能是读取一个包含五个有符号整数的数组M,并找出并输出其中最大负数的绝对值。下面我们将详细探讨相关的知识点。 1. **CISC架构**: CISC...

    c代码-4-3随堂求绝对值(if单分支)

    在这个场景中,我们将深入探讨如何使用if单分支语句来编写一个计算绝对值的函数。 首先,让我们了解绝对值的基本概念。在数学中,一个数的绝对值是指不考虑数的正负号,只保留其大小的值。例如,5的绝对值是5,-5的...

    Bit Twiddling Hacks

    #### 不使用分支结构计算整数绝对值 计算整数的绝对值通常需要使用条件语句或分支结构,但在某些情况下可以避免。一种方法是利用条件表达式和位运算的组合来实现:首先判断整数的符号,然后根据符号决定是否对整数...

    powerpc汇编指令集

    这个函数接收一个整数`s`,根据`s`的正负性决定返回`s`本身、它的绝对值还是`s`的8倍。 - `10000414:7c601b79 mr.r0,r3`:这里使用`mr`指令将r3的值复制到r0中,随后通过`cmp`指令比较r0的值与0的大小关系,并将...

    各种快速位运算算法 算法优化

    * 分支预测:通过预测分支结果来减少分支指令的执行次数。 * 指令级并行处理:通过并行执行多条指令来提高计算效率。 * 查表法:通过预先计算和存储结果来加速计算。 * loop unrolling:通过循环展开来减少循环的...

    计算机科学丛书:计算机组成原理 [英] 艾伦·克莱门茨(Alan Clements)(2017.3出版)

    3.9.1 计算绝对值 141 3.9.2 字节操作与拼接 141 3.9.3 字节逆转 142 3.9.4 乘以2n-1或2n+1 142 3.9.5 多条件的使用 143 3.9.6 只用一条指令 143 3.9.7 实现多段程序 143 3.9.8 简单位级逻辑操作 144 3.9.9 十六进制...

    PowerPC指令集学习

    PowerPC指令集是基于RISC(精简指令集计算)架构的一种处理器指令集,由IBM、Motorola和Apple联合开发,最初应用于Apple的Power Macintosh系列计算机。它在高性能计算、嵌入式系统以及游戏主机等领域都有广泛的应用...

    MIPS32指令集

    MIPS32指令集按照功能和用途可以分为多个类别,每个类别包含一系列具体的指令。 #### 空操作(No-operation) - **nop**: 该指令不执行任何操作,主要用于填充指令序列,以确保至少消耗一个时钟周期。这对于实现...

    Matlab的函数及指令FunctionsandCommands.pdf

    - ans:Matlab中的一个特殊变量,用于存储上一次计算的结果。 - any:测试数组中是否至少有一个非零元素。 - argnames:用于获取函数句柄参数名的函数。 - axis:设置坐标轴的属性,如范围和刻度。 - bar:生成垂直...

    TMS320DM642 INSTRUCTION SET

    ABS 指令用于计算一个寄存器中存储的有符号整数的绝对值,并将结果存储在指定的目的寄存器中。此指令支持饱和操作,即如果结果超出目标寄存器所能表示的最大或最小值,则将其设置为最大或最小值。 **格式:** ``` ...

    MD00086-2B-MIPS32BIS-AFP-6.06(指令集详细描述).pdf

    - `ABS.fmt`:绝对值指令,用于计算浮点数的绝对值。 - `ADD`:加法指令,用于整数加法操作。 - `ADDI`:加法立即数指令,用于将寄存器中的值与立即数相加。 - `AND`:逻辑与指令,用于执行按位逻辑与操作。 ...

    数控车技能提升资料汇编:11宏指令H代码.pdf

    在本篇资料中,首先介绍了基础的数学运算宏指令,例如G65H01定义和置换,可以将一个数值赋给另一个变量;G65H02至G65H05分别对应加法、减法、乘法和除法运算,允许程序员进行简单的算术运算。例如,#i=#j表示将变量j...

    计算机组成原理课设.doc

    在此案例中,程序需要接收5个8位二进制补码表示的有符号整数,找出最大负数并计算其绝对值,然后输出。 4. **符号标志位**(SF):在计算过程中,符号标志位用于记录运算结果的正负状态。例如,SF置1表示结果为负,...

    Matlab 常用指令一览表

    - **abs**:计算一个数值、向量或矩阵的绝对值(对于复数,则是其模)。例如,`abs(-5)` 返回 5。 - **acos/acosd**:分别计算弧度制和角度制下的反余弦函数值。 - **acosh**:计算双曲反余弦值。 - **acot/...

    微机原理程序.pdf

    最后,我们有一个处理带符号数据的分支程序,计算数据的绝对值。程序: 1. 检查数据的符号位(TEST AL, 80H),如果为0(表示正数),则跳过下一步(JZ NEXT)。 2. 如果数据为负,使用 NEG 指令取其相反数(NEG AL...

    汇编语言实例

    1. **求若干十进制数平均值**:这个实例可能涉及到读取用户输入的一系列整数,存储在内存中,然后进行加法运算求和,最后除以数字个数得到平均值。在这个过程中,需要理解寄存器的使用、内存地址操作以及数据类型的...

Global site tag (gtag.js) - Google Analytics