ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-12-08 21:50:40  阅读:275  来源: 互联网

标签:assembly linux x86


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

标签:assembly,linux,x86
来源: https://codeday.me/bug/20191208/2094415.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有