我在汇编中使用printf
时遇到问题。这是一段代码
push $buff
push $end_str
call printf
add $8, %esp
o_buff
是一个声明如下的变量:.lcomm o_buff, 32
而end_str
是end_str: .ascii "%c\n"
。在o_buff
中是为ascii代码指定的字节,这里是一个示例形式gdb x /4b 0x0804a028
示例:0x0804a028 <o_buff> 49 48 49 48
,它假设为1010
状态,但我始终得到{{} 1}}无论(
变量内部是什么。
我在调用o_buff
之前将注册保存在堆栈中,之后我弹出它们。当我只移动一个字节:printf
然后movb (%eax,%esi,1), %dl
(当然在i xor edx寄存器之前)我得到一个正确的输出,但这只是一个字符。有人能指出我犯错的地方吗?我正在使用GAS AT&amp; T语法