由于操作码和操作数的无效组合,无法向右移位

时间:2014-09-03 12:33:08

标签: assembly x86 nasm

section .data
shiftrightvalue db 4                     ; initialize shiftrightvalue to 4

section .bss

section .text
    global _start
    _start:
        mov ebx, 1111_1111b             ; copy 255 into ebx
        shr ebx, [shiftrightvalue]      ; shift the number in ebx 4 bits to the right to return the number 15 with the exit system call. ebx serves as the exit return value

    mov eax, 1                          ; specify linux system exit call
    int 80h                             ; execute the sys_call

但是,如果我想要这样做,我会收到以下错误:

error: invalid combination of opcode and operands

它指的是shr ebx,[shiftrightvalue]行。如果我删除方括号它的工作,虽然在我看来,这也不是真的"好"代码,因为如果我删除方括号,我会收到以下消息:

relocation truncated to fit: R_386_8 against `.data'

但是,如果我做了回声$?"我得到15.就像我想要的那样。 我在这里做错了什么或者这里发生了什么?我只想将值向右移4位,据我所知,我需要使用方括号[]来获取shiftrightvalue的值4,否则我只得到shiftrightvalue的地址,那不是我的意思想。

1 个答案:

答案 0 :(得分:5)

指令SHR r32, m8不存在。如果您想要移动可变数量,则需要使用CL寄存器,如:

mov cl,[shiftrightvalue]
shr ebx,cl