Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Версии MASM_


Автор: GLeBaTi 20.4.2010, 16:27
Код

    .386
    .model flat, stdcall
    option casemap :none
    include \masm32\include\masm32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\kernel32.lib
    .code
    start:
      print "Hello world"
      exit
    end start

Код

include io.asm
   data segment
        x db 'Hello world!', '$'
   data ends
  stack segment stack
        db 128 dup (?)
  stack ends
   code segment
        assume cs: code, ds: data, ss: stack
 start: mov ax, data
        mov ds, ax
        lea dx, x
        outstr
        finish
   code ends
        end start

Код

CSEG segment
org 100h
_BEGIN:
    mov ah, 9h
    mov dx, offset msgg
    int 21h
    int 20h

    msgg db 'Hello!$'
CSEG ends
end _BEGIN


Вопрос: Какой из этих вариантов кода лучше использовать, чем они отличаются, какой из них кроссплатформенный ?

Автор: GoldFinch 20.4.2010, 17:29
на асме не бывает кроссплатформенного кода.

Автор: GLeBaTi 20.4.2010, 17:56
в MASM32 я могу писать код, который выполнится и на unix и на win32 ?
И на каких процессорах у меня будет работать первый код ?

Автор: airyashov 21.4.2010, 07:44
Цитата(GLeBaTi @ 20.4.2010,  17:56)
в MASM32 я могу писать код, который выполнится и на unix и на win32 ?
И на каких процессорах у меня будет работать первый код ?

только винда судя по коду

Автор: Mikl_ 21.4.2010, 08:36
GLeBaTi, 
если создается EXE PE-формата, DLL,SYS  то такой файл предназначен для работы Win32
если создается ELF то для Linux
если создается  MZ-EXE или COM то для DOS

в данном случае
1 пример  -- EXE для Windows
2 пример -- EXE для DOS  outstr и finish это процедуры описанные в файле io.asm
3 пример -- COM-файл

Автор: GLeBaTi 21.4.2010, 10:02
Значит, чтобы мне вывести текст на экран в разных ОС, мне надо вызывать разные ф-ии ?
(Win - print, DOS- int 21h, Linux - int 0x80, call kputs) -  чем они отличаются ?(вроде одинаково выводят на экран, но разный синтаксис)

Автор: Mikl_ 21.4.2010, 11:06
GLeBaTi, 
в Win32 не функции print -- там всё делается через API-функции, для простейшего вывода текста можно использовать 6 разных функций
ExtTextOut, TextOut, TabbedTextOut, PolyTextOut, DrawText, DrawTextEx, либо представить текст, как самостоятельное окошко типа STATIC
Для вывода текста, например функцией TextOut, нужно через стек передать функции пять разных параметров: координаты X и Y, куда будет выведен текст, строка, которую будут выводить, количество символов, которые должны быть выведены, контекст устpойства 
Цитата
чем они отличаются ?(вроде одинаково выводят на экран
 а отличаются они тем что принадлежат разным ОС, если бы операционные системы были устроены внутри одинаково, тогда зачем плодить зоопарк разных ОС? 
Вопрос напоминает рассуждение ребенка: "И зачем нужны английский, китайский, арабский, если я понимаю только русский?" ответ будет такой "Так сложилось..." smile 

Автор: GLeBaTi 21.4.2010, 15:35
Всё, спасибо за ответы !)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)