80×86程序集 – 非常基本的I / O程序从Windows转换到Linux

所以,我在Assembly课程的第一天,你知道什么? 我的教授教她的Windows盒子上的一切,使用Windows API调用等等,除了我在我的盒子上运行Ubuntu。

基本上,我希望我能find解决方法或某种forms的共同理由,以便我完成我的任务。

今天,我们的第一个编程任务是input两个整数并输出总和。 我遵循我的教授的代码如下:

.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上组装?

对不起,如果我错过任何细节,但我会让你知道,如果你需要。

谢谢!

汇编代码一般来说几乎总是平台特定的。 事实上,即使在相同的硬件和操作系统平台中,汇编器的语法也各不相同!

你也可能会遇到那个io.h问题 – 我敢打赌,这是对win32 API的大量调用。

我建议简单地使用葡萄酒 ,以及你的教授正在使用的任何汇编的副本来运行你的教授的例子。 如果它可以运行像微软Office和Steam的东西,它当然可以运行一些简单的示例代码:)