rJIA3ACTbIK
  Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору подскажите пожайлуста как сделать вывод целой и дробной части выражения (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  |         Добавлено:   вот так короч сделал    Код: 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: $"   chast_mes    db    'Chastnoe - ','$'           ost_mes        db    'Ostatok  - ','$'                         chastnoe    db    4    dup(0),'$'               ostatok        db    4    dup(0),'$'          a dw 0   b dw 0   c dw 0   d dw 0   RES dw 0   DSEG ENDS   STK SEGMENT STACK   DW 256 (?)   STK ENDS      CODE SEGMENT   BEGIN:    ASSUME CS : CODE, DS : DSEG,SS:STK          MOV AX,DSEG   MOV DS,AX   mov dx,offset mes1   mov ah,9   int 21h ; вывести приглашение ко вводу message1   ;читаем введенную строку и преводим её в 16-ное число в регистре ах   call inint     mov a,ax   mov dx,offset mes2   mov ah,9   int 21h ; вывести приглашение ко вводу message2   ;читаем введенную строку и преводим её в 16-ное число в регистре ах   call inint     mov b,ax   mov dx,offset mes3   mov ah,9   int 21h ; вывести приглашение ко вводу message3   ;читаем введенную строку и преводим её в 16-ное число в регистре ах   call inint     mov c,ax   mov dx,offset mes4   mov ah,9   int 21h ; вывести приглашение ко вводу message4   ;читаем введенную строку и преводим её в 16-ное число в регистре ах   call inint     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 BX,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   IDIV BX                push    dx    ; сохраняем результаты           push    ax                     mov    AH,09h                               mov    DX,offset chast_mes                       int    21h                             ; перевод частного в 10-ю форму и вывод на экран           mov    si,3           pop    ax       next_ch:mov    dh,10           div    dh           add    ah,30h           mov    chastnoe[si],ah              cmp    al,0           je    out_ch           xor    ah,ah           dec    si           jmp    next_ch                  out_ch:    mov    ah,09h           mov    dx,offset chastnoe           int    21h               mov     dl, 0Dh           int     21h           mov     dl, 0Ah           int     21h              mov    AH,09h                               mov    DX,offset ost_mes                       int    21h          ; перевод остатка в 10-ю форму и вывод на экран                   mov    si,3           pop    ax               next_ost: mov    dh,10           div    dh           add    ah,30h           mov    ostatok[si],ah              cmp    al,0           je    out_ost           xor    ah,ah           dec    si           jmp    next_ost                  out_ost:mov    ah,09h           mov    dx,offset ostatok           int    21h      inint   proc    near           push    cx           push    dx           push    bx           push    si   ; В SI будет признак знака, в BX - число, CX тоже пригодится.           xor     si, si           xor     bx, bx           xor     cx, cx   ; Введём первый символ.           mov     ah, 01h           int     21h   ; Здесь и только здесь может попасться минус. Если это не так,   ; перейдём к обычной обработке символа.           cmp     al, '-'           jne     short @ii1   ; Иначе установим признак знака и           inc     si   ; введём следующий символ.   @ii0:   mov     ah, 01h           int     21h   ; Если символ за '9', то ввод некорректный, прекратим этот беспредел.   @ii1:   cmp     al, 39h           ja      short @ii2   ; Переводим символ в число. Если при этом получится нечто отрицательное,   ; то исходный символ перед '0', значит, ввод можно прерывать.           sub     al, 30h           jb      short @ii2   ; Итак, в AL цифра, которую нужно приписать справа к уже имеющемуся   ; в BX числу. Поместим цифру из AL в CX. Именно для этого он обнулялся.           mov     cl, al   ; Умножим текущий результат на 10.           shl     bx, 1   ; BX = 2 * bx           mov     ax, bx  ; AX = 2 * bx           shl     ax, 2   ; AX = 8 * bx           add     bx, ax  ; BX = 10 * bx           add     bx, cx  ; BX = 10 * bx + al   ; И так, пока вводят цифры.           jmp     short @ii0   ; Когда ввели нецифру, посмотрим, надо ли менять знак,   @ii2:   test    si, si           jz      short @ii3           neg     bx   ; перейдём на новую строку   @ii3:   mov     ah, 02h           mov     dl, 0Dh           int     21h           mov     dl, 0Ah           int     21h   ; и запишем результат в AX.           mov     ax, bx           pop     si           pop     bx           pop     dx           pop     cx           ret   inint   endp      ENDS CODE   END BEGIN     |         теперь нужно другую задачу решить   матрица находится в ОП   тип данных беззнаковые слова   найти минимальный и максимальный элемент матрицы и их координаты а также посчитать сумму главной диагонали   загнать в файл исходную матрицу и все полученные значения          |