Ассемблер, длина строки - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 4.6 из 5