Сборка 80x86 - очень простая конвертация программы ввода-вывода в Linux из Windows - PullRequest
3 голосов
/ 11 января 2011

Итак, мой первый день в классе ассемблера, и что вы знаете? Моя преподавательница обучает всему на своей коробке с 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

Просто и достаточно просто, да? Так что сегодня я включил все, что связано со дерьмовыми школьными компьютерами. И я полностью понимаю все концепции, связанные с этим, однако я вижу здесь 2 основных вопроса, если я действительно хочу собрать его на своем боксе:

1)

.model        flat
2)
ExitProcess PROTO NEAR32 stdcall, dwExiteCode:DWORD
А также Оба из которых я слышал, очень специфичны для Windows. Итак, мой вопрос, как я могу изменить этот код, чтобы иметь возможность собирать в Linux?

Извините, если мне не хватает каких-либо подробностей, но я дам вам знать, если вам нужно.

Спасибо!

1 Ответ

3 голосов
/ 11 января 2011

Код сборки, вообще говоря, почти всегда зависит от платформы. Действительно, сам синтаксис варьируется между ассемблерами, даже в пределах одного и того же оборудования и платформы ОС!

Возможно, у вас там тоже будут проблемы с этим io.h - держу пари, что он делает много вызовов в Win32 API.

Я бы порекомендовал просто использовать wine вместе с копией любого ассемблера, который использует ваш профессор, для запуска примеров вашего профессора. Если он может запускать такие вещи, как Microsoft Office и Steam, он, безусловно, может выполнить какой-то тривиальный пример кода:)

...