Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include io.asm
- sstack segment stack
- db 128 dup(?)
- sstack ends
- sdata segment
- ; Строка 1
- str1 db 16 dup(0)
- len1 dw 0
- ; Строка 2
- str2 db 128 dup(0)
- len2 dw 0
- ; Строка 3 = Строка 1 + Строка 2
- str3 db 256 dup(0)
- ; esc-последовательность яркого мигающего текста голубого цвета
- ; 1bh - esc, далее параметры: 1-яркий, 5-мигание, 36 - голубой цвет переднего плана
- ; Общий вид: \x1b[параметр[;параметр, ...]m
- strspec db 1bh, "[1;5;36;40m$"
- ; Восстановление по умолчанию
- strret db 1bh, "[0m$"
- sdata ends
- scode segment
- assume cs:scode, ds:sdata, ss:sstack
- start:
- mov ax,sdata
- mov ds,ax
- mov es,ax
- mov cx,0 ; Счётчик символов
- mov bx,0 ; Смещение в строке
- ; Ввод первой строки
- while1:
- inch al ; Ввод символа
- mov dl,24h ; 24h - код символа $
- cmp al,dl ; Сравнение введённого символа с $
- je while1end ; Если равно, выходим из цикла
- mov [str1+bx],al ; Запись символа в буфер
- inc cx ; Увеличение счётчика
- inc bx ; Переход на следующую ячейку буфера
- jmp while1
- ; Запись длины в переменную
- while1end:
- mov len1,cx
- mov cx,0 ; Счётчик символов
- mov bx,0 ; Смещение в строке
- ; Ввод второй строки (то же, что и в while1)
- while2:
- inch al
- mov dl,24h
- cmp al,dl
- je while2end
- mov [str2+bx],al
- inc cx
- inc bx
- jmp while2
- ; Запись длины в переменную
- while2end:
- mov len2,cx
- ; Копирование первой строчки (буфер str1) в начало буфера str3
- mov si,offset str1 ; ds:si - источник
- mov di,offset str3 ; es:di - приёмник
- mov cx,len1 ; количество символов
- rep movsb ; Копирование cx символов из источника в приёмник
- ; Копирование второй строчки (буфер str2) в буфер str3 сразу после первой строчки
- mov si,offset str2 ; ds:si - источник
- mov di,offset str3 ; es:di - приёмник
- add di,[len1] ; Запись будет происходить не с начала буфера str3, а стразу после записанной ранее первой строки
- mov cx,len2 ; Количество копируемых символов
- rep movsb ; Добавление str2 в str3 сразу после записанной ранее str1
- ; Запись знака $ в конец для корректного вывода строки на экран
- mov ax,len1 ; Длина первой строки
- mov bx,len2 ; Длина второй строки
- add bx,ax ; Нужна позиция сразу после двух строк
- mov al,24h ; Код символа $ в al
- mov [str3+bx],al ; Запись в конце буфера str3 (после str1 и str2) символа $
- mov dx,offset strspec ; Вывод esc-последовательности для форматированного ввода
- outstr
- mov dx,offset str3 ; Вывод ответа
- outstr
- mov dx,offset strret ; Восстановление исходного состояния терминала
- outstr
- finish
- scode ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement