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

среда, 18 мая 2011 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Верите в магию числа 13? Повод попробовать новую версию популярной САПР -- КОМПАС-3D V13!
  
  
Все дело в размере! Все дело в размере!
Easy Curves - первый тренажер для женской груди!

  Надоела сутулая спина и обвислый живот? Надоела сутулая спина и обвислый живот?
Тренажер Ab Rocket - великолепный пресс всего за несколько недель!

  Здоровая пища: миф или реальность? Здоровая пища: миф или реальность?
Аэрогриль Flavorwave Turbo Oven - новое слово в кухонном досуге!

 
  

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

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

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

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

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

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

Номер выпуска:1447
Дата выхода:18.05.2011, 23:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:215 / 64
Вопросов / ответов:1 / 1

Вопрос № 183162: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вы...



Вопрос № 183162:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата.
Задача- сформировать строку, содержащую данный символ указанное число раз. Ассемблер-TASM. EXE. Очень надеюсь, что Вы мне поможете.

Отправлен: 13.05.2011, 23:11
Вопрос задал: Сanijke
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Сanijke!
Правильно делаете, что надеетесь У нас Вы всегда найдете решение Ваших проблем.
Небольшой вопрос: где разместить буфер под строку? Можно делать по-разному. Например, в сегменте данных, за программой, можно сделать, чтобы память выделялась при помощи функции 48h. Мне вот захотелось выделить динамический буфер под строку в стеке. Запросив сначала длину строки, выделяем память в стеке, при этом учитываем, что надо еще разместить завершающий нуль и то, чтобы значение вершины стека (SP) оставалось кратным 2.

Код :
;требуется составить подпрограмму решения задачи,  ;использующую инструкции обработки цепочек.  ;Составить программу, осуществляющую ввод необходимых данных,  ;вызов подпрограммы и вывод результата. ;Задача - сформировать строку, содержащую данный символ указанное число раз.   .model small,C   .data ;строки сообщений sGetSym db 0dh,0ah,'Enter symbol:$' sGetCnt db 0dh,0ah,'Enter count: $' sOutStr db 0dh,0ah,'String = $' sAny db 0dh,0ah,'Press any key$'   .code start:  mov ax, @data ;настраиваем все сегментные   mov ds, ax  ;регистры (включая стек)  mov es, ax  ;на сегмент данных  mov ss, ax   call GetNum  ;вводим количество в AX  mov cx, ax  ;сохраним в CX      ;выделим память в стеке  inc ax  ;учтем конечный 0 и округление  inc ax  ;до слова  and ax, 0fffeh ;округлим до слова  mov bp, sp  ;сохраним положение вершины стека  sub sp, ax  ;выделяем буфер в стеке  mov bx, sp  ;адрес буфера в bx, длина строки в cx   call GetSym  ;введем символ   call FormStr  ;сформируем в буфере [bx] строку из cx символов   call PrintStr ;выведем строку   mov sp, bp  ;"выкинем" из стека буфер   lea dx, sAny ;выведем 'Press any key'  mov ah, 9  int 21h   mov ah, 0  ; ждем нажатие на клавишу  int 16h   mov ax,4c00h ; конец работы  int 21h  GetSym proc   ;ввод символа  lea dx, sGetSym  mov ah, 9  int 21h  ; приглашение ввести символ  GetSymLoop:  mov ah, 0  ;ждем нажатие на клавиатуру  int 16h  cmp al, 0  ;управляющие клавиши игнорируем  je GetSymLoop  mov dl, al  ;выведем на экран  mov ah, 2  int 21h  ret   ;результат в al GetSym endp  GetNum proc   ;ввод числа < 32767 (чтобы поместилось в стеке)  lea dx, sGetCnt  mov ah, 9  int 21h  ; приглашение ввести число   xor di, di  ; здесь будем накапливать число  xor bx, bx  ; очередной дес разряд (для сложения со словом) GetNumLoop:  mov ah, 0  ;ждем нажатие на клавиатуру  int 16h  cmp al, 0dh  ;по Enter-у завершаемся  je GetNumRet  cmp al, '0'  ;нецифры игнорируем  jb GetNumLoop  cmp al, '9'  ja GetNumLoop  mov ah, 2  ;выведем на экран  mov dl, al  int 21h  and al, 0fh  ; цифра -> число (30h-39h -> 0-9)  mov bl, al  ; сохраним (bh=0)  mov ax, 10  ; умножим на 10   mul di  ; предыдущее значение  test dx, dx  ; больше cлова - ошибка!  jnz GetNumLoop  add ax, bx  ; добавим сохраненный разряд  jc GetNumLoop ; больше  слова - ошибка!  js GetNumLoop ; больше 32767 - ошибка!  mov di, ax  ; сохраним  jmp GetNumLoop ; на ввод следующей цифры  GetNumRet:  mov ax, di  ; результат в ax  ret GetNum endp   FormStr proc   ;формирование строки  mov di, bx  ;адрес строки - es:di  rep stosb  ;в cx количество, в al символ  mov al, 0  ;закроем строку нулем  stosb  ret FormStr endp  PrintStr proc  ;вывод строки  lea dx, sOutStr  mov ah, 9  int 21h  ;поясняющая строка   mov si, bx  ;адрес строки  mov ah, 2  ;функция вывода символа PrintLoop:  lodsb   ;читаем  cmp al, 0  ;пока не 0  je PrintStrRet  mov dl, al  ;символ для вывода  int 21h  jmp PrintLoop ;по всем  PrintStrRet:  ret PrintStr endp   end start 

Примерный вывод программы:
Код :
Enter count: 12 Enter symbol:z String = zzzzzzzzzzzz Press any key

-----
Люби своего ближнего, как самого себя

Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 14.05.2011, 01:55
Номер ответа: 267142
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 267142 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


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

    Прошлые выпуски
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    16 мая 2011, 14:05
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    13 мая 2011, 20:04
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    12 мая 2011, 02:33

    Все выпуски рассылки
     
     
      
    Вспомни детство! Вспомни детство!
    Аппарат для приготовления сахарной ваты - отличное угощение!

      Худеть не напрягаясь - легко! Худеть не напрягаясь - легко!
    Теряйте лишние килограммы с поясом для похудения Vibra Tone.

      Скачай журнал "Ногтевой сервис" Скачай журнал "Ногтевой сервис"
    20 пошаговых мастер-классов. 100 идей для дизайна.

     
      

    Subscribe рекомендует
     
    Компьютеры и интернет  →   рассылки   и   группы
      
    Уроки Photoshop
    Здесь публикуются самые интересные и уникальные уроки по Фотошопу, написанные профессионалами. Все материалы разделены на несколько категорий: Компьютерная графика, Спецэффекты, Фотобработка, Коллажирование, Дизайн и др.
    Подписчиков: 39674
      XMEDIASOFT - Мультимедиа программы для Mac OS X
    Мультимедиа программы для Mac OS X, аудио и видео конвертеры, грабберы и рипперы, все для мобильных телефонов, создание рингтонов для ipod и iphone, sony erricson, nokia телефонов, создание аудио и видео CD, DVD, драйверы
    Подписчиков: 75
      B2Facebook.com - Переводим Бизнес в Facebook!
    Переводим Бизнес в Facebook Технические Вопросы Продвижение и Монетизация! В рассылке "Переводим бизнес в Facebook" освещаются все вопросы связанные с Facebook. Начиная от технических для начинающих, заканчивая раскруткой и монетизацией. Новости...
    Подписчиков: 154
     
     
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.prog.assembler
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
     
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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