从参数复制到数组

Copying from arguments to array

我正在尝试将第二个参数复制到声明为的数组: .bss X: resb 20

我不知道该如何处理。这是我的尝试:

参数以终止 (0x0) 字符结束。

%include "asm_io.inc"
global asm_main

section .data

section .bss
  temp: resd 1
  i: resd 1
  X: resb 20

  length: resd 1 ; length of input

section .text

asm_main:
  enter 0, 0
  pusha

  mov ebx, dword [ebp+12]
  mov esi, dword [ebx+4]
loop: lodsb
  ; end of string?
  or al, al
  jz endloop

  ; copy arg[1] to x ================
  mov temp, X         ;error; temp = address of X 
  add temp, dword [i] ;error; temp += i
  mov byte [temp], al ;     ; temp[i] = al
  add dword [i], 1          ; i++
  ; =================================

  jmp loop
endloop:
  popa
  leave
  ret

我认为我没有正确复制数组地址,它不会编译 ^ 错误是:标记为

的两行 "invalid combination of opcode and operands"

因为你不能在内存中使用变量来寻址,所以你的temp是没用的。您必须为其选择一个寄存器,例如 edi。那么该块可能看起来像:

  mov edi, X
  add edi, [i]
  mov [edi], al

这当然过于复杂,初学者代码经常遇到这种情况。更简单的版本可能如下所示:

  mov esi, [ebp+12]
  mov esi, [esi+4]
  mov edi, X
loop:
  lodsb
  stosb
  ; end of string?
  or al, al
  jnz loop

I don't really know how LODSB works

然后您应该阅读有关它的指令集参考页。它使用 esial 但你已经知道了,否则你为什么要用地址加载 esi 并期望结果在 al 否则?