Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2012, 09:24   #1
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию Посоветуйте новичку! Реальный Hello World!

Доброго времени суток, уважаемы форумчане!
Недавно задался целью изучать ассемблер.
В данное время читаю книгу Питера Абеля. Использую masm.
Вывожу hello world под дос, с этим проблем нет, вот код:
PHP код:
.model tiny
.data
hello db 
'Hello World from DOS!!! $'
.code
.startup
mov    dx
,offset Hello
mov    ah
,9
int    21h
.exit
end 
Но хочу вывести Hello World не под дос, а на реальном железе. Подскажите, как изменить код, чтобы он писался в загрузочный сектор памяти и выводил строку? Я пытался его менять, записывал в загрузочный сектор дискеты, но ничего путного не вышло...
ros.pro вне форума Ответить с цитированием
Старый 13.01.2012, 10:14   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

ros.pro
А сейчас ты выводишь "Hello World from DOS!!!" не на "реальном железе"? Не рано ли писать собственную операционную систему прочитав только Абеля?
еще варианты:
1) вывод через int 29h
Код:
.286
.MODEL SMALL
.STACK 100h
.DATA
        HelloMessage DB 'Hello World',10,13
        num = $ - HelloMessage
.CODE
START:  push @data
        pop ds
        mov cx,num
a1:     lodsb
        int 29h
        loop a1
        mov ah,4ch
        int 21h
end start
2) прямой вывод строки в видео память, выводит красные символы на черном фоне
Код:
.286
.MODEL SMALL
.STACK 100h
.DATA
        HelloMessage DB 'Hello World'
        num = $ - HelloMessage
.CODE
START:  push @data
        pop ds
        push 0B800h
        pop es
        mov ax,3
        int 10h
        mov di,0
        mov si,offset HelloMessage
        mov cx,num
        mov ah,0Ch
a1:     lodsb
        stosw
        loop a1
        mov ah,4ch
        int 21h
end start
3)
Код:
org 100h
start:  mov ah,40h
        mov bx,1
        mov cx,12
        mov dx,offset msg
        int 21h
        ret
msg db 'Hello World!'
end start
4)
Код:
.model tiny
.286
.code
org 100h
start:
mov ah,13h
xor dx,dx
mov cx,sizeof string
mov bp,offset string
mov bx,0ch
int 10h
ret
string db 'Goodbye, America'
end start
5)
Код:
HELLO DB 'Здравствуй мир!',0 ;строка для вывода 
.code
MOV AH,0Eh ; на экран номер подфункции BIOS
mov si,offset HELLO ;SI указывает на строку
next: lodsb ;помещаем символ в AL и переходим к следующему символу,
 INT 10h ;выводим символ на экран
test al,al ;проверяем на конец строки
jnz next ;если нет — повторяем все сначала
6)
Код:
.286 
.model tiny
.code
org 100h 
start: mov bp,offset ABC
        mov ax,1303h
        mov bx,7
        mov cx,16
        xor DX,DX
        int 10h 
        retn
ABC db 'H',0Ah,'e',0Bh,'l',0Dh,'l',0Ch
    db 'o',0Bh,',',0Ah,' ',0Ah,'W',09h
    db 'o',08h,'r',07h,'l',06h,'d',05h
    db '!',02h,'!',02h,'!',02h
end start

Последний раз редактировалось Mikl___; 13.01.2012 в 10:43.
Mikl___ вне форума Ответить с цитированием
Старый 13.01.2012, 13:05   #3
ros.pro
Пользователь
 
Регистрация: 24.05.2011
Сообщений: 39
По умолчанию

2 Mikl___, спасибо!
ros.pro вне форума Ответить с цитированием
Старый 13.01.2012, 18:58   #4
Ang15
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 38
По умолчанию

У тебя ошибка в коде. Модель памяти tiny предполагает объединение в один сегмент кода и данных. У тебя вроде как должен выводиться мусор при использовании 16-разрядного досового прерывания. Но так как идентификатором @data модель tiny пользоваться не даст, объедени данные и код в один сегмент:
Код:
push cs
pop ds
Данные будут после кода.
Ang15 вне форума Ответить с цитированием
Старый 14.01.2012, 04:36   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от Ang15
У тебя ошибка в коде.
Ang15
1) конкретней пиши где? Приведены 6 вариантов вывода текста на экран в среде ДОС. Три для model tiny и три -- для model small, для model tiny и так по умолчанию SS=DS=CS=ES, для чего делать push cs/pop ds?
2) непроверенные и неотлаженные программы я для всеобщего обозрения не выставляю
Mikl___ вне форума Ответить с цитированием
Старый 14.01.2012, 18:45   #6
Ang15
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 38
По умолчанию

Это коммент по тому, что ros.pro скинул. Я тоже знаю, что модель tiny предполагает совмещение данных/стека/кода, но когда я проверяю досовские программки через debug.exe у меня cs никогда не становился равным ds (как правило, больше на 10h).

Последний раз редактировалось Ang15; 14.01.2012 в 18:55.
Ang15 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте новичку! AntropoS ASP.NET 5 14.02.2012 15:58
Посоветуйте новичку) KypT Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 28.06.2011 22:22
Посоветуйте новичку ncr Microsoft Office Excel 11 10.08.2010 15:21
посоветуйте новичку mordes Помощь студентам 1 31.01.2010 19:27
Посоветуйте новичку Arvest Общие вопросы Delphi 2 03.02.2007 17:31