首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >80x86汇编-非常基本的从Windows到Linux的I/O程序转换

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

Stack Overflow用户
提问于 2011-01-11 16:27:22
回答 1查看 786关注 0票数 3

我第一天上Assembly课,你知道些什么?我的教授在她的Windows机器上教授一切,使用Windows API调用等,这是很好的,除了我在我的机器上运行Ubuntu。

基本上,我希望我能找到一个变通的方法或某种形式的共同点,以便我完成我的作业。

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

代码语言:javascript
复制
.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)

代码语言:javascript
复制
.model        flat

2)

代码语言:javascript
复制
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD

我听说这两个都是Windows特有的。所以我的问题是,我如何改变这段代码,使其能够在Linux上进行汇编?

如果我遗漏了任何细节,很抱歉,但如果您需要,我会告诉您的。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-11 16:30:33

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

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

我建议您简单地使用wine,以及您的教授正在使用的任何汇编程序的副本,来运行您教授的示例。如果它可以运行Microsoft Office和Steam之类的东西,那么它肯定可以运行一些琐碎的示例代码:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4655584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档