80x86汇编 - 从Windows进行Linux的非常基本的I / O程序转换

时间:2011-01-11 08:27:22

标签: linux assembly x86

所以我是大会班的第一天,你知道什么?我的教授在她的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        flat
2)
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
和 我听说过这两个都是特定于Windows的。所以我的问题是如何改变这段代码才能在Linux上进行汇编?

抱歉,如果我遗漏了任何细节,但如果您需要,我会通知您。

谢谢!

1 个答案:

答案 0 :(得分:3)

一般来说,汇编代码几乎总是特定于平台。实际上,即使在相同的硬件和OS平台中,汇编程序的语法也会有所不同!

你可能也会遇到io.h那里的问题 - 我敢打赌它会对win32 API进行大量调用。

我建议只使用wine,以及教授正在使用的任何汇编程序的副本,来运行教授的例子。如果它可以运行像Microsoft Office和Steam这样的东西,它当然可以运行一些简单的示例代码:)