我初学汇编,我在写linux下的c语言汇编发现一个问题,没搞懂
在linux64下,long型为8字节,想使用movq指令将定义的变量存进寄存器,但发现结果不对,查看内存发现好像是存的是4字节,所以movq指令存了错误的数
#(V – (X * Y + Z -540)) /X
.data
X : .long 200
Y : .long 500
Z : .long 400
V : .long 790
.text # 代码段声明
.global _start # 指定入口函数
_start:
#X*Y
movq Y, %rax
movq X, %rbx
imulq %rbx
#?+Z
movq Z, %rcx;
addq %rax, %rcx
#?-540
movq $540, %rax
subq %rax, %rcx
#V-?
movq V, %rax
subq %rcx, %rax
#?/X
movq $0xffffffffffffffff, %rdx #将%edx初始化为符号
idivq %rbx
movl $0,%ebx # 参数一:退出代码
movl $1,%eax # 系统调用号(sys_exit)
int $0x80 # 调用内核功能
我也尝试写了个.c文件汇编成.s文件,但太长了看不懂,我猜测是有什么指令会根据系统把long变成8位吗,等大佬
long不一定是8字节