那么我的第一堂上课日,您知道什么?我的教授使用Windows API调用等方法在Windows盒子上教所有东西,这很好,除了我在盒子上运行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 flat
2)
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
和
我听说这两个都是Windows特有的.因此,我的问题是如何修改此代码以使其能够在Linux上组装?
抱歉,如果我缺少任何详细信息,但如有需要,我会通知您.
谢谢!
解决方法:
一般来说,汇编代码几乎总是特定于平台的.实际上,即使在相同的硬件和OS平台内,汇编器之间的语法也有所不同!
那里的io.h可能也有问题-我敢打赌,它对Win32 API进行了大量调用.
我建议您仅使用wine,以及您的教授正在使用的任何汇编程序的副本来运行您的教授的示例.如果它可以运行Microsoft Office和Steam之类的程序,则可以运行一些简单的示例代码:)