Копирование строк - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д