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]