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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2015, 02:52   #1
Hierophant
Новичок
Джуниор
 
Регистрация: 23.01.2015
Сообщений: 2
Печаль Получение символа с клавиатуры (Ассемблер)

Доброго времени суток, началась сессия и как обычно прижало. Я весь семестр провозился на работе и упустил очень важное, ассемблер. Прошу помочь с лабораторной. Я знаю для Вас это рас плюнуть и даю обещание учить в свободное от учебы и работы время этот язык, знаю его важность и прошу хорошую литературу.
Собственно само задание.
Написать программу на языке Ассемблер, выполняющую следующие действия: программа принимает с клавиатуры целое число, введенное в одном из форматов: в двоичном, восьмеричном, десятичном, шестнадцатеричном или троичном. К этому числу она прибавляет некоторое заданное в тексте программы число и либо выводит результат на экран в одном из указанных форматов, либо преобразует его в формат BCD и затем выводит его десятичное представление. Предполагается, что все числа беззнаковые, и при выходе значения числа за пределы 0-65535 старшие разряды теряются.

Формат числа - 2-ный.
Формат выводы или формат, в который предварительно преобразовывается результат сложения - Двоичный

Очень надеюсь на Ваше понимание и помощь. Если не можете помочь, то помогите хотя бы с ресурсом, где можно это сделать за небольшую плату и без обмана.
Hierophant вне форума Ответить с цитированием
Старый 23.01.2015, 09:15   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

На классическом ассемблере через прерывание на клавиатуру. Опкод INT. В интернете есть справочник по опкодам. Вообще на ассемблере считывание через порты ввода-вывода, то есть на асссемблере под дос типа драйвер пишется. Операционная система имеет значение; вы не указали операционную систему. В Windows используется синтаксис AT&T ассемблера, а в Unix/Linux семействах Intel синтаксис ассемблера. Для программирования под DOS / win98 /win95 требуются специализированные программы для компилирования ассемблерных листингов. В unix/linux системах инструменты поставляются с системой. В операционной системе windows начиная с windows 2000 и включая XP/vista/7 для считывания с клавиатуры используются функции ядра операционной систем (для программирования уровня ядра нужен windows DDK) ntoskrnl, функции драйверов и т.п. В данном случае, можно использовать IDE MASM подключив к ней стандартные заголовочные функции языка C типа scanf , printf, getchar, putchar и др. Прием числа с клавиатуры осуществляет функция scanf. На ассемблере существует две нотации передачи параметров - С и Паскаль. В одной из них параметры передаются с начала до конца (Паскаль нотация). В другой из них параметры передаются с конца в начало (С нотация) Параметры перед вызовом функции помещаются в стек инструкцией PUSH. Стек ограничен, и может быть сорван. Вызов функции осуществляется инструкцией CALL. Константы и переменные задаются в секции .DATA программы Вывод числа может быть осуществлен функцией printf. Учебник по ассемблеру на английском языке есть на сайте http://www.plantation-productions.co...ADosIndex.html
Пример на прерывания: http://inglorion.net/documents/tutor...stut/keyboard/
В ОС windows 2000/XP/7 пользовательская программа не может использовать прерывания и считывать с портов. Весь обмен с клавиатурой через ядро.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 23.01.2015, 13:04   #3
Hierophant
Новичок
Джуниор
 
Регистрация: 23.01.2015
Сообщений: 2
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
На классическом ассемблере через прерывание на клавиатуру. Опкод INT. В интернете есть справочник по опкодам. Вообще на ассемблере считывание через порты ввода-вывода, то есть на асссемблере под дос типа драйвер пишется. Операционная система имеет значение; вы не указали операционную систему. В Windows используется синтаксис AT&T ассемблера, а в Unix/Linux семействах Intel синтаксис ассемблера. Для программирования под DOS / win98 /win95 требуются специализированные программы для компилирования ассемблерных листингов. В unix/linux системах инструменты поставляются с системой. В операционной системе windows начиная с windows 2000 и включая XP/vista/7 для считывания с клавиатуры используются функции ядра операционной систем (для программирования уровня ядра нужен windows DDK) ntoskrnl, функции драйверов и т.п. В данном случае, можно использовать IDE MASM подключив к ней стандартные заголовочные функции языка C типа scanf , printf, getchar, putchar и др. Прием числа с клавиатуры осуществляет функция scanf. На ассемблере существует две нотации передачи параметров - С и Паскаль. В одной из них параметры передаются с начала до конца (Паскаль нотация). В другой из них параметры передаются с конца в начало (С нотация) Параметры перед вызовом функции помещаются в стек инструкцией PUSH. Стек ограничен, и может быть сорван. Вызов функции осуществляется инструкцией CALL. Константы и переменные задаются в секции .DATA программы Вывод числа может быть осуществлен функцией printf. Учебник по ассемблеру на английском языке есть на сайте http://www.plantation-productions.co...ADosIndex.html
Пример на прерывания: http://inglorion.net/documents/tutor...stut/keyboard/
В ОС windows 2000/XP/7 пользовательская программа не может использовать прерывания и считывать с портов. Весь обмен с клавиатурой через ядро.
Мы пишем лабораторные в ОС Windows, но используем DosBox. Я так понимаю это "Для программирования под DOS / win98 /win95 требуются специализированные программы для компилирования ассемблерных листингов."
Hierophant вне форума Ответить с цитированием
Старый 23.01.2015, 13:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да. Turbo Assembler. Если конечно под ДОСом писать. Иначе FASM к примеру. Он умеет компилировать под ДОС.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.01.2015, 13:52   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Формат числа - 2-ный.
значит, проще всего вводить строку и потом уже её переводить в числовое значение.

код ввода строки с консолы в DOS выглядит примерно так (тут используется 10-я функция 21-го прерывания):
Код:
.data
  buffer db 17, 18 Dup (0)

.code
   ....

   mov ah,10
   mov dx,offset buffer
   int 21h

   ;  после выполнения функции ввода, полученная строка в переменной buffer
   ; Первый байт буфера - заданный в коде максимальный размер, 
   ; второй байт содержит число реально введённых символов. 
   ; далее идут введённые символы

Цитата:
Если не можете помочь, то помогите хотя бы с ресурсом, где можно это сделать за небольшую плату
Вы что - хотите заказать работу за оплату? Вам раздел Фриланса нужен?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести ASCII символ введенного с клавиатуры символа? danek130995 Помощь студентам 1 04.11.2014 01:10
Получение кода символа Tribian Общие вопросы C/C++ 1 24.04.2013 09:38
Получение определенного символа из переменной(по номеру) Crystallon JavaScript, Ajax 1 29.11.2011 16:48
Повтор символа при зажатии клавиши клавиатуры veen Общие вопросы Delphi 7 09.01.2011 15:05
ассемблер, замена символа в строке tiger Помощь студентам 3 05.11.2009 15:25