声明数组和调用函数的语法是什么意思?
What does the syntax mean for declaring an array, and for calling functions?
对于我的第一个问题,假设我们在 .data 下有以下代码行:
"theSINTArray BYTE 256 dup(?)".
我知道这段代码创建了一个数组,其中每个元素都必须是一个 BYTE,但是 256 和 dup(?) 有什么用?
我知道下面的代码将 SINTArray 的类型、长度和 offset/address 压入堆栈,但我想知道的是是否可以从在子程序中堆叠和利用它们。
main PROC
push TYPE theSINTArray
push LENGTHOF theSINTArray
push OFFSET theSINTArray
call testParameters
exit
main ENDP
这个问题有点乏味,所以我提前道歉,但我只是不明白为什么下面代码示例中的大部分行都是必要的。假设我有行 "prompt BYTE "Please enter a value: ",0" in the .data section,下面每一行代码的目的是什么?注意:WriteString 和 ReadString 是 Irvine 库中定义的子例程,我正在使用它。
testOutput PROC
push edx
push ecx
mov edx,offset prompt
call WriteString
pop ecx
pop edx
call ReadString
ret
testOutput ENDP
what are the 256 and dup(?) there for?
阅读assembler's manual。 TL;DR: 保留 256 个未初始化的字节
if it is possible to retrieve them from the stack and utilize them
within a subroutine
当然有可能,如果被调用方无法访问参数,则参数传递将是愚蠢的;)您相对于 esp
(堆栈指针)寻址它们,或者在您设置它之后作为帧指针,ebp
。示例:[esp+4]
或 [ebp+8]
.
what is the purpose of each line of the code below
testOutput PROC ; begin testOutput procedure
push edx ; save edx on stack
push ecx ; save ecx on stack
mov edx,offset prompt ; load edx with address of prompt
; presumably argument to WriteString
call WriteString ; invoke WriteString procedure
pop ecx ; restore ecx saved above
; in case WriteString modified it
pop edx ; restore edx saved above (we have modified it)
call ReadString ; invoke ReadString procedure
ret ; return from subroutine
testOutput ENDP ; end of procedure
对于我的第一个问题,假设我们在 .data 下有以下代码行:
"theSINTArray BYTE 256 dup(?)".
我知道这段代码创建了一个数组,其中每个元素都必须是一个 BYTE,但是 256 和 dup(?) 有什么用?
我知道下面的代码将 SINTArray 的类型、长度和 offset/address 压入堆栈,但我想知道的是是否可以从在子程序中堆叠和利用它们。
main PROC push TYPE theSINTArray push LENGTHOF theSINTArray push OFFSET theSINTArray call testParameters exit main ENDP
这个问题有点乏味,所以我提前道歉,但我只是不明白为什么下面代码示例中的大部分行都是必要的。假设我有行 "prompt BYTE "Please enter a value: ",0" in the .data section,下面每一行代码的目的是什么?注意:WriteString 和 ReadString 是 Irvine 库中定义的子例程,我正在使用它。
testOutput PROC push edx push ecx mov edx,offset prompt call WriteString pop ecx pop edx call ReadString ret testOutput ENDP
what are the 256 and dup(?) there for?
阅读assembler's manual。 TL;DR: 保留 256 个未初始化的字节
if it is possible to retrieve them from the stack and utilize them within a subroutine
当然有可能,如果被调用方无法访问参数,则参数传递将是愚蠢的;)您相对于 esp
(堆栈指针)寻址它们,或者在您设置它之后作为帧指针,ebp
。示例:[esp+4]
或 [ebp+8]
.
what is the purpose of each line of the code below
testOutput PROC ; begin testOutput procedure
push edx ; save edx on stack
push ecx ; save ecx on stack
mov edx,offset prompt ; load edx with address of prompt
; presumably argument to WriteString
call WriteString ; invoke WriteString procedure
pop ecx ; restore ecx saved above
; in case WriteString modified it
pop edx ; restore edx saved above (we have modified it)
call ReadString ; invoke ReadString procedure
ret ; return from subroutine
testOutput ENDP ; end of procedure