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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2008, 12:23   #11
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

функция INT 10h AH=13h не подразумевает символа конца строки.....
синтаксис её такой:
AH=13h
AL бит 0 устанавливаеся в 1 если после вывода надо переместить курсор в конец строки.
AL бит 1 устанавливается в 1 если для каждого символа указывается атрибут отдельно. В этом случае каждый символ строки должен быть представлен в виде 2х байт (символ-атрибут). (но это неудобно. так што лучше в 0 оставть).
BH-номер видеостаницы
BL-атрибут для символов если первый бит AL=0
CX-колличество символов
DH,DL-начальное положение (строка и столбец)
ES:BP-адрес начала строки в памяти.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 07.11.2008, 13:10   #12
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Min,
это да, символ конца строки лишний.. с остальным все ясно, под виндой все работает как надо.. без ОС символы не те
odi_noki вне форума Ответить с цитированием
Старый 12.11.2008, 01:25   #13
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

кириллица без ОС выводиться не будет... а с 0 по 127 символы выводятся... тока што попробовал)))) возможно ты ds криво настроил
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 12.11.2008, 12:10   #14
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

просто перегрузить таблицу знакогенератора и что угодно будет выводиться
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 12.11.2008, 12:51   #15
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Min Посмотреть сообщение
кириллица без ОС выводиться не будет... а с 0 по 127 символы выводятся... тока што попробовал)))) возможно ты ds криво настроил
а как ds настроить? я же делаю COM-файл, там разве нужно сегменты настраивать? у меня еще похоже доступ к переменным не идет, наверно как раз с сегментами проблема. а так чтоб загрузить строку, я пишу mov bp, offset str1 - надеюсь, это верно

Цитата:
Сообщение от airyashov Посмотреть сообщение
просто перегрузить таблицу знакогенератора и что угодно будет выводиться
вот об этом тоже хотелось бы узнать поподробнее.
odi_noki вне форума Ответить с цитированием
Старый 12.11.2008, 13:28   #16
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

лучше использую FASM.... он может генерить bin файлы....... у него просто вначале задаешь:

use16
Код:
org 0x7C00   ;начальный адрес в памяти
boot:
cli
 xor ax,ax
 mov ds,ax
 mov ss,ax
 mov es,ax
 mov sp,0xFFFE
sti
и в конце не забудь:
Код:
 rb 510-($-boot)
 dw 0x55AA
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 12.11.2008, 16:58   #17
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

вот я TASM юзаю, генерится com-файл, он чем-то отличается от bin-файла? у меня тоже сегментные регистры все настроены на один адрес, точнее, на адрес CS, не совсем понятно, зачем ты настраиваешь на 0.
еще не понятно почему такое начальное смещение org 0x7C00. И обязательно ли прописывать выравнивание на 512 - rb 510-($-boot)?
odi_noki вне форума Ответить с цитированием
Старый 12.11.2008, 17:09   #18
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

После POST BIOS вызывает прерывание 19h, читает первый сектор, записывает его по адресу 0x7C00 и туда же передаёт управление. Так сложилось исторически COM-файлы грузятся с адреса 0x100, т.е. адреса далее будут неправильными. Само смещение в файл нигде не записывается, оно используется на этапе компиляции для вычисления всех адресов
пыщь

Последний раз редактировалось JTG; 12.11.2008 в 17:11.
JTG вне форума Ответить с цитированием
Старый 12.11.2008, 17:18   #19
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

JTG,
если все так, то в этом и есть причина... Придется bin-файл делать, с помощью fasm, какие еще есть способы?
odi_noki вне форума Ответить с цитированием
Старый 13.11.2008, 10:16   #20
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

com файл не скомпилится без org 100h..... это место для PSP выделяется.... можно вручную настроить ds на 7C00h (не забудь што это физический адрес, а сегментный 7C0h) .... но когда я так делал на tasm все равно какая то чепуха получалась.....
Код:
rb 510-($-boot)
dw 0x55AA
это нужно штобы твой бут был ровно 512 байт и заканчивался на 55AAh
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания и asm в Си BOBAH13 Общие вопросы C/C++ 7 05.08.2008 15:52
прерывания sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.04.2008 13:37
Операторы прерывания Иринкаа Общие вопросы Delphi 13 27.11.2007 21:52