Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. STEG SEGMENT PARA STACK "STACK" ;??????? ?????
  2. DB 64 DUP("STACK")
  3.     STEG ENDS
  4. DSEG SEGMENT PARA PUBLIC "DATA" ;??????? ?????
  5. START_MSG DB 'You must enter a correct number in range [-32768, 32767]: ','$'
  6. SUCCESS_MSG DB 13,10,'Great, your number is correct: ','$'
  7. ERROR_MSG DB 13,10,'What are you doing? Just stop!',13,10,'$'
  8. INPUT_TEXT DB 7,?,7 DUP('$')
  9. COUNT DW -1
  10. NEG_BOOL DB 1 DUP('0')
  11. DSEG ENDS
  12. CSEG SEGMENT PARA PUBLIC "CODE"   ;??????? ????
  13. MAIN PROC FAR
  14. assume SS:STEG,DS:DSEG,CS:CSEG    
  15. MOV AX, DSEG
  16. MOV DS, AX
  17.  
  18. ;MOV AH, 08H              
  19. ;INT 21H
  20.  
  21. MOV AX, 13123
  22. CALL SHOW_NUM
  23.  
  24. MOV AH, 08H              
  25. INT 21H
  26. MOV AX, 4C00h            
  27. INT 21H
  28. MAIN ENDP
  29.  
  30. SET_NEG:
  31.     PUSH AX
  32.     MOV AL, 1
  33.     MOV NEG_BOOL, AL
  34.     POP AX
  35.     INC DI
  36.     JMP START_POINT
  37. SET_POS:
  38.     PUSH AX
  39.     MOV AL, 0
  40.     MOV NEG_BOOL, AL
  41.     POP AX
  42.     INC DI
  43.     JMP START_POINT
  44.  
  45.  
  46. INPUT_NUM PROC NEAR  
  47. MOV AH, 9                
  48. LEA DX, START_MSG
  49. INT 21H        
  50. LEA DX, INPUT_TEXT
  51. MOV AH, 10        
  52. INT 21H
  53. LEA DI, INPUT_TEXT+2            
  54. CMP BYTE PTR [DI], '-'            
  55. JE SET_NEG
  56. CMP BYTE PTR [DI], '+'
  57. JE SET_POS
  58.  
  59. START_POINT:
  60.  
  61.  MOV BX,10
  62.  XOR AX,AX
  63.  
  64. WHILE_NUM:
  65.  
  66.  MOV CX,COUNT
  67.  INC CX
  68.  MOV COUNT,CX
  69.  
  70.  XOR CX,CX
  71.  CMP BYTE PTR [DI], 0DH    
  72.  JZ CHECK_NUM
  73.  CMP BYTE PTR [DI], 30H
  74.  JB FATAL_ERROR
  75.  CMP BYTE PTR [DI], 39H  
  76.  JA FATAL_ERROR
  77.  MOV CL, [DI]
  78.  SUB CL, 30H      
  79.  MUL BX          
  80.  JC FATAL_ERROR
  81.  ADD AX,CX
  82.  JC FATAL_ERROR  
  83.  INC DI
  84. JMP WHILE_NUM
  85. ;END WHILE
  86.  
  87. FATAL_ERROR:
  88.  MOV AH, 9
  89.  LEA DX, ERROR_MSG
  90.  INT 21H
  91.  MOV AH, 08H
  92.  INT 21H
  93.  MOV AX, 4C00h  
  94.  INT 21H
  95.  ;Exit from app
  96.  
  97. CHECK_NUM:
  98.  CMP AX, 32768
  99.  JA FATAL_ERROR
  100.  MOV CL, NEG_BOOL
  101.  CMP CL, 1
  102.  JZ END_CHECK
  103.  CMP AX, 32768
  104.  JE FATAL_ERROR
  105.  
  106. END_CHECK: RET
  107.  
  108. INPUT_NUM ENDP
  109.  
  110. SHOW_NUM PROC NEAR
  111. MOV CX,AX
  112. MOV AH, 9
  113. LEA DX, SUCCESS_MSG
  114. INT 21H
  115.  
  116. OR CX,CX
  117. JNS ZERO_SKIP
  118. MOV AH,2
  119. MOV DL, '-'
  120. INT 21H
  121. NEG CX
  122. ZERO_SKIP:
  123. MOV AX,CX
  124. ;MOV AX,CX
  125.  
  126.  
  127. PRE_WRITE:
  128.     XOR BX,BX
  129.     MOV BX,10 ;
  130.     XOR CX,CX
  131.     ; MOV CX, COUNT
  132.    
  133. WHILE_PUSH:
  134.     XOR DX,DX
  135.     DIV BX
  136.     ADD DL, 30H ;OSTACHA + 30H I POLUCHIM CHISLO = TO SHO NADO
  137.     PUSH DX
  138.     INC CX
  139.     TEST AX,AX
  140.     JNZ WHILE_PUSH
  141. WHILE_OUT:
  142.     XOR DX,DX
  143.     MOV AH,2
  144.     POP DX
  145.     INT 21H
  146.     LOOP WHILE_OUT
  147.     XOR DX,DX
  148.    
  149. RET
  150. SHOW_NUM ENDP
  151. CSEG ENDS
  152. END MAIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement