Memory MASM,来自某个存储点的输出

Memory MASM,来自某个存储点的输出,memory,assembly,output,masm,Memory,Assembly,Output,Masm,读者请回答这个问题 我对组装并不陌生。但我是新来的。(事实上,我已经用了8年了,没有一分钟使用过一个宏 现在,我要做一个简单的程序。我已经做了,这是主要的逻辑。但在输出方面存在一些问题。 当我使用 output <some-variable-name> 输出 它制造东西-它输出字符。 但是现在我不想从某个变量的开头开始输出,而是从内存中的特定地址开始输出。现在我做到了: lea eax, <some-variable-name> mov esi, eax ... ma

读者请回答这个问题

我对组装并不陌生。但我是新来的。(事实上,我已经用了8年了,没有一分钟使用过一个宏

现在,我要做一个简单的程序。我已经做了,这是主要的逻辑。但在输出方面存在一些问题。 当我使用

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。