Перестановки (сдвиги) - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите написать, в формате .com и отладить в debug'е (dosbox).
Ввести строку символьных данных, задавая буфер равный 18 байт. Переставить символы в строке следующим образом: первый символ и второй оставить без изменения на место третьего поставить "1", четвертый и пятый оставить без изменения, а на место шестого поставить "2" и т. д. Выдать полученный буфер символов в 6 строку экрана, начиная с 10 позиции.

Решение задачи: «Перестановки (сдвиги)»

textual
Листинг программы
;.386                    ; раскомментируй для тасма +
;.model tiny             ; ^                        |
;.stack 100h             ; ^                        |
;.code                   ; ^------------------------+
 
; fasm code......
org 100h                       ; делаем комку
jmp start                      ;
 
mess1   db  13,10,' String: $'
buff    db  18 dup(0),'$'      ; буфер для строки
 
start:  mov   ah,9             ; запрос на ввод строки
        mov   dx,mess1         ;
        int   21h              ;
        mov   cx,18            ; символов для ввода
        mov   di,buff          ; адрес приёмника строки
        mov   ah,1             ; ввод с эхом!
input:  int   21h              ;
        stosb                  ; сохраняем символ в DI
        loop  input            ; мотаем СХ-раз..
 
        mov   di,buff          ; адрес буфера со-строкой
        mov   bx,di            ;
        add   bx,18            ; ВХ будет указывать на конец строки
        mov   al,'1'           ; символ для записи
cycle:  add   di,2             ; пропускаем в буфере 2 символа
        stosb                  ; запись AL в DI
        inc   al               ; меняем символ на следующий
        cmp   bx,di            ; конец строки?
        jnz   cycle            ; нет - на повтор..
 
        mov   ah,2             ; курсор на позицию!
        xor   bx,bx            ;
        mov   dh,6             ; строка
        mov   dl,10            ; столбец
        int   10h              ;
 
        mov   ah,9             ; выводим буфер на экран!
        mov   dx,buff          ;
        int   21h              ;
 
exit:   xor   ax,ax            ; ждём клавишу..
        int   16h              ;
        int   20h              ; на выход!
;end start                     ; раскомментируй для тасма
                               ; а так-же измени MOV на LEA все DX/DI

Оцени полезность:

6   голосов , оценка 4.5 из 5