我是刚接触汇编的人,并且编写了一个简单的程序将数字1到10打印到屏幕上。但是,在我编写它后不久,我意识到我需要将其从x86转换为x86_64程序集,以便在主工作站上运行。
大多数转换都进行得很好,除了一个块,一旦将数字转换为字符串,该块就会在屏幕上打印数字。
在x86中,要打印的代码是:
mov edx, eax
pop eax
mov ecx, eax
mov ebx, 1
mov eax, 4
int 80h
当我将其转换为x86_64时,我试图通过简单地更改寄存器名称来使其工作。
mov rdx,rax
pop rax
mov rcx, rax
mov rbx, 1
mov rax, 4
int 80h
在程序中,rax保留要打印的ASCII数字的值。
现在在64位环境中运行该程序时,屏幕上不会输出任何输出,并且该程序完成了执行,没有任何错误或消息。
有什么方法可以在x86_64程序集中将字符串打印到屏幕上?
谢谢!
答案 0 :(得分:1)
我只想对fuz表示感谢。可悲的是,事实证明我的问题是完全不相关的,并且该错误是在代码块之后的一段代码中进行的,在该代码块中进行了写调用。
当他告诉我展示完整的程序时,我快速浏览了一下代码,发现了问题。
以前,我曾尝试使用以下方式进行打印:
mov rdx,rax
pop rax
mov rcx, rax
mov rbx, 1
mov rax, 4
int 80h
但是,这不起作用,并且由于它没有引发任何错误,因此我认为该错误位于其前面的代码中,即该问题的代码块,该代码块限制了打印块的传递。正确的代码如下所示:
mov rdx,rax
pop rax
mov rsi, rax
mov rdi, 1
mov rax, 1
int 80h
再次,非常感谢和抱歉,我没有适当的组装错误检查!