有符号数 2 可以使用算术运算类指令有哪些右移指令 SAR 实现。

3.2.2 算术运算类指令有哪些运算指令 算术运算类指令有哪些运算 对数据进行加减乘除 基本的数据处理方法 加减运算有“和”或“差”的结果外还有进借位、溢出等状态标志,也是结果的一部分 注意算术运算类指令有哪些运算类指令对标志的影响 算术运算类指令有哪些运算的溢出问题 加减法指令不区分无/有苻号数,但注意: 操作数必须同是无符号数或同是有符号数 无/有符号数的运算结果是否溢出,判断方法是不同的 1 加法指令 加法指令 ADD 带進位加法指令 加1指令INC(单操作数指令) 2. 减法指令 减法指令 SUB 带借位减法指令 SBB 减量指令 DEC 求补指令 NEG 比较指令 CMP 除DEC不影响CF标志外 其他按定义影响全部狀态标志位 (1) (不考虑借位的)减法指令SUB (2) 带借位的减法指令SBB (3) 减1指令DEC (4)求补指令 NEG 对操作数执行求补运算,即用零减去操作数 NEG reg/mem ; Left) 逻辑右移指令 SHR(Shift Right) 算術运算类指令有哪些/逻辑左移 SHL / SAL指令 算术运算类指令有哪些右移SAR指令 逻辑右移SHR指令 算术运算类指令有哪些移位——把操作数看做有符号数; 邏辑移位——把操作数看做无符号数 移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位 影响C,P,S,Z,O标志。 結果未溢出时: 左移1位≡操作数×2 右移1位≡操作数÷2 例:把AL中的数x乘10 因为10=8+2

}

? 用C/C++编程实现输入一个带符号十進制数显示其原、反、补三种机器数左、右移2位的结果

机器字长全部假设为 8 位,只讨论整数后不再特殊说明

? 对于带符号数的移位运算,符号位不变只改变数值位,移位又分为左移和右移左移一位相当于该数乘以 2,右移一位相当于该数除以 2

? 对于正数:左移或右移符号位不变,数值位中移出位丢弃,空出位补 “0”

? 对于负数:左移或右移符号位不变,数值位中移出位丢弃,空出位补 “0”

? 總结:甭管正负补 “0” 就对了

?(丢了符号位后面的 1,最后面补了个 0)右移 1 位的结果是 ?(丢了最后面的 0,符号位后面补了 0)

? 对于正数:左移或右移符号位不变,数值位中移出位丢弃,空出位补"0"([X] ?嘛原码补"0"我反码也补"0")

? 对于负数:左移或右移,符号位不变數值位中,移出位丢弃空出位补"1"(既然原码负数都补"0",造反的反码肯定都补"1")

? 总结:正补"0"负补"1"

?(丢了符号位后面的 1最后面补了个 1),右移 1 位的结果是 ??(丢了最后面的 0符号位后面补了 1)

? 正负数由符号位决定,如 X = -0[X] ? = 00000000,我们也把它当正数(嗯数(字)奸(细))

? 对于正數:左移或右移符号位不变,数值位中移出位丢弃,空出位补"1"([X] ?嘛原码补"0"我补码也补"0")

? (还记得补码和原码的关系吗,当 X < 0[X] ? 自低位向高位,尾数的第一个 1 及其右边的 0 保持不变左位的各位取反)

? 对于负数:当左移时,符号位不变数值位中,空出位在最祐边肯定算在最低位中,补"0"妥妥的当右移时,符号位不变空出位在(除符号位)最左边,因为已经除去 -0 这个数奸所以中间至少会遇到一个 1,所以空出位补"1"

? 总结:正数补"0",负数左移补"0"右移补"1"

?(丢了符号位后面的 1最后面补了个 0),右移 1 位的结果是 ??(丢了最后媔的 0符号位后面补了 1)

  1. 检查输入是否合法,即第一个输入为"+“或”-"其后输入为数字

? 由准备工作准备好的 int 类型的数字直接转换为二进制,不过要注意两点一是当数字为 0 时,取不到值这时我们自己手动添个 0 上去,二是当数字为负数时结果就很迷…解决方法是用其他变量来取数字的绝对值

? 原码左移符号位不变,数值位前两位被挤掉后两位补 0,即截取符号位和后 5 位末尾补 0;右移符号位不变,数值位朂后两位被挤掉前两位补 0,即原码第一位后补 0

? 同原码不过要判断符号位,如果是负数补 1

? 同原码,也要判断符号位如果是右移,且是负数补 1


}

我要回帖

更多关于 算术右移指令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信