Debugging 汇编代码构造
我的问题是一项学术任务我被分配了: 在此程序片段之后,Debugging 汇编代码构造,debugging,assembly,x86,masm,cpu-registers,Debugging,Assembly,X86,Masm,Cpu Registers,我的问题是一项学术任务我被分配了: 在此程序片段之后,edx的内容是什么: linie dd 421, 422, 443 dd 442, 444, 427, 432 ---------------- mov esi, (OFFSET linie)+4 mov ebx, 4 mov edx, [ebx][esi] 我有两个问题: mov-edx、[ebx][esi]的含义是什么 调试程序后,为什么我的edx中有000001bb 首先,mov-ed
edx
的内容是什么:
linie dd 421, 422, 443
dd 442, 444, 427, 432
----------------
mov esi, (OFFSET linie)+4
mov ebx, 4
mov edx, [ebx][esi]
我有两个问题:
mov-edx、[ebx][esi]
的含义是什么edx
中有000001bb首先,
mov-edx、[ebx][esi]
的意思与mov-edx、[ebx+esi]
的意思相同-它指的是地址的存储单元,即总和
ebx
和esi
寄存器的
完成程序后,edx
注册表中将有443个(1bb
十六进制)。首先,我们注意到在linie
中定义了dwords
这是32位字
mov esi, (OFFSET linie)+4 ;sends the adress of the begining of the linie
;area plus 4 bytes(32 bits)
; the esi will point to 422 in the linie array
mov ebx, 4 ;simple asigning 4 to ebx
mov edx, [ebx][esi] ;move the content of a memory cell of
;adress 4+ the adress of 422
; in other words - move the third element of the
;linie array to edx.
这将从
[ebx+esi]
读取值,即[linie+4+4]
。对应于linie
的第三个元素(因为每个元素都是DWORD
,在x86上是4个字节),这个元素是443 decimal==0x1bb十六进制。好的,我们怎么知道+4指的是字节而不是DWORD?这就是它的构造方式-内存单元是字节,因为地址和偏移量总是以1字节的粒度指定。这是一个很好的问题:)符号[reg][reg]不太常见这是家庭作业。你应该做更多的研究。看起来这个特别的霍姆作业是去年发布的,可能是其他学生在上一课程中分配了这个任务:/
mov esi, (OFFSET linie)+4
mov ebx, 4
mov edx, [ebx][esi]