我第一天上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足够简单和直接,对吧?所以我今天把它上交了,都是从烂学校的电脑上连接过来的。我完全理解所有涉及的概念,但是,如果我真的想把它组装到我的盒子上,我在这里看到了两个主要问题:
1)
.model flat2)
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD我听说这两个都是Windows特有的。所以我的问题是,我如何改变这段代码,使其能够在Linux上进行汇编?
如果我遗漏了任何细节,很抱歉,但如果您需要,我会告诉您的。
谢谢!
发布于 2011-01-11 16:30:33
一般来说,汇编代码几乎总是特定于平台的。事实上,即使在相同的硬件和操作系统平台中,汇编程序之间的语法也会有所不同!
在那里,您可能也会遇到这个io.h的问题--我敢打赌,它会对win32 API进行大量的调用。
我建议您简单地使用wine,以及您的教授正在使用的任何汇编程序的副本,来运行您教授的示例。如果它可以运行Microsoft Office和Steam之类的东西,那么它肯定可以运行一些琐碎的示例代码:)
https://stackoverflow.com/questions/4655584
复制相似问题