从参数复制到数组
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
然后您应该阅读有关它的指令集参考页。它使用 esi
和 al
但你已经知道了,否则你为什么要用地址加载 esi
并期望结果在 al
否则?
我正在尝试将第二个参数复制到声明为的数组:
.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
然后您应该阅读有关它的指令集参考页。它使用 esi
和 al
但你已经知道了,否则你为什么要用地址加载 esi
并期望结果在 al
否则?