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 | теперь нужно другую задачу решить матрица находится в ОП тип данных беззнаковые слова найти минимальный и максимальный элемент матрицы и их координаты а также посчитать сумму главной диагонали загнать в файл исходную матрицу и все полученные значения |