Автор: rJIA3ACTbIK
Дата сообщения: 20.11.2008 23:45
подскажите пожайлуста как сделать вывод целой и дробной части выражения (A^3+B^3)/(C-D)
переделывал программу сложения десятичных чисел выложенную здесь
Код: DSEG SEGMENT
TEXT1 DB 'Programm for calculation value of expression:',0AH,0DH,'(A^3+B^3)/(C-D)'
mes1 db "Vvedite chislo A: $"
mes2 db "Vvedite chislo B: $"
mes3 db "Vvedite chislo C: $"
mes4 db "Vvedite chislo D: $"
mes5 db "result: $"
crlf db 0Dh,0Ah,'$'
buffer db 4 ; максимальный размер буфера ввода
blength db ? ; размер буфера после считывания
bcontents:
a dw 0
b dw 0
c dw 0
d dw 0
RES dw 0
buf db 16 dup (?)
buf_end db'$'
DSEG ENDS
CODE SEGMENT
BEGIN: ASSUME CS : CODE, DS : DSEG
MOV AX,DSEG
MOV DS,AX
mov dx,offset mes1
mov ah,9
int 21h ; вывести приглашение ко вводу message1
;читаем введенную строку и преводим её в 16-ное число в регистре ах
call vvod
mov a,ax
mov dx,offset mes2
mov ah,9
int 21h ; вывести приглашение ко вводу message2
;читаем введенную строку и преводим её в 16-ное число в регистре ах
call vvod
mov b,ax
mov dx,offset mes3
mov ah,9
int 21h ; вывести приглашение ко вводу message3
;читаем введенную строку и преводим её в 16-ное число в регистре ах
call vvod
mov c,ax
mov dx,offset mes4
mov ah,9
int 21h ; вывести приглашение ко вводу message4
;читаем введенную строку и преводим её в 16-ное число в регистре ах
call vvod
mov d,ax
MOV AX,A ; А в куб
XOR DX,DX
IMUL A
MOV RES,AX
MOV AX,A
IMUL RES
MOV RES,AX
MOV AX,B ; B в куб
XOR DX,DX
IMUL B
MOV BX,AX
MOV AX,A
IMUL BX
MOV B,AX
MOV AX,RES ;А^3+B^3
add AX,BX
mov RES,AX
mov ax,c ;C-D
mov bx,d
sub ax,bx
MOV BX,AX
MOV AX,RES
XOR DX,DX
TEST AX,8000H
JZ _M
NOT DX
_M: DIV BX
MOV BX,AX
vvod PROC NEAR
mov dx,offset buffer
mov ah,0Ah
int 21h ; считать строку символов в буфер
mov dx,offset crlf
mov ah,9
int 21h ; перевод строки
; 76 перевод числа в ASCII-формате из буфера в бинарное число в АХ
xor di,di ; DI = 0 - номер байта в буфере
;mov ах,0h ; АХ = 0 - текущее значение результата
mov ax,0h
mov cl,blength
xor ch,ch
xor bx,bx
mov si,cx ; SI - длина буфера
mov cl,10 ; CL = 10, множитель для MUL
asc2hex:
mov bl,byte ptr bcontents[di]
sub bl,'0' ; цифра = код цифры - код символа "0",
mul cx ; иначе: умножить текущий результат на 10,
add ax,bx ; добавить к нему новую цифру,
inc di ; 90 увеличить счетчик
cmp di,si ; если счетчик+1 меньше числа символов -
jb asc2hex ; продолжить (счетчик считается от 0)
RET
vvod ENDP
ENDS CODE
END BEGIN