【发布时间】:2020-04-24 23:26:26
【问题描述】:
我正在为一个类开发一个 NASM 项目,当我尝试将寄存器值移动到内存地址时,我一直遇到问题。我有一个更长的文件,但下面的代码重新创建了相同的情况和结果
section .text
global _start
_start:
mov esi, x
add esi, 2
mov [x], esi
section .data
x equ 2
运行此代码时(使用https://www.jdoodle.com/compile-assembler-nasm-online/ 的编译器),它会返回“命令由信号11 终止”消息。问题似乎出在“mov [x],esi”行。有人可以解释这个问题是什么,我该如何纠正它?粗略的谷歌搜索表明这是因为我溢出了地址 [x],但我不确定如何处理该信息。
【问题讨论】:
-
你认为
mov [x], esi被执行后会发生什么? -
另外:我建议避免使用在线汇编器来学习汇编。如果您不在自己的系统上运行代码,调试会困难得多。让自己获得 Linux 并从中学习。
-
@fuz,指示的重复并不是真正的问题。问题出在 mov 指令中。 (但是,如果 mov 指令没有出错,那么您将在副本中遇到问题。)
-
@prl 那么...不应该在累死的时候回答问题...
-
former duplicate 可能仍然值得一读,因为在修复当前导致程序崩溃的问题后,这将成为问题。你写的是
x equ 2而不是x dd 2。