title: Program solving expression in assembly
body: <p>I have a problem with my simple program in assembly. I'm using DOSBox and TASM. The problem is that the operand types don't match in lines 76, 78, and 80. This is after multiplication. I tried to make some changes by using a different variable size.</p>
  <pre><code>; --------------------------------------------
  ; Equation=(a+c*b)/d-2*c,
  ; --------------------------------------------
  .model small
  .stack 100h
  .data
          a       db 0                           
          b       db 0
          c       db 0
          d       db 0
          result1 db ?
          result2 db ?
         
   
         
          message1 db &quot;Equation: (a+c*b)/d-2*c   a=$&quot;
          message2 db &quot;b=$&quot;
          message3 db &quot;c=$&quot;
          message4 db &quot;d=$&quot;
          message5 db &quot;Result=$&quot;
  .code
   
  start:  mov ax,@data
                  mov ds,ax                      
  
                  mov ax, seg message1   ;get a and save to a variable
                  mov ds,ax      
                  mov dx,offset message1
                  mov ah, 9h
                  int 21h
                  mov ah, 1h
                  int 21h
                  sub al,30h    ;converting to real number
                  mov a,al
                 
                  mov ax, seg message2 ;get b and save to a variable
                  mov ds,ax      
                  mov dx,offset message2
                  mov ah, 9h
                  int 21h
                  mov ah, 1h
                  int 21h
                  sub al,30h    ;converting to real number
                  mov b,al
                 
                 
                  mov ax, seg message3    ;get c and save to a variable
                  mov ds,ax      
                  mov dx,offset message3
                  mov ah, 9h
                  int 21h
                  mov ah, 1h
                  int 21h
                  sub al,30h    ;converting to real number
                  mov c,al
                 
              
                  mov ax, seg message4   ;get d and save to a variable
                  mov ds,ax      
                  mov dx,offset message4
                  mov ah, 9h
                  int 21h
                  mov ah, 1h
                  int 21h
                  sub al,30h   ;converting to real number
                  mov d,al
                 
                 
                  mov al,b         ; (a+c*b) ------------------------error
                  mul c                          
                  add ax,a       ; ------------------------error
         
                  push ax     ;save current ax
         
                  mov ax,c     ;d-2*c------------------------error
                  shl ax,2
                  sub d,ax
                 
                 
                  pop bx     ;get previous ax  to bx
                 
                  div bx     ; div ax:bx
                 
                  mov result1,al
                  mov result2,ah
         
                  add result1,30h   ;converting to string
                  add result2,30h    ;converting to string
                 
                  mov al,result1
                  mov bl,result2
                 
                  mov ax, seg message5
                  mov ds,ax      
                  mov dx,offset message5
                  mov ah, 9h
                  int 21h
                  mov al,result1
                  mov bl,result2
                  mov dl, al
                  mov ah , 2h
                  int 21h
                  mov dl, bl
                  mov ah , 2h
                  int 21h
                 
                  mov ax,4C00h           
                  int 21h
   
  end             start
  </code></pre>