Поменять местами уменьшаемое и вычитаемое в готовом калькуляторе - Assembler

Узнай цену своей работы

Формулировка задачи:

доброго времени суток) есть готовая программа - калькулятор. сложение и умножение работают чудесно (потому что без разницы что на что умножать или складывать). а вот с вычитанием и делением поплыл. сначала, почему-то, вводится вычитаемое, а лишь затем уменьшаемое и результат выходит обратный. будьте добры, подскажите, пожалуйста, как поменять их местами? знаю, что нужно покопаться в процедурах input и output, но замена местами bx ax - ничего не дала
model tiny
STACK 256
DATASEG
  mes1 db '1. summa',0dh,0ah,'$'
  mes2 db '2. Raznnost',0dh,0ah,'$'
  mes3 db '3. umnozhenie',0dh,0ah,'$'
  mes4 db '4. delenie',0dh,0ah,'$'
  info db 'Vyberite variant',0dh,0ah,'$'
  lol db 'Input Error!',0dh,0ah,'$'
  info2 db 'Vvedite pervoe chuslo',0dh,0ah,'$'
  info3 db 'Vvedit drugoe chuslo',0dh,0ah,'$'
  errormes db 'incorrect number',0dh,0ah,'$'
  buff db 6,7 Dup(?)
CODESEG
 start:
         mov ax,@data
         mov ds,ax
 
         mov dx,offset mes1
         mov ah,09h
         int 21h
         mov dx,offset mes2
         mov ah,09h
         int 21h
         mov dx,offset mes3
         mov ah,09h
         int 21h
         mov dx,offset mes4
         mov ah,09h
         int 21h
         mov dx,offset info
         mov ah,09h
         int 21h
 
    CALL InputInt

         cmp ax,1
         je summa
         cmp ax,2
         je razn
         cmp ax,3
         je umnozhenie
         cmp ax,4
         je delenie
         jmp error
 
   summa:
         lea dx,info2
         mov ah,09h
         int 21h
 
   CALL InputInt
         
         mov bx,ax
         mov dx,offset info3
         mov ah,09h
         int 21h
   CALL InputInt
         add ax,bx
         jmp kinez
 
   razn: mov dx,offset info2
         mov ah,09h
         int 21h
 
   CALL InputInt
   
         mov bx,ax
         mov dx,offset info3
         mov ah,09h
         int 21h
   CALL InputInt
         sub ax,bx
         jmp kinez
 
umnozhenie: mov dx,offset info2
         mov ah,09h
         int 21h
 
   CALL InputInt
   
         mov bx,ax
         mov dx,offset info3
         mov ah,09h
         int 21h
   CALL InputInt
         mul bx
         jmp kinez
 
delenie: mov dx,offset info2
         mov ah,09h
         int 21h
 
   CALL InputInt
   
         mov bx,ax
         mov dx,offset info3
         mov ah,09h
         int 21h
   CALL InputInt
         xor dx,dx
         div bx
         jmp kinez
 
  error: mov dx,offset lol
         mov ah,09h
         int 21h
   CALL InputInt
         xor ah,ah
         int 16h
  kinez: 
       CALL OutputInt
         xor ah,ah
         int 16h
         mov ah,04Ch
         mov al,1h
         int 21h
InputInt proc
         push bx
         mov ah,0ah
         xor di,di
         mov dx,offset buff
         int 21h
         mov ah,02h
         int 21h
         
         mov si,offset buff+2
         cmp byte ptr [si],"-"
         jnz ii1
         mov di,1
         inc si
     
ii1:     xor ax,ax
         mov bx,10
ii2:     mov cl,[si]
         cmp cl,0dh
         jz endin
         cmp cl,'0'
         jl er
         cmp cl,'9'
         ja er
         sub cl,'0'
         mul bx
         add ax,cx
         inc si
         jmp ii2
er:       
         mov dx,offset errormes
         mov ah,09h
         int 21h
         int 20h
endin:
         cmp di,1
         jnz ii3
         neg ax
ii3: 
         pop bx
         ret
InputInt endp
OutputInt proc
         test ax,ax
         jns oi1
         mov cx,ax
         mov ah,02h
         mov dl,'-'
         int 21h
         mov ax,cx
         neg ax
oi1:
         xor cx,cx
         mov bx,10
oi2:
         xor dx,dx
         div bx
         push dx
         inc cx
         test ax,ax
         jnz oi2
         mov ah,02h
oi3:
         pop dx
         cmp dl,9
         jbe oi4
         add dl,7
oi4:
         add dl,'0'
         int 21h
         loop oi3
ret
OutputInt endp
END start

Решение задачи: «Поменять местами уменьшаемое и вычитаемое в готовом калькуляторе»

textual
Листинг программы
      sub ax,bx

Объяснение кода листинга программы

В данном коде происходит вычитание двух чисел, где ax и bx являются аккумуляторами, содержащими значения вычитаемого и уменьшаемого соответственно. Результат вычитания сохраняется в аккумуляторе ax. Вот список действий в данном коде:

  1. Вычитание: ax - bx
  2. Сохранение результата в аккумуляторе ax

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы