Базовое задание - 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  ; тут будет то, что ввели

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

5   голосов , оценка 4.6 из 5
Похожие ответы