Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Assembler
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 05.01.2013, 23:15
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Ты не говоришь прерыванию, что выводить. В одном из регистра (не помню в каком) должен быть адрес строки. Иначе как дос узнает, что надо вывести? А по поводу выводимого сообщения - либо это бред, вызванный неинициализированным регистром, либо ты что-то не так описал.
Для вывода строки на экран нужно использовать команду db. Вы скажите конкретно, что я сделал не так?
Ответить с цитированием
  #17  
Старый 07.01.2013, 19:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
...команду db
"Хорошо" же сейчас преподают ассемблер... Или ты "хорошо" слушаешь. Нет такой команды. Открой справочник интел/амд и убедишься. DB означает что Байт (B) после этой директивы будет в исполняемом файле записан на текущем адресе так, как есть.
А теперь открываю справочник и цитирую:
Цитата:
DOS Fn 09H: Выдать строку на дисплей

Вход
AH = 09H
DS: DX = адрес строки, заканчивающейся символом '$' (ASCII 24H)

Выход
нет =

Описание:
строка, исключая завершающий ее символ '$', посылается на стандартный вывод. символы Backspace обрабатываются как в функции 02H Display Char. обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 13H и ASCII 0aH). строки, содержащие '$', можно выдать через 40H Write Handle (BX=0).
Что конкретно тут не понятно? В описании четко сказано. DS-BX - адрес. А у тебя DX перед выводом равен случайному значению, очевидно, что там лежит адрес какой-то дурацкой строки системы. И строка находится в сегменте кода, а не данных.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 07.01.2013 в 19:12.
Ответить с цитированием
  #18  
Старый 07.01.2013, 20:48
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
"Хорошо" же сейчас преподают ассемблер... Или ты "хорошо" слушаешь. Нет такой команды. Открой справочник интел/амд и убедишься. DB означает что Байт (B) после этой директивы будет в исполняемом файле записан на текущем адресе так, как есть.
А теперь открываю справочник и цитирую:

Что конкретно тут не понятно? В описании четко сказано. DS-BX - адрес. А у тебя DX перед выводом равен случайному значению, очевидно, что там лежит адрес какой-то дурацкой строки системы. И строка находится в сегменте кода, а не данных.
У нас по этому предемету нет лекций, только дают литературу для самостоятельного изучения. Попробуйте открыть книгу Зубкова и найти там чёткую информацию про вывод строки. Я не вижу в своём примере регистр dx.
Ответить с цитированием
  #19  
Старый 07.01.2013, 21:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Открыл, нашел за 50 секунд. При том, что я эту книгу вообще в первый раз вижу. Раздел так и называется: "Вывод на экран в текстовом режиме":
Цитата:
Раздел 4.3
Функция DOS 09h — Записать строку в STDOUT с проверкой на Ctrl-Break

Ввод: АН = 09h
DS: DX = адрес строки, заканчивающейся символом $ (24h)
Вывод: Никакого, согласно документации, но на самом деле: AL = 24h (код последнего символа)

Действие этой функции полностью аналогично действию функции 02h, но выводится не один символ, а целая строка, как в программах hello-1.asm и hello-2.asm.

То же, что и в справочнике. И код в исходниках прилагается. Так что не надо на авторов все валить.
Цитата:
Я не вижу в своём примере регистр dx
Естественно, его там нет. Так что в нем будет находиться то, что было ДО старта программы, то есть любой бред, кроме адреса нужной строки.
И как я уже сказал, строка должна быть в сегменте данных. .data.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 07.01.2013 в 21:15.
Ответить с цитированием
  #20  
Старый 07.01.2013, 21:31
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
lea eax, X
mov eax, dword ptr [eax]
lea ebx, Y
mov ebx, deord ptr [ebx]
add eax, edx ; eax = addition result

Или что надо сделать? Я по диагонали читал тему.

По поводу вывода текста прерываниями, читай книгу ISBN 5-94723-487-4, там первый раздел посвящен работе с клавой и печати на экран.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 07.01.2013 в 21:36.
Ответить с цитированием
  #21  
