Простейшая программа умножения, используя, допустим, команду mul - Assembler
Формулировка задачи:
Нужно написать простейшую программу умножения, используя, допустим, команду mul.
в чем ошибка?
; Резервирoвание места под стек sseg segment stack 'stack' dw 256 dup(?) sseg ends ; Определение данных data segment ; Сообщения пользователю msg1 db 10,13,'Program of mul of two numbers' db 10,13,'Input first number: ','$' msg2 db 10,13,'Input second number: ','$' msg3 db 10,13,'Result = ','$' data ends ; Сегмент кода code segment assume cs:code,ds:data,ss:sseg start: mov ax,data mov ds,ax lea dx,msg1 call print_msg call input_digit mov bl,al lea dx,msg2 call print_msg call input_digit lea dx,msg3 call print_msg call mu mov ah,4ch int 21h print_msg proc push ax mov ah,09h int 21h pop ax ret print_msg endp input_digit proc input_again: mov ah,01h int 21h cmp al,'0' jl input_again cmp al,'9' jg input_again sub al,30h ret input_digit endp mul proc mov bl, 2 mov al, 3 mul bx pop ax int 21h ret add_and_show endp code ends end start
Решение задачи: «Простейшая программа умножения, используя, допустим, команду mul»
textual
Листинг программы
mul proc mov bl, 2 mov al, 3 mul bx pop ax int 21h ret
Объяснение кода листинга программы
Вот что происходит в коде, оформленное в виде списка:
- Вход в процедуру mul
- Переменная bl получает значение 2
- Переменная al получает значение 3
- Выполняется операция умножения с использованием команды mul
- Выход из процедуры mul
- Выполняется команда pop ax (возвращает значение ax из стека)
- Выполняется команда int 21h (системный вызов)
- Выполняется команда ret (возвращает управление в вызывающую программу)