Другие языки программирования и технологии

Изменение программы ассемблера.

Вот исходный текст программы: она решает выражение (D^2-A)^2\(A^2+B)-20, где значения чисел A, B и D заданы по условию. Как переделать эту программу, чтобы мы сами с клавиатуры вписывали значения A, B и D при выполнении программы? sseg segment stack 'stack' db 128 dup (?) sseg ends dseg segment 'data' text1 db 'Programa zarabotala', 13, 10, '$' text2 db '((D^2-A)^2\D^2+B)-20 = $' A dw 0Ah B dw 4 D dw -23; или -17h rez dw ? dseg ends cseg segment 'code' assume cs:cseg, ds:dseg, ss:sseg start proc far mov ax, dseg mov ds, ax m1: lea dx, text1 call WrStr mov dx,offset text2 call WrStr m2: mov ax,A mul ax add ax,B mov bx,ax mov ax,D imul ax sub ax,A mul ax div bx sub ax,20 mov rez, ax m3: xor cx,cx mov bx,10 mod1: xor dx,dx div bx push dx inc cx or ax,ax jnz mod1 print: pop dx add dl,30h mov ah,2 ; функції 02 int 21h loop print m4: mov ah,1 int 21h mov ah, 4ch Int 21h Start endp WrStr proc near mov ah, 09h int 21h ret WrStr endp Cseg ends end start
Рома *
Рома *
334
Нетривиальная задача - ввод чисел с клавиатуры в ассемблере.

;Подпрограмма ввода с клавиатуры
;Результат: ax - введённое число
input proc near
xor di,di
mov bx,10
call inkey
cmp al,'+'
je inp2
cmp al,'-'
jne inp1
inc bh
jmp inp2
inp1: cmp al,0Dh
je inp4
sub al,'0'
jb inp3
cmp al,9
ja inp3
cbw
xchg di,ax
mul bl
add di,ax
inp2: mov ah,2
int 21h
inp3: call inkey
jmp inp1
inp4: mov ax,di
or bh,bh
jz inp5
neg ax
inp5: ret
input endp

;Вспомогательная подпрограмма, фильтрующая ввод с клавиатуры
;Допускаются клавиши Enter, "+", "-" и цифры
;Результат: al и dl - код нажатой клавиши
inkey proc near
mov ah,8
int 21h
mov dl,al
or al,al
jnz ink1
int 21h
jmp inkey
ink1: cmp al,0Dh
je ink2
cmp al,'-'
je ink2
cmp al,'+'
je ink2
cmp al,'0'
jb inkey
cmp al,'9'
ja inkey
ink2: ret
inkey endp

Вызывается так:
call input
mov A,ax
call input
mov B,ax
call input
mov D,ax

Так же придётся дополнить фрагмент кода, выводящий результат на экран:
m3: test ax,ax
jns prnt5
push ax
mov dl,'-'
mov ah,2
int 21h
pop ax
neg ax
prnt5:
xor cx,cx
mov bx,10
mod1: xor dx,dx
...
и т. д.

Кроме того, придётся пересматривать алгоритм вычисления (у вас он помечен m2), исходя из допустимых диапазонов вводимых чисел.
АЯ
Александр Яцук
51 590
Лучший ответ
> Как переделать

Нахаляву - никак.
Nalsur -/-/
Nalsur -/-/
32 502