Ассемблер, длина строки - Assembler
Формулировка задачи:
Ввожу строку с клавиатуры, необходимо получить строку звездочек, длина которой равна веденной длине строки символов. Пример: ввел 345, получил длину ***, ввел 3, получил *, ввел 4563, получил ****.
.model tiny .code org 100h start: ;--------------------- вывод сообщения о вводе строки mov ah, 9h lea dx, mess int 21h ;---------- ввод символов с клав-ры ; mov ah,0Ah ;ввод строки ; lea dx,buf ; mov si,dx ; int 21h mov ah, 0ah lea dx, ans int 21h inc dx mov di, dx mov bl, [di] mov [di], ah xor bh, bh inc di mov byte ptr [di+bx],'$' ;-------- вычисляем по схеме Горнера xor ax, ax ; обнуляем ax lea di, ans+2 ; di- индексный регистр xor cl, cl ; mov cl, ans+1 ; число цифр в буфере mov si, 10 ; si содержит множитель 10 m1: mul si ; умножает число в регистре ax на 10 mov bl, [di] ; получаем адрес числа ; проверка на число cmp bl, '$' jz exit cmp bl, 30h jl er cmp bl, 39h jg er sub bl, 30h ; получаем число отниманием, путем отнимания 30h add ax, bx inc di loop m1 ; сохраняем результат ; mov ah, 9h ; lea dx, mess ; int 21h ;------ перемещение к метке exit jmp exit ;----- вывод об ошибке er: xor ax, ax mov ah, 9h lea dx, err_mes int 21h exit: ;-------------- вывод надписи символы mov ah, 9h lea dx, symb_mes int 21h ;-------------------- вывод символов mov cx, dx m3: mov ah, 09h lea dx, symb int 21h loop m3 ret res dw ? mess db "Введите четырехзначное число: $" err_mes db 10, 13, "Вы ввели не число. Завершение программы!$" symb_mes db 10, 13, "Символы:$" ans db 5, 5 dup(20h) ; максимальная длина числа symb db "*$" end start
Решение задачи: «Ассемблер, длина строки»
textual
Листинг программы
.data? mess db "Введите строку: $" cr db 13,10,"$" buf db 50, 0, 50 dup(?) .startup mov ah, 9h ; приглашение пользователю о вводе строки lea dx, mess int 21h mov ah,0Ah ; ввод строки lea dx,buf int 21h xor cl, cl mov bx, dx mov cl, [bx]+1 ; длина введенной строи - в CL mov ah, 9h ; переход на новую строку lea dx, cr int 21h lp: mov ah, 2 ; и выводим нужное количество звездочек mov dl, '*' int 21h loop lp mov ax, 4c00h int 21h end
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д