我知道这有点迟钝,但我无法弄清楚。我正在调试这个:grdb不工作变量
xor eax,eax
mov ah,[var1]
mov al,[var2]
call addition
stop: jmp stop
var1: db 5
var2: db 6
addition:
add ah,al
ret
我在地址var1和var2上找到的数字是0x0E和0x07。我知道它没有分割,但这不是它做这样的冒险的理由,因为加法调用工作得很好。你能向我解释我的错误在哪里?
我看到问题,不知道如何解决它虽然。事情是,由于某种原因,指令指针从0x100开始,所有的段寄存器在0x1628。为了解决使用的组合的指令,我猜[cs:ip](片段寄存器和指令指针之一)。偏移到Var1为0x10的(因为它是为了在0x10th字节代码的开头可能),我试图检查内存和我得到的是:
1628:100 8 bytes
1628:108 8 bytes
1628:110 <- wtf? (assume another 8 bytes)
1628:118 ...
什么招数都存在于存储器[ cs:var1]指向别处,而不是在我的代码中,这可能是标签.data通常用于处理ds的地方....可能..我不知道1628应该是什么:10
好的,我发现了什么导致了屁股,并浪费了我整个他妈的一天。上述行为是正确的,代码是完全正常的。我不知道的是grdb调试器由于某种原因将开始地址设置为0x100 ......溶剂是在第一行插入指令ORG 0x100,这就是整个事情。代码正在工作,因为指令指针对第一条指令有正确的地址并且一个接一个地执行,但是你的汇编程序不知道你的程序存储了什么有效地址,所以它相对于代码的第一行仍然相当多,这意味着所有变量(如果不使用数据段的标签)将保持指向,就像它从0x0开始一样。这当然不适用于DOS。 grdb显然模拟了一些DOS功能...为语言而努力,为每个人努力,希望如果出现同样的问题,这将会让别人的时间空余...
heheh ..至少现在我知道为什么要使用.data部分:))))
我不明白“escapade”发生了什么?你没有描述这个问题:你看到了什么你期望的。 – Andrey 2010-03-15 17:18:48
我认为[var1]和[var2] – Pyjong 2010-03-15 17:21:37
的值为5和6,所以尝试var1而不是[var1] – Andrey 2010-03-15 17:25:15