如何在Assembly中正确编写字节数组?

时间:2014-10-19 21:48:29

标签: c arrays assembly nasm

我需要编写一个字节数组但是我没有得到它,只写[matrix + 0][matrix + 1](我的意思是,EAX应该等于0301070F),我做错了什么?

这是我的代码:

%include "asm_io.inc"
segment .data
    matrix times 4 db 0

segment .bss

segment .text

  global asm_main

asm_main:
    enter 0,0
    pusha
    mov eax, 0

    mov dword [matrix + 3], 15
    mov dword [matrix], 3
    mov dword [matrix + 1], 1
    mov dword [matrix + 2], 7

    mov ah, [matrix]
    mov al, [matrix + 1]
    rol eax, 16
    mov ah, [matrix + 2]
    mov al, [matrix + 3]

    dump_regs 1

  popa
  mov eax, 0
  leave
  ret

这是dump_regs 1

的输出
Register Dump # 1
EAX = 03010000 EBX = B774FFF4 ECX = BFF7C924 EDX = BFF7C8B4
ESI = 00000000 EDI = 00000000 EBP = BFF7C868 ESP = BFF7C848
EIP = 080484D8 FLAGS = 0282       SF   

来电者是一个简单的C程序:

int main() {
  int ret_status;
  ret_status = asm_main();
  return ret_status;
}

编辑: 我在这里发现了一些错误,如果我执行此代码,一切正常:

    mov dword [matrix], 3
    mov dword [matrix + 1], 1
    mov dword [matrix + 2], 7
    mov dword [matrix + 3], 15

但如果我执行此操作,则无效:

    mov dword [matrix + 3], 15
    mov dword [matrix], 3
    mov dword [matrix + 1], 1
    mov dword [matrix + 2], 7

为什么?

1 个答案:

答案 0 :(得分:3)

已经有一段时间了,但不应该

  mov dword [matrix], 3

更像是

  mov byte [matrix], 3

以避免常量3被视为32位值?