Здравствуйте, shenae2009!
Вот и программа...
[code lang=asm h=200]
.model small
.data
;числа-константы из формулы
C24 dw 34
C4 dw 4
C5 dw 5
C6 dw 6
C36 dw 36
C37 dw 37
C8 dw 8
C3 dw 3
C2 dw 2
sRes db 10,13,'Result: $'
.stack 100h ;стек
.code ;сегмент кода
start: mov ax, @data
mov ds, ax ;настраиваем сегментный регистр данных
mov ax, С24 ;24
mov bx, C4 ;4
xor dx, dx ;готовимся к делению
idiv bx ;ax = dx:ax/bx = 24/4, остаток в dx отбрасываем
mov di, ax ;сохраним в di
mov ax, C5 ;5
imul C6 ;dx:ax = 5*6
add ax, di ;dx:ax = 5*6 + 24/4
adc dx, 0 ;на всякий случай, учтем перенос
div C36 ;ax = dx:ax / 36
mov di, ax ;сохраним в di, остаток отбрасываем
;посчитаем вторую половину формулы
mov ax, C8 ;8
imul C6 ;dx:ax = 8*6
add ax, C5 ;dx:ax = 8*6 + 5
adc dx, 0 ;учитываем возможный перенос
div C3 ;ax = dx:ax / 3
mov si, ax ;сохнаним частное, остаток в dx отбрасываем
mov ax, C3 ;3
imul C2 ;dx:ax = 3*2, старшее слово отбрасываем
add si, ax ;si = (8*6+5)/3 + 3*2
mov ax, C8 ;8
xor dx, dx ;dx:ax = 8
div C2 ;ax = dx:ax / 2, остаток в dx отбрасываем
add ax, C3 ;ax = 8/2 +3
imul C37 ;dx:ax = 37 * (8/2 +3)
idiv si ;ax = dx:ax / si = (37 * (8/2 +3)) / ((8*6+5)/3 + 3*2)
add ax, di ;в ax окончательный резльтат
;выведем результат
mov bx, 10 ;система счисления
xor cx, cx ;счетчик в стеке
div_loop:
xor dx,dx
div bx ;получаем младшую цифру
push dx ;запоминаем в стеке
inc cx ;считаем
test ax,ax ;повторяем пока не ноль в ах
jnz div_loop
mov ah, 9
lea dx, sRes
int 21h ;выводим сообщение
dig_loop:
pop dx ;извлекаем цифру
add dl,'0' ;переводим в символ
mov ah, 2
int 21h ;выводим на экран
loop dig_loop
xor ax, ax ;ожидаем любую клавишу
int 16h
mov ax, 4C00h ;выход
int 21h
end start
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен