Другие языки программирования и технологии
Изменение программы ассемблера.
Вот исходный текст программы: она решает выражение (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
Нетривиальная задача - ввод чисел с клавиатуры в ассемблере.
;Подпрограмма ввода с клавиатуры
;Результат: 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), исходя из допустимых диапазонов вводимых чисел.
;Подпрограмма ввода с клавиатуры
;Результат: 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), исходя из допустимых диапазонов вводимых чисел.
> Как переделать
Нахаляву - никак.
Нахаляву - никак.
Похожие вопросы
- Рабочая ли это программа (Ассемблер)?
- Помогите доразбираться в фрагменте программы ассемблера.
- Почему на компонуется программа (Ассемблер)
- Будет ли работать программа? ассемблер.
- помогите написать программы в ассемблере
- Нужна помощь с программой на ассемблере - комментирование каждой строки
- Приведите пожалуйста пример программы на ассемблере, использующая API функцию GlobalMemoryStatus. Заранее спасибо.
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- Нужно составить программу на ассемблере
- Помогите написать небольшую программу на ассемблере (TASM). Подробности внутри.