SHARE
TWEET

Untitled

a guest May 20th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DOSSEG
  2. .8086
  3. .MODEL SMALL
  4. ;====================================================================
  5. MY_MUL   MACRO   X,Y,Z  
  6.          mov z,0
  7.          mov z+2,0  
  8.                  MOV     AX,X  
  9.                  MUL     Y    
  10.                  MOV     Z,AX  
  11.                  MOV     Z+2,DX
  12.                  MOV     AX,X+2
  13.                  MUL     Y    
  14.                  ADD    Z+2,AX
  15.          mov ax,Z
  16.                  mov dx,Z+2          
  17. ENDM  
  18. ;====================================================================
  19. .STACK 100h
  20. .DATA
  21.     K_low   EQU     37h
  22.     K_high  EQU     02h
  23.     A       dw      0000h
  24.     B   dw  0000h
  25.     F   db  00h
  26.     D   dd  00000000h
  27.     E   dw  0000h
  28.  
  29.     Temp1   dw  00h
  30.     Temp2   dw  00h,00h
  31.     Temp3   dw  00h,00h
  32.     Temp4   dw  00h,00h
  33.     X   dw  00h,00h
  34. ;--------------------------------------------------------------------
  35. X_Str    db   10 dup (0)
  36. TempStr  db   10 dup (0)
  37. TempBin  dw   0,0
  38. MaxLen   dw   0
  39. X_div2   dw   0,0
  40. Y_div2   dw   0
  41. ;--------------------------------------------------------------------
  42. MESSG_X  DB     13,10,'X=(A4-B3-K)*D1+E4/F2   K=311 (0137h)','$'
  43. MESSG_A  DB     13,10,'A= ','$'
  44. MESSG_B  DB     13,10,'B= ','$'
  45. MESSG_F  DB     13,10,'F= ','$'
  46. MESSG_D  DB     13,10,'D= ','$'
  47. MESSG_E  DB     13,10,'E= ','$'
  48. ;--------------------------------------------------------------------
  49. MESSG_X1  DB  13,10,'X= ','$'
  50. erStr1    db  13,10,'Data not input_variable',13,10,'$'
  51. erStr2    db  13,10,'Incorrectly data ',13,10,'$'
  52. erStr2_1  db  13,10,'F =0 --> divide by zero ',13,10,'$'
  53. erStr3    db  13,10,'Data is too long ',13,10,'$'
  54. ;--------------------------------------------------------------------
  55. Mult10   dw 1,0
  56. my_z     dw 0,0
  57. ;====================================================================
  58. .CODE  
  59. Start:
  60.     mov ax,@data        
  61.     mov ds,ax
  62. call input
  63. call calculation
  64. call output
  65. ;--------------------------------------------------------------------
  66. mov ah,01
  67. int 21h        
  68. ;--------------------------------------------------------------------
  69. mov ah,4Ch
  70. int 21h
  71. ;--------------------------------------------------------------------
  72. input proc
  73.         LEA     DX,MESSG_X    
  74.         MOV     AH,09
  75.         INT     21H
  76. ;--------------------------------------------------------------------  
  77.         LEA     DX,MESSG_A    
  78.         MOV     AH,09
  79.         INT     21H
  80.         mov di,offset A
  81.         mov MaxLen,5
  82.         mov cx,MaxLen
  83.         call input_variable
  84. ;--------------------------------------------------------------------  
  85.         LEA     DX,MESSG_B    
  86.         MOV     AH,09
  87.         INT     21H
  88.         mov di,offset B
  89.         mov MaxLen,5
  90.         mov cx,MaxLen
  91.         call input_variable
  92. ;--------------------------------------------------------------------
  93.         LEA     DX,MESSG_F    
  94.         MOV     AH,09
  95.         INT     21H
  96.         mov di,offset F
  97.         mov MaxLen,3
  98.         mov cx,MaxLen
  99.        
  100.         cmp F,0
  101.         jne dali
  102.         mov ah,09
  103.         mov dx, offset erStr2_1
  104.         int 21h
  105.         mov ah,4Ch
  106.         int 21h
  107.         call input_variable
  108. ;--------------------------------------------------------------------
  109.         LEA     DX,MESSG_D    
  110.         MOV     AH,09
  111.         INT     21H
  112.         mov di,offset D
  113.         mov MaxLen,10
  114.         mov cx,MaxLen
  115.         call input_variable
  116.        
  117. ;--------------------------------------------------------------------
  118.             LEA     DX,MESSG_E    
  119.         MOV     AH,09
  120.         INT     21H
  121.         mov di,offset E
  122.         mov MaxLen,5
  123.         mov cx,MaxLen
  124.         call input_variable
  125.        
  126. ;--------------------------------------------------------------------
  127.  dali:       ret
  128. input endp
  129. ;====================================================================
  130. calculation proc
  131. xor ax,ax
  132. xor bx,bx
  133. xor cx,cx
  134. xor dx,dx
  135. ;--------------------------------------------------------------------
  136. mov ax, B
  137. mov dl,F  
  138. add ax,dx
  139. mov Temp1 , ax
  140.   mov ax, A
  141.   mov dx, Temp1
  142.   mul dx
  143.   mov Temp2, ax
  144.    mov ax , word ptr [D]
  145.    mov dx , word ptr [D+2]
  146.    mov bx , E
  147.     div bx
  148.     mov Temp3 , ax
  149.     clc          
  150.     mov ax, Temp2
  151.     mov dx, Temp2+2
  152.     mov bx, Temp3
  153.     sub ax, bx
  154.     sbb dx, 0
  155.     mov Temp4  , ax
  156.     mov Temp4+2 ,dx
  157.     mov ax, Temp4
  158.     mov dx, Temp4+2
  159.     mov bl, K_low
  160.     mov bh, K_high
  161.     add ax,bx
  162.     adc dx,0
  163.     mov X  , ax
  164.     mov X+2, dx
  165. ret
  166. calculation endp
  167. ;====================================================================
  168. input_variable PROC
  169.         mov si,0                
  170.     In_00:  mov ah,01
  171.         int 21h
  172.         cmp al,0Dh
  173.         je In_1
  174.     In_0:   mov dl,al
  175.         call CHECK_BYTE
  176.         mov TempStr[si],dl
  177.         inc si
  178.         loop In_00
  179.     In_1:   push si
  180.         dec si
  181.         cmp cx,MaxLen
  182.         jne In_2
  183.         call  Err1      
  184.     In_2:   mov bh,0
  185.                 mov bl,TempStr[si]
  186.         MY_MUL Mult10,bx,my_z
  187.         add  TempBin,ax
  188.                 adc  TempBin+2,dx
  189.         mov  bh,0
  190.         mov bl,10
  191.         MY_MUL Mult10,bx,my_z
  192.         mov Mult10,ax
  193.                 mov Mult10+2,dx
  194.         dec si
  195.         cmp si,0
  196.         jge In_2
  197.         mov ax, TempBin
  198.         mov dx,TempBin+2
  199.         pop si
  200.         cmp si,MaxLen
  201.         jl In_3
  202.             cmp MaxLen,10
  203.         jl  In_2_1      
  204.         js  In_Err
  205.                 cmp dx,0FFFFh
  206.         ja In_Err
  207.         jmp In_3
  208.     In_2_1: cmp MaxLen,5
  209.         jl  In_2_2
  210.         cmp dx,00
  211.         ja In_Err      
  212.                 cmp ah,0ffh
  213.         ja In_Err
  214.         jmp In_3
  215.     In_2_2: cmp ax,00FFh
  216.         jbe In_3
  217.     In_Err: LEA     DX,erSTR3
  218.                 MOV     AH,09
  219.                 INT     21H
  220.         mov ah,4Ch
  221.         int 21h
  222. ;--------------------------------------------------------------------
  223.     In_3:   mov [di],ax
  224.         mov [di+2],dx
  225.         mov TempBin,0
  226.         mov TempBin+2,0
  227.         mov Mult10,1        
  228.         mov Mult10+2,0
  229. ;--------------------------------------------------------------------                      
  230.         RET  
  231. input_variable  ENDP
  232. ;====================================================================
  233. Err1 PROC  
  234.               PUBLIC Err1
  235.               LEA     DX,erSTR1
  236.                   MOV     AH,09
  237.                   INT     21H
  238.           mov ah,4Ch
  239.           int 21h
  240.                   RET  
  241. Err1  ENDP
  242. ;====================================================================
  243. CHECK_BYTE  PROC
  244.         PUBLIC CHECK_BYTE
  245.         sub dl,30h
  246.         cmp dl,00
  247.         jl ErS
  248.         cmp dl,0Ah
  249.         jl GO
  250.     ErS:    LEA     DX,erSTR2
  251.                 MOV     AH,09
  252.                 INT     21H
  253.         mov ah,4Ch
  254.         int 21h
  255.        
  256.     GO: RET
  257. CHECK_BYTE ENDP
  258. ;====================================================================
  259. MY_DIV2 proc
  260.     sub cx,cx
  261.     sub bx,bx
  262.     mov dx,X_div2+2
  263.     mov ax,X_div2
  264.   M2_D1:
  265.     cmp dx,Y_div2
  266.     jb M2_D3
  267.     sub ax,Y_div2
  268.     sbb dx,00
  269.     add cx,01
  270.     adc bx,0
  271.     jmp M2_D1
  272.   M2_D3:
  273.     div Y_div2
  274.     add cx,ax
  275.     adc bx,00
  276.     ret
  277. MY_DIV2 ENDP
  278. ;====================================================================        
  279. output PROC
  280.                 mov di,0
  281.         mov Y_div2,10
  282.         mov cx,X
  283.         mov bx,X+2
  284.     O_1:    mov X_div2,cx
  285.         mov X_div2+2,bx
  286.         call my_div2    
  287.         add dl,30h
  288.         mov X_Str[di],dl
  289.         inc di
  290.         cmp bx,0
  291.         ja O_1
  292.         cmp cx,10
  293.         jae O_1
  294.         add cl,30h
  295.         mov X_Str[di],cl
  296.         mov dx,offset MESSG_X1
  297.         mov ah,09
  298.         int 21h        
  299.     O_2:    
  300.         mov dl,X_Str[di]        
  301.         mov ah,02h
  302.         int 21h
  303.         dec di
  304.         jge O_2
  305.         ret
  306. output ENDP
  307. end Start
  308. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top