使用机器代码/汇编语言将二进制字符串向右移动

时间:2015-10-27 23:41:42

标签: assembly lc3

据我所知,向左移动15次会将二进制序列向右移动一次。但是,在设置初始寄存器值后,如果寄存器1等于1;程序提供了正确的解决方案。存储在寄存器1中的任何更大的内容都会导致程序提供错误的解决方案。我正在使用LC-3;这是我的bin文件代码:

0011000000000000        ; Orig
0010000011111111        ; R0 <- mem[x3100]
0010001011111111        ; R1 <- mem[x3101]
0101010010100000        ; R2 <- R2 AND #0
0001001001100000        ; R1 <- R1 + #0
0000010000001101        ; BRz R1
0001010010101111        ; R2 <- R2+15
0000010000001001        ; BRz R2
0001000000100000        ; R0 = R0 + #0
0000100000000011        ; BRn
0001000000000000        ; R0 <- R0+R0
0001010010111111        ; R2--
0000111111111010        ; BRnzp PCOffset
0001000000000000        ; R0 <- R0 + R0
0001000000000001        ; R0 <- R0 + #1
0001010010111111        ; R2--
0000111 111110110       ; BRnzp PCOffset
0001001001111111        ; R1--
0000 111 111110001      ; BRnzp PCOffset
0011 000 011101111      ; St R0 -> mem[x3102]
1111000000100101        ; Halt

1 个答案:

答案 0 :(得分:4)

找到了给您带来麻烦的代码行

0001000000000001        ; R0 <- R0 + #1

这不是向R0添加1,而是实际将R1添加到R0。

0001000000000001        ; R0 <- R0 + R1

您需要用以下内容替换该行:

0001000000100001        ; R0 <- R0 + #1

你错过了添加立即位[5]。