所以我是大会班的第一天,你知道什么?我的教授在她的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上进行汇编?
抱歉,如果我遗漏了任何细节,但如果您需要,我会通知您。
谢谢!
答案 0 :(得分:3)
一般来说,汇编代码几乎总是特定于平台。实际上,即使在相同的硬件和OS平台中,汇编程序的语法也会有所不同!
你可能也会遇到io.h
那里的问题 - 我敢打赌它会对win32 API进行大量调用。
我建议只使用wine,以及教授正在使用的任何汇编程序的副本,来运行教授的例子。如果它可以运行像Microsoft Office和Steam这样的东西,它当然可以运行一些简单的示例代码:)