Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 从向寄存器添加常量获取地址_Assembly_X86 64 - Fatal编程技术网

Assembly 从向寄存器添加常量获取地址

Assembly 从向寄存器添加常量获取地址,assembly,x86-64,Assembly,X86 64,好的。我的任务是这样的:%edx寄存器的值为0xe000,%ecx寄存器的值为0x200。写下根据以下公式计算的地址: 0x10(%edx) (%edx,%ecx) (%edx,%ecx,4) 0x8(,%ecx,2) 我知道在第一个示例中它应该是0x10+0xe000,在第二个地址中它应该是0xe000+0x200等等。但是当我想用汇编程序测试自己时,它不起作用(抛出分段错误(堆芯转储): 这是例如nr 1。我做错了什么?(Manjaro 64位)您没有打印地址,您正在尝试从内存打印值,但由于

好的。我的任务是这样的:
%edx
寄存器的值为
0xe000
%ecx
寄存器的值为
0x200
。写下根据以下公式计算的地址:

  • 0x10(%edx)
  • (%edx,%ecx)
  • (%edx,%ecx,4)
  • 0x8(,%ecx,2)
  • 我知道在第一个示例中它应该是
    0x10+0xe000
    ,在第二个地址中它应该是
    0xe000+0x200
    等等。但是当我想用汇编程序测试自己时,它不起作用(抛出
    分段错误(堆芯转储)


    这是例如nr 1。我做错了什么?(Manjaro 64位)

    您没有打印地址,您正在尝试从内存打印值,但由于没有出现故障的有效指针。请使用
    leal 0x10(%edx),%esi
    相反。天哪,
    leax
    代表加载有效地址x,我应该自己找到它。谢谢!您不是在打印地址,您是在尝试从内存打印值,但由于没有出现故障的有效指针。请使用
    leal 0x10(%edx),%esi
    相反。天哪,
    leax
    代表加载有效地址x,我应该自己找到的。谢谢!
    .section .rodata
    .LC0:
        .string "%d"
        .text
        .globl main
        .type main, @function
    
    main:
        pushq %rbp
        movq %rsp, %rbp
        movl $0xe000, -4(%rbp)
        movl $0x200, -8(%rbp)
        movl -4(%rbp), %edx
        movl -8(%rbp), %ecx
        movl $.LC0, %edi
        movl 0x10(%edx), %esi
        movl $0, %eax
        call printf
        movl $0, %eax
        leave
        ret