注册 登录
编程论坛 汇编论坛

一道逻辑移位指令SHL/SHR题,求解

水浙江雪 发布于 2015-01-12 13:23, 4992 次点击
VAR1    EQU    BYTE  PTR  VAR2
VAR2    DW        0ABCDH

SHL      VAR1,l
SHR      VAR2,1
上述两条指令执行后,VAR2 字存储单元内容是( C  )
A.0ABCDH                    B.0AB9A H      
C.55CDH                        D.559AH
分析:0ABCDH = 1010 1011 1100 1101
SHL             0101 0111 1001 1010
SHR             0010 1011 1100 1101
                 2BCDH
不是应该为2BCDH吗,怎么算出55CDH的?
7 回复
#2
水浙江雪2015-01-12 13:42
还是因为答案有问题
#3
wmf20142015-01-12 14:00
ABCDH
1010 1011 1100 1101
右移一位
 0 1010 1011 1100 110 1
0101 0101 1110 0110
结果
55E6H,不再答案中,var1怎么移都不相干吧。
#4
wp2319572015-01-12 14:08
我算是55E6 我感觉第一条指令并不影响第二条指令  所以abcd右移一位 55e6 55cd就不知道咋回事了
#5
水浙江雪2015-01-12 14:22
回复 3楼 wmf2014
恩恩,谢谢
#6
水浙江雪2015-01-12 14:23
回复 4楼 wp231957
嗯,第一条指令不影响第二条,谢谢
#7
取名字2015-05-05 21:22
以下是引用水浙江雪在2015-1-12 13:23:14的发言:

VAR1    EQU    BYTE  PTR  VAR2  
VAR2    DW        0ABCDH  
┇  
SHL      VAR1,l
SHR      VAR2,1
上述两条指令执行后,VAR2 字存储单元内容是( C  )  
A.0ABCDH                    B.0AB9A H      
C.55CDH                        D.559AH
分析:0ABCDH = 1010 1011 1100 1101
SHL             0101 0111 1001 1010
SHR             0010 1011 1100 1101
                 2BCDH
不是应该为2BCDH吗,怎么算出55CDH的?
答案是正确的。这题的关键在于“VAR1 EQR BYTE PTR VAR2”,“BYTE”说明“VAR1”指向的是“VAR2”的低字节部分,而不是指向整个字,所以“SHL    VAR1,1”是将“VAR2”低字节部分“0CDH”向左移一位,结果为“1001 1010B”(9AH),而“SHR    VAR2,1”则是将整个字向右移一位,此时“VAR2”中的值是“0AB9AH”,整体右移一位,结果为“0101 0101 1100 1101B”,十六进制表示就是“55CDH”,所以答案是正确的。
#8
zhulei19782016-04-14 16:25
以下是引用取名字在2015-5-5 21:22:42的发言:

答案是正确的。这题的关键在于“VAR1 EQR BYTE PTR VAR2”,“BYTE”说明“VAR1”指向的是“VAR2”的低字节部分,而不是指向整个字,所以“SHL    VAR1,1”是将“VAR2”低字节部分“0CDH”向左移一位,结果为“1001 1010B”(9AH),而“SHR    VAR2,1”则是将整个字向右移一位,此时“VAR2”中的值是“0AB9AH”,整体右移一位,结果为“0101 0101 1100 1101B”,十六进制表示就是“55CDH”,所以答案是正确的。


1