80×86汇编-从Windows到Linux的非常基本的I / O程序转换

那么我的第一堂上课日,您知道什么?我的教授使用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之类的程序,则可以运行一些简单的示例代码:)

上一篇:使用AT&T语法通过内联汇编访问数组


下一篇:redis运维常用命令