WMmail.ru - сервис почтовых рассылок

суббота, 15 октября 2011 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
FABI, CORSO COMO, DOLCE VITA - от 1150 рублей!
  
  
Бесплатный демо-счет Бесплатный демо-счет
Откройте демо-счет на FOREX.com.
Без риска, без обязательств
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2767
• повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2610
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2142
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1481
Дата выхода:16.10.2011, 02:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:196 / 61
Вопросов / ответов:1 / 1

Консультация # 184189: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: как сделать программу для 16битного режима процессора х86, которая бы просила от пользователя ввести строку, и выводила ее на экран?В строке можно использовать буквы и цифры. Мне все понятно вроде бы, но требуется сделать это только прерываниями Биос, а не мс-дос. Реально ли такое...


Консультация # 184189:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
как сделать программу для 16битного режима процессора х86, которая бы просила от пользователя ввести строку, и выводила ее на экран?В строке можно использовать буквы и цифры. Мне все понятно вроде бы, но требуется сделать это только прерываниями Биос, а не мс-дос. Реально ли такое? Т.е. без int 21h. И как это сделать, желательно на Масм?

Я пробовал кодить, но у меня что-то не получается, вдобавок не могу обойтись без функций доса + записывается всего 1 клавиша, а мне надо чтоб строка

Код :
org 100h start: next_key: mov ah,10h int 16h cmp al,"f" jz f_pressed cmp al,"x" jz x_pressed  cmp al,"k" jz k_pressed jmp next_key  f_pressed: mov di,offset Mess3 stosb jmp next_key  x_pressed: mov di,offset Mess3 stosb jmp next_key     k_pressed: mov dx,offset Mess3 mov ah,9 int 21h jmp next_key  Mess1 db 'f $'         Mess2 db 'x $' Mess3 db ?,$  buff db 9 dup (?) end start


Суть - программа считывает клавишу, которую ввел пользователь. Если это 'х' или 'f', то с помощью команды stosb пишет содержимое регистра al (в котором код клавиши) туда ,куда указывает di (Т.е. в не объявленную переменную mess3). Если нажать 'k', то она должна выводить переменную mess3 на экран. Но проблема в том, что:
1. вместе с содержимым переменной выводится разный мусор, я так понимаю, это какая-то память.
2. это мс-дос, а мне надо бы биос.
3. в переменную записывается только 1 буква, а не строка

Дата отправки: 11.10.2011, 01:31
Вопрос задал: cherkasoff (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, cherkasoff!
Посмотрите мою программу...
Я даже для выхода из программы не стал явно использовать 21-е прерывание
Удачи в изучении... Если что непонятно, пишите в мини-форум...

Код :
;программа просит от пользователя ввести строку,  ;и выводит ее на экран. В строке можно использовать буквы и цифры.  ;требуется сделать это только прерываниями Биос, а не мс-дос.  assume cs:CSEG,ds:CSEG CSEG segment  org 100h  ;будем делать СОМ-файл start:    ;точка входа  lea si, sEnter ;адрес строки 'Enter string:',0  call Print  ;выведем   lea di, string ;адрес, куда запишем строку  call GetString ;введем строку   lea si, sResult ;адрес строки 0dh,0ah,'Result string:',0  call Print  ;выведем с новой строки (0dh,0ah)  lea si, string ;наша строка  call Print  ;выведем   lea si, sPress ;адрес строки 0dh,0ah,'Press any key',0  call Print  ;выведем  mov ah, 10h  ;подождем нажатия на клавишу,  int 16h  ; чтобы окно сразу не закрылось    ret   ;переход на адрес cs:[0], там находится int 20h  Print proc   ;вывод строки ds:[si] на экран  mov ah, 0eh  ;функция вывода телетайпом PrintLoop:  lodsb   ;очередной символ  cmp al, 0  ;0 - признак конца строки  je PrintRet ;на выход  int 10h  ;БИОС  jmp PrintLoop ;по всем PrintRet:  ret Print endp  GetString proc  ;ввод строки и запись ее по адресу es:[di]  mov ah,10h  ;ждем код  int 16h  cmp al, 0dh  ;Enter - конец ввода!  je GetStringRet   cmp al, '0'  ;проверим на цифры  jb GetString  cmp al, '9'  jbe SetSymbol  cmp al, 'A'  ;на большие английские  jb GetString  cmp al, 'Z'  jbe SetSymbol  cmp al, 'a'  ;на малые английские  jb GetString  cmp al, 'z'  ja GetString ;все остальные игнорируем! SetSymbol:  stosb   ;сохраним  mov ah, 0eh  int 10h  ;эхо на экран  jmp GetString ;на повтор GetStringRet:   mov byte ptr [di],0 ;закроем строку нулем  ret GetString endp  sEnter db 'Enter string: ',0 sResult db 0dh,0ah,'Result string:',0 sPress db 0dh,0ah,'Press any key',0 string db 9 dup (?) ;буфер для строки  CSEG ends  end start 

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 11.10.2011, 02:29

5
Отличный ответ, везде комментарии, все работает как нужно!
-----
Дата оценки: 11.10.2011, 12:00

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


 
 
Комментировать выпуск
     В избранное

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    08 октября 2011, 22:04
RFpro.ru: Ассемблер? Это просто! Учимся программировать    07 октября 2011, 21:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    06 октября 2011, 21:03

Все выпуски рассылки

16 октября 2011 отмечают:
День работников пищевой промышленности
Праздник чтения во Франции
Всемирный день продовольствия
Всемирный день анестезиолога
День работников дорожного хозяйства
День армянской прессы
Гаханбар Митры

Именины: Денис, Иван, Павел, Петр
 
 

Subscribe рекомендует
 
Компьютеры и интернет  →   рассылки   и   группы
  
Свое дело
В данной группе будут публиковаться идеи для открытия собственного дела. Сайт группы Работай сам.ru Присоединяйтесь!
Темы: 384   Участники: 10300
  Уникальные новости от Свободного Журналиста
Я - свободный журналист. Моя работа - дать Вам пищу для ума. Испытываете инфо-голод? Вкусности здесь! Цель создания группы: публикация качественной, инт...
Темы: 61   Участники: 734
  Глупые, но не дающие покоя вопросы
Вы никогда не задумывались над какой-нибудь мелочью, которая никак не может выйти у Вас из головы или, когда совсем не о чем подумать, появляются мысли:...
Темы: 3160   Участники: 3069
 
 
 
Подписан адрес: admin10383.deep@blogger.com
Код этой рассылки: comp.prog.assembler
Архив рассылки
Отписаться:  На сайте  Почтой
Поддержка подписчиков
Убрать рекламу
Другие рассылки этой тематики
Другие рассылки этого автора
 
Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий