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'
但是,如果我执行“ echo $?”我得到15。
我在这里做错什么或这里发生了什么事?我只想将值右移4位,据我所知,我需要使用方括号[]来获取shiftrightvalue的值4,因为否则我只会得到shiftrightvalue的地址,而这不是我所需要的想。
最佳答案
指令SHR r32, m8
不存在。如果要移位可变量,则需要使用CL
寄存器,如下所示:
mov cl,[shiftrightvalue]
shr ebx,cl