• Главная
  • Исходники Delphi
  • Справочники Delphi
  • Книги Delphi
  • Основы Delphi
  • библиотека Delphi исходников
  • Форум
  • Блоги

Последние записи

  • Геопозиция
  • Колесо фортуны на javascript
  • Вычислить формулу Тейлора на ассемблере
  • Отловить число загружаемых файлов php
  • Вывод текста и числа в одной строке
  • Wapuula — лучший многоцелевой WordPress шаблон бизнес тематики
  • Прокрутка внутри элемента
  • Маркетплейс TemplateMonster приглашает к сотрудничеству разработчиков шаблонов
  • Программа по отправке и принятию UDP пакетов
  • Шаблон Monstroid 2 стал лучшим решением для создания WordPress сайтов

made in programmersforum 3

programmersforum3

  • .NET
  • ASP.NET
  • assembler
  • Basic
  • c/c++
  • CMS
  • Delphi
  • HTML
  • iPhone
  • Java
  • JavaScript
  • Linux
  • Pascal
  • Perl
  • Photoshop
  • php
  • Python
  • Ruby
  • SEO
  • sql
  • VBA
  • Win Api
  • Windows
  • XML и XSLT
  • Администрирование ОС
  • Апгрейды
  • Архив
  • Безопасность
  • Блоги
  • Веб-аналитика
  • Железо
  • Журнал
  • Заметки
  • Имейдж
  • Интервью
  • Исходники
  • Новости
  • Общалка
  • Операционные системы
  • Пост-обзор
  • Профлитература
  • Рассылка
  • Реклама
  • си шарп
  • Советы
  • Софт
  • Статьи
  • Топик-обзор
  • Файлы








21st
Апр

Выполнение задач на Assembler при нажатии на клавишу

Posted by obzor under assembler

Ввести строку из произвольных ASCII-символов при помощи цикла и 01h и выполнить с ней преобразования
<F2> – изменение порядка следования символов исходной строки на обратный
<F7> — по возрастанию (пузырьком)

Пытался сделать пузыриком и инверсный вывод строки
При инверсном выводе цифры выводит не все, а при сочетании букв и цифр выводит различные символы и знаки.
TASM

R71MT

Вот тебе пример..
ТАСМ’a у меня нет, поэтому код не тестировал, но думаю сам разберёшся:

Код:

.386
.model  small
.stack  100h
.data

mess0   db   'Type string: $'
mesF2   db   13,10,'<F2> Revers, <F7> Sort, <Esc> Exit'
        db   13,10,'Press command KEY...',13,10,'$'
array1  db   80 dup('$')
array2  db   80 dup('$')
len     dw   0

.code
start:  mov   ax,@data
       	mov   ds,ax	          ; связка ds/es с сегментом данных
        mov   es,ax

;//==== Ввод строки с клавиатуры --------------
        mov   ah,9
        lea   dx,mess0
        int   21h

        xor   cx,cx           ; длина строки
        lea   di,array1
        mov   ah,1
@01:    int   21h
        cmp   al,13
        je    next
        stosb                 ; сохранить символ в ES:DI
        inc   cx              ; считаем длину строки
        jmp   @01
next:   mov   word[len],cx    ; запомним длину..

;//==== Ждём клавишу юзера.. -----------------
        mov   ah,9
        lea   dx,mesF2
        int   21h

menu:   xor   ax,ax           ; ввод символа без эха
        int   16h
        cmp   al,1Bh          ; AL = ascii Esc ?
        je    exit  
        cmp   ah,3Ch          ; AH = расширенная F2?
        je    @F2
        cmp   ah,41h          ; AH = F7?
        je    @F7
        jmp   menu            ; остальные в игнор\

;//==== F2 Реверс строки ---------------------
@F2:    mov   cx,word[len]
        lea   si,array1
        lea   di,array2
        add   si,cx
        std
@02:    lodsb
        mov   byte[di],al
        inc   di
        loop  @02
        cld

       	mov   ah,9	
       	lea   dx,array2       ; Вывод результата
       	int   21h	
        jmp   menu

;//==== F7 Сортировка пузырьком --------------
@F7:    lea   si,array1
        xor   bx,bx	          ; флаг перестановок
        mov   cx,word[len]
@03:    lodsb		               ; AL = байт из SI
        cmp   al,byte[si]
        jbe   @04
        xchg  al,byte[si]
        mov   byte[si-1],al
        inc   bx 	            ; флаг +1
@04:    loop  @03
        or    bx,bx	          ; перестановки были?
        jnz   @F7

       	mov   ah,9	           ; Вывод результата
       	lea   dx,array1
       	int   21h	

;//==== Завершение программы -----------------
        xor   ax,ax
        int   16h
exit:   mov   ax,4c00h        ; end.
        int   21h
end start

тема на форуме

Похожие статьи

  • Функция pos, как искать далее?
  • Как правильно делать автоматическое создание столбцов с картинками в виде таблицы
  • Отключить автоповтор символов при удержании клавиши
  • Подсчет числа слов в строке по заданному условию
  • Работа со строками, замена символов
  • Как из строки получить время?
  • Посчитать кол-во восклицательных знаков в тексте
  • Универсальная функция для получения из строки определённого фрагмента
  • Посчитать количество знаков в edit
  • Функция удаления не нужных тегов. Быстродействие
Теги: клавиатура | сортировка пузырьком | строки








© Copyright "Клуб программистов" – материалы по Delphi и С++. Создание и продвижние сайта - Веб-сателлит.