Базовое задание - Assembler
Формулировка задачи:
Помогите написать код для masm:
Составить программу на ассемблеру, как программу с расширением .com . Ввести строку символьных данных задавая буфер равный 8 байт. Заменить в это строке 3 последних символов на символ '?'. Выдать полученную строку символов в центре экрана.
Решение задачи: «Базовое задание»
textual
Листинг программы
org 100h lea dx, req mov ah, 9 int 21h ; выводим запрос lea dx, inp mov ah, 0Ah int 21h ; вводим строку mov si, dx lodsw ; ah - реальная длина, al - макс. длина mov bp, si ; сохраняем указатель на начало строки для int 10h mov di, si ; для запонения вопросиками mov cx, 3 ; 3 символа shr ax, 8 ; ax - длина строки push ax ; сохраняем для int 10h sub ax, cx jns @F ; не может быть отрицательным xor ax, ax ; иначе получим хлам на экране @@: add di, ax ; получаем адрес для заполнения mov al, '?' rep stosb pop cx ; длина mov ax, 1301h mov bx, 30h ; видеостраница 0, аттрибут - чёрный на циане mov dx, 80 ; ширина экрана sub dx, cx ; вычитаем длину строки shr dx, 1 ; делим пополам = координата Х для вывода mov dh, 0ch ; координата Y int 10h xor ax, ax int 16h ; getch(); ret buf_sz = 8 req db 'Enter string[8]:$' inp db buf_sz ; наибольшая длина строки len db ? ; сюда вернется настоящая длина buf db buf_sz ; тут будет то, что ввели