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


Автор: СЭНСЭЙ 22.10.2009, 10:57
Начал изучение асма с примитивной программы
Код

DOSSEG
        .MODEL   SMALL
        .STACK   100h
        .DATA
message DB 'Hallo!',13,10,'$'
        .CODE
 mov ax, @data
 mov ds, ax

mov ah,9
mov dx,OFFSET message
int 21h
mov ah,4ch

int 21h
END


Но при выводе перед словом Hallo! выводится еще куча всякого мусора
Подскажите в чем причина
Компьютер 233ММХ with 32мб DDR
в автоексеке и конфиге отключаю все кроме himem.sys и Волкова

Автор: airyashov 23.10.2009, 08:10
выложите исходник который запускаете
невидно только точки входа, но например tasm и так проглотит

Автор: СЭНСЭЙ 23.10.2009, 09:05
это полный текст программы.
Я его на другой машине компилирую и линкую.
Не могу от туда скопировать экзешник.
Компилирую и линкую с помощью TASM 2.0

Автор: Akina 23.10.2009, 09:18
Нет метки точки входа - поэтому TASM ставит ноль. А там сегмент данных (model small)...


Автор: СЭНСЭЙ 23.10.2009, 09:21
Вот линковщик, компановщик, исходник программы и сама программа.

Автор: СЭНСЭЙ 23.10.2009, 09:38
Попробовал на MASM 6.11 сделать ту же прогу, естественно подкорректировав синтаксис под эту версию:
Код

CSEG segment
org 100h

Begin:

mov ah,9
mov dx,offset Message
int 21h

int 20h

Message db 'Hello!$'
CSEG ends
end Begin


Тоже самое - мусора меньше, но он есть перед текстом выводимым на экран
где то 8 символов псевдографики (линковал и запускал под виндой ХР СП3 в оболочке VC 4.01)

Добавлено через 4 минуты и 2 секунды
Акина, подредактируйте мой код пожалуйста.
Я только начал учить по книгам и еще не знаю что такое метка точки входа.

Автор: piritus 23.10.2009, 10:43
Код

;  A 16-bit DOS HelloWorld program originally by RedOx.  Produces a small model .EXE executable.

; To assemble and link from within WinAsm Studio, you must have a special 16-bit linker, 
; such as the one in the archive at this URL- http://win32assembly.online.fr/files/Lnk563.exe
; Run the archive to unpack Link.exe, rename the Link.exe file to Link16.exe and copy it
; into the \masm32\bin folder.

.MODEL    small
.stack    100h

.data 
    msg        db "This is a 16-bit DOS .EXE executable",13,10,"Hello, World!",13,10,"$"; The string must end with a $

.code
start:
    mov        ax,@data        ; Get the address of the data segment
    mov        ds,ax            ; Set the DS segment
     
    mov        dx,offset msg    ; Get the address of our message in the DX
    mov        ah,9            ; Function 09h in AH means "WRITE STRING TO STANDARD OUTPUT"
    int        21h                ; Call the DOS interrupt (DOS function call)
    
    mov        ax,0C07h        ; Function 0Ch = "FLUSH BUFFER AND READ STANDARD INPUT"
    int        21h                ; Waits for a key to be pressed.
    
    mov        ax, 4C00h        ; the exit fuction  [4C+no error (00)]
    int        21h                ; call DOS interrupt 21h
end start

Автор: СЭНСЭЙ 23.10.2009, 12:02
piritus, при компиляции в TASM 2.0 выдает ошибку в 23 строке (constant too large)
напоминаю что компьютер intel 233ММХ

Добавлено через 31 секунду
операционная система ДОС 6.22, родимый

Автор: СЭНСЭЙ 26.10.2009, 15:36
Всех прошу прощения.
В коде программы была ошибка:
вместо
Код

 mov ax, @data
 mov ds, ax

mov ah,9
mov dx,OFFSET message

было
Код

 mov ax, @data
 mov dx, ax

mov ah,9
mov dx,OFFSET message


исправил и все заработало!
Всем спасибо за внимание.

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