所以我第一天上 Assembly 课,你知道什么?我的教授在她的 Windows 机器上教授所有内容,使用 Windows API 调用等。这很好,除了我在我的机器上运行 Ubuntu..
基本上,我希望能找到解决方法或某种形式的共同点,以便完成作业。
今天,我们的第一个编程作业是输入两个整数并输出总和。我遵循教授的代码如下:
.386
.model flat
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
include io.h
cr EQU 0dh
lf EQU 0ah
.stack 4096
.data
szPrompt1 BYTE "Enter first number: ", 0
szPrompt2 BYTE "Enter second number: ", 0
zLabel1 BYTE cr, lf, "The sum is "
dwNumber1 DWORD ? ; numbers to be added
dwNumber2 DWORD ?
szString BYTE 40 DUP (?) ; input string for numbers
szSum BYTE 12 DUP (0) ; sum in string form
szNewline BYTE cr,lf,0
.code ; start of main program code
_start:
output szPrompt1 ; prompt for ?rst number
input szString,40 ; read ASCII characters
atod szString ; convert to integer
mov dwNumber1,eax ; store in memory
output szPrompt2 ; repeat for second number
input szString,40
atod szString
mov dwNumber2,eax
mov eax,dwNumber1 ; first number to EAX
add eax,dwNumber2 ; add second number
dtoa szSum,eax ; convert to ASCII characters
output szLabel1 ; output label and results
output szSum
output szNewline
INVOKE ExitProcess,0 ; exit with return code 0
PUBLIC _start ; make entry point public
END ; end of source code
够简单直接了吧?所以我今天上交了它,所有这些都是通过糟糕的学校电脑连接起来的。我完全理解所涉及的所有概念,但是,如果我真的想将它组装到我的盒子上,我会在这里看到 2 个主要问题:
1)
.model flat
2) ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
和
我听说的这两个都是 Windows 特有的。所以我的问题是如何修改这段代码以便能够在 Linux 上进行汇编?
抱歉,如果我遗漏了任何细节,但如果您需要,我会通知您。
谢谢!
最佳答案
一般来说,汇编代码几乎总是特定于平台的。事实上,即使在相同的硬件和操作系统平台内,汇编程序之间的语法也不同!
您可能还会遇到那里的 io.h
问题 - 我敢打赌它会调用很多 win32 API。
我建议简单地使用 wine ,以及您的教授正在使用的任何汇编程序的副本,以运行您教授的示例。如果它可以运行 Microsoft Office 和 Steam 之类的东西,它当然可以运行一些简单的示例代码:)
关于linux - 80x86 Assembly - 非常基本的 I/O 程序从 Windows 到 Linux 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4655584/