0

这个问题的读者。

我对组装并不陌生。但我是 MASM 的新手。(事实上​​,我用了大约 8 年的铁杆清洁 tasm 东西,甚至没有一分钟使用单个宏,嘿嘿)。

现在,我必须编写一个简单的程序。我已经做到了它的主要逻辑。但是输出有一些问题。当我使用

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

但这行不通。编译器说“错误 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
4

1 回答 1

0

在这种情况下的解决方案是使用以下:

lea eax, <some-variable-name>
mov esi, eax
... manipulations with pointer, like 'add esi, edx' and so on ...
push esi
call outproc
于 2013-04-07T05:50:32.060 回答