Копирование строк - Assembler (223282)
Формулировка задачи:
Задать с клавиатуры строку символов ASCII. В сегменте данных зарезервировать соответствующее число байтовых ячеек. Перенести строку символов,заданных с клавиатуры в сегмент данных,используя префиксы.
Буду рада любым идеям как решить данную задачу.
Решение задачи: «Копирование строк»
textual
Листинг программы
LOCALS .model small .stack 100h .data kbdBuffer db 80, ?, 80 dup(0) ;буфер клавиатуры для ввода строки CrLf db 0Dh, 0Ah, '$' ;символы перевода строки String db ?, 80 dup(0) ;строка в формате длина, символы PromptStr db 'Enter string:', 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax ;ввод строки mov ah, 09h lea dx, PromptStr int 21h lea dx, String call GetStr call ShowString mov ah, 09h lea dx, CrLf int 21h @@Exit: mov ax, 4C00h ;завершение программы int 21h main endp ;Чтение строки с клавиатуры ;на входе: ; ds:dx - адрес строки ;на выходе: ; ds:dx - строка в Pascal формате (длина, символы) GetStr proc push ax push bx push cx push dx push si push di pushf push es mov bx, dx ;сохранение адреса строки ;чтение в буфер из клавиатуры mov ah, 0Ah lea dx, kbdBuffer int 21h ;перевод строки mov ah, 09h lea dx, CrLf int 21h ;копирование из буфера в переменную строки mov cx, 0 mov cl, [kbdBuffer+1] inc cx ;за счёт байта длины строки, количество символов увеличивается push ds pop es lea si, kbdBuffer+1 mov di, bx cld rep movsb @@SkipCopy: pop es popf pop di pop si pop dx pop cx pop bx pop ax ret GetStr endp ShowString proc .386 pusha mov cx, 0 mov cl, String lea si, String add si, cx mov byte ptr [si+1],'$' mov ah, 09h lea dx, String+1 int 21h popa ret ShowString endp end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д