linux - 80x86 Assembly - 非常基本的 I/O 程序从 Windows 到 Linux 的转换

标签 linux assembly x86

所以我第一天上 Assembly 课,你知道什么?我的教授在她的 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

够简单直接了吧?所以我今天上交了它,所有这些都是通过糟糕的学校电脑连接起来的。我完全理解所涉及的所有概念,但是,如果我真的想将它组装到我的盒子上,我会在这里看到 2 个主要问题:

1)

.model        flat
2)
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
和 我听说的这两个都是 Windows 特有的。所以我的问题是如何修改这段代码以便能够在 Linux 上进行汇编?

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

谢谢!

最佳答案

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

您可能还会遇到那里的 io.h 问题 - 我敢打赌它会调用很多 win32 API。

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

关于linux - 80x86 Assembly - 非常基本的 I/O 程序从 Windows 到 Linux 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4655584/

相关文章:

python - 如何在 CentOS 上启动 redis 服务器并配置 nginx 以运行 mediacrush 脚本?

java - 使用运行时从 Java 运行 smbclient 命令

assembly - 使用 $ 符号为上一行中存在的变量赋值

assembly - 为什么 ia32/x64 操作码映射文档 0x66 和 0xF2 作为操作码 0x0F38F1 (CRC32) 的双重强制前缀?

x86 - 用AVX指令进行水平向量求和的最快方法

linux - 如何检索作业信息 LSF 存档

linux - 网络/url 日志记录 Linux

c++ - std::vector<int> sum ASM 解释

assembly - MOVDQA 和 MOVNTDQA 以及 WB/WC 标记区域的 VMOVDQA 和 VMOVNTDQ 之间有什么区别?

performance - 短环路时延