MASM,从某个内存点输出
问题描述:
这个问题的读者。MASM,从某个内存点输出
我对组装并不陌生。但我是MASM的新手。 (实际上,我使用硬核干净的tasm东西大约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
但这不行。编译器说'错误A2070:无效指令操作数'。 我使用Microsoft宏汇编程序版本6.11。
在此先感谢。 对不起,我的英文破碎。
UPD: '产出' 的宏,从包括采取 'io.h' 文件defenition:
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
答
在这种情况下的soulution是使用以下:
lea eax, <some-variable-name>
mov esi, eax
... manipulations with pointer, like 'add esi, edx' and so on ...
push esi
call outproc
什么是'输出'?这是你写的一些宏吗?这个定义真的应该是问题的一部分。 – Michael 2013-04-06 22:14:51
'output'是宏,在'io.h'中定义。我已经将它添加到开始帖子 – 2013-04-06 22:18:17
尝试'输出[esi]' - 应该给你一个有效的操作数,至少... – 2013-04-07 00:06:44