Старый 07.01.2013, 21:59
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Препод вздернет на рее за использование расширенных регистров в реальном режиме х16. Мне в свое время тоже за это пинков надавали. Правда я тогда в eax строку запихал. И если я тогда мог доказать преподу, что это нормально и это будет работать, то в том, что это сможет сделать ТС, я сомневаюсь.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #22  
Старый 07.01.2013, 22:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Если пользовать двубайтные регистры, то сначала загружать младшие биты, складывать и учитывая флаг переполнения складывать старшие биты.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #23  
Старый 13.01.2013, 23:18
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию

Я так понял, мне строка
Код:
message         db       "53687091",0Dh,0Ah,'$'
вообще не нужна?
Ответить с цитированием
  #24  
Старый 14.01.2013, 04:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ей-богу, нет желания отвечать человеку, который даже не пытается разобраться в том, что ему дают.
Я тебе в твоей книге нашел и показал место, где описывается вывод. Дал ссылку на пример из этой же книги. Где есть полный код программы для вывода. За тебя залез в справочники и перекопировал их сюда, выделив все нужное. И несколько раз описал, в чем ошибка.
Если все еще не понятно, что не так - значит матчасть (ассемблер) ты видишь вообще первый раз в жизни. Ни у кого тут нет времени на то, чтобы полностью переписывать на форум какой-нибудь самоучитель по ассемблеру (того же Зубкова). В то время как это, видимо, единственный вариант, когда ты поймешь.
Я понимаю, что тебе программирование на асм нафиг не надо и не интересно. Что оно надо твоему преподу. Но даже в этом случае придется прочитать минимальный самоучитель или пару-тройку вводных статей, хотя бы чтобы отвечать на вопросы препода по задаче. Потому что объяснить ассемблер "на пальцах" в виде одного коротенького поста на форуме невозможно. А писать портянку на 10 экранов, как я уже говорил, времени и желания нет.
Если пытаться разобраться не планируешь - можешь выложить вопрос в "код на шару" с заголовком "решите задачу <subject_name_here>". Может кто и откликнется, хотя на форуме по делфи шансов мало. Тут ассемблерщиков раз-два - и обчелся.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 14.01.2013 в 04:05.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
M.A.D.M.A.N. (14.01.2013)
  #25  
Старый 14.01.2013, 19:12
MahovIV MahovIV вне форума
Новичок
 
Регистрация: 30.12.2012
Сообщения: 77
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Ей-богу, нет желания отвечать человеку, который даже не пытается разобраться в том, что ему дают.
Я тебе в твоей книге нашел и показал место, где описывается вывод. Дал ссылку на пример из этой же книги. Где есть полный код программы для вывода. За тебя залез в справочники и перекопировал их сюда, выделив все нужное. И несколько раз описал, в чем ошибка.
Если все еще не понятно, что не так - значит матчасть (ассемблер) ты видишь вообще первый раз в жизни. Ни у кого тут нет времени на то, чтобы полностью переписывать на форум какой-нибудь самоучитель по ассемблеру (того же Зубкова). В то время как это, видимо, единственный вариант, когда ты поймешь.
Я понимаю, что тебе программирование на асм нафиг не надо и не интересно. Что оно надо твоему преподу. Но даже в этом случае придется прочитать минимальный самоучитель или пару-тройку вводных статей, хотя бы чтобы отвечать на вопросы препода по задаче. Потому что объяснить ассемблер "на пальцах" в виде одного коротенького поста на форуме невозможно. А писать портянку на 10 экранов, как я уже говорил, времени и желания нет.
Если пытаться разобраться не планируешь - можешь выложить вопрос в "код на шару" с заголовком "решите задачу <subject_name_here>". Может кто и откликнется, хотя на форуме по делфи шансов мало. Тут ассемблерщиков раз-два - и обчелся.
Если бы мне было по силам там разобраться, я бы довно там разобрался. Вы слишком преувеличиваете. Вы используете TASM?

Последний раз редактировалось MahovIV, 15.01.2013 в 17:24.
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram