Memory MASM,来自某个存储点的输出
读者请回答这个问题 我对组装并不陌生。但我是新来的。(事实上,我已经用了8年了,没有一分钟使用过一个宏 现在,我要做一个简单的程序。我已经做了,这是主要的逻辑。但在输出方面存在一些问题。 当我使用Memory MASM,来自某个存储点的输出,memory,assembly,output,masm,Memory,Assembly,Output,Masm,读者请回答这个问题 我对组装并不陌生。但我是新来的。(事实上,我已经用了8年了,没有一分钟使用过一个宏 现在,我要做一个简单的程序。我已经做了,这是主要的逻辑。但在输出方面存在一些问题。 当我使用 output <some-variable-name> 输出 它制造东西-它输出字符。 但是现在我不想从某个变量的开头开始输出,而是从内存中的特定地址开始输出。现在我做到了: lea eax, <some-variable-name> mov esi, eax ... ma
output <some-variable-name>
输出
它制造东西-它输出字符。
但是现在我不想从某个变量的开头开始输出,而是从内存中的特定地址开始输出。现在我做到了:
lea eax, <some-variable-name>
mov esi, eax
... manipulations with address in esi, like 'add esi, ebx' and so on...
output esi
leaeax,
电影esi,eax
... 使用esi中的地址进行操作,如“添加esi、ebx”等。。。
输出esi
但那是行不通的。
编译器显示“错误A2070:指令操作数无效”。
我使用Microsoft宏汇编程序版本6.11
提前谢谢。
对不起,我的英语不好
UPD:“输出”宏的防御,取自包含的“io.h”文件:
output MACRO string,xtra ;; display string
IFB <string>
.ERR <missing operand in OUTPUT>
EXITM
ENDIF
IFNB <xtra>
.ERR <extra operand(s) in OUTPUT>
EXITM
ENDIF
push eax ;; save EAX
lea eax,string ;; string address
push eax ;; string parameter on stack
call outproc ;; call outproc(string)
pop eax ;; restore EAX
ENDM
输出宏字符串,xtra;;显示字符串
国际单项体育联合会
犯错误
进出口
恩迪夫
IFNB
犯错误
进出口
恩迪夫
推动eax;;保存EAX
lea eax,字符串;;字符串地址
推动eax;;堆栈上的字符串参数
呼叫outproc;;调用输出程序(字符串)
流行音乐;;还原EAX
ENDM
这种情况下的解决方案如下:
lea eax, <some-variable-name>
mov esi, eax
... manipulations with pointer, like 'add esi, edx' and so on ...
push esi
call outproc
leaeax,
电影esi,eax
... 使用指针进行操作,如“添加esi、edx”等。。。
推动esi
呼叫输出程序
什么是输出
?那是你写的宏吗?它的定义应该是问题的一部分。“output”是宏,在“io.h”中定义。我已经将它添加到start postry输出[esi]
-应该会给您一个有效的操作数,至少……我已经在考虑推esi并调用outproc。