Программа FASM HelloWorld .exe - PullRequest
       26

Программа FASM HelloWorld .exe

1 голос
/ 13 ноября 2010

Я пытался написать свою первую программу .exe на FASM. Он работает нормально, когда я использую org 100h, но я хочу скомпилировать файл .exe. Когда я заменил первую строку на «format PE GUI 4.0» и попытался скомпилировать ее, произошла ошибка: «значение вне диапазона» (строка: mov dx, msg).

ORG 100h      ;format PE GUI 4.0

mov dx,msg
mov ah,9h
int 21h

mov ah,10h
int 16h

int 21h

msg db "Hello World!$" 

Как мне изменить исходный код?
----------------------------------------------
Ответ:

format mz
org 100h

mov edx,msg
mov ah,9h
int 21h

mov ah,10h
int 16h

mov ax,$4c01
int 21h

msg db "Hello World!$" 

Ответы [ 3 ]

4 голосов
/ 23 февраля 2011

Ваша первая версия в формате COM.Это 16-битная модель FLAT реального режима.Ваша вторая версия в формате DOS MZ.Это 16-битная модель SEGMENTED реального режима.

Сегментированная модель использует «сегменты» для описания вашего DS (сегмент) и DX (смещение).Итак, во-первых, вам нужно определить сегменты для ваших данных и кода, а во-вторых, вам нужно правильно указать, где находится ваш сегмент данных и каково ваше смещение, прежде чем вы сможете использовать int 21h, функция 9.

В течение 21 часа для функции 9 требуется правильно настроить DS: DX в сегментированной модели, чтобы вывести строку с нулевым символом в конце

format MZ
entry .code:start
segment .code
start:
mov ax, .data ; put data segment into ax
mov ds, ax    ; there, I setup the DS for you
mov dx, msg   ; now I give you the offset in DX. DS:DX now completed.
mov ah, 9h
int 21h
mov ah, 4ch
int 21h
segment .data
msg db 'Hello World', '$'

Надеюсь, это поможет некоторым новичкам из FASM.

2 голосов
/ 14 ноября 2010

Если вы хотите DOS EXE, вам нужно формат mz .

0 голосов
/ 14 ноября 2010

Возможно, вы захотите использовать вместо него lea (т.е. lea dx, msg); это принимает смещение операнда и может лучше подходить к тому, что вы хотите ...

...