Advertisement
Guest User

Untitled

a guest
Sep 11th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. INCLUDE IO.ASM
  2.  
  3. STK SEGMENT
  4.     DW 128 DUP(?)
  5. STK ENDS
  6.  
  7. DATA SEGMENT
  8.     A DW ?
  9.     B DW ?
  10.    
  11.     TWO DW 2
  12.    
  13.     ERR_1 DB 'ONE NUMBER ARE NEGATIVE!', '$'
  14.     ERR_2 DB 'BOT NUMBERS ARE ODD!', '$'
  15. DATA ENDS
  16.  
  17. CODE SEGMENT
  18.     ASSUME SS: STK, DS: DATA, CS: CODE
  19.  
  20.     main PROC
  21.         PUSH DS             ; SAVE DS
  22.    
  23.         MOV AX, DATA        ; INIT DS
  24.         MOV DS, AX          ;
  25.        
  26.         MOV AX, 0000h       ; TELL OS, WHERE MY STACK STARTS
  27.         PUSH AX             ;
  28.        
  29.         inint A             ; READ VARIABLES
  30.         inint B             ;
  31.        
  32.         MOV AX, A
  33.         CMP AX, 0
  34.         JL bad_1            ; IF A < 0 PRINT THIS
  35.        
  36.         MOV AX, B
  37.         CMP AX, 0
  38.         JL bad_1            ; IF A AND B < 0 SKIP *2 GO TO COND2
  39.        
  40.         MOV AX, A           ; MULTIPLY BY 2 AND PRINT
  41.         MUL TWO             ;
  42.         outch 2Bh           ;
  43.         outch 20h           ;
  44.         outint AX           ;
  45.        
  46.         newline
  47.        
  48.         MOV AX, B           ; MULTIPLY BY 2 AND PRINT
  49.         MUL TWO             ;
  50.         outch 2Bh           ;
  51.         outch 20h           ;
  52.         outint AX           ;
  53.        
  54.         JMP cnd2            ; IF OKAY => SKIP ERROR
  55.        
  56. bad_1:  MOV AH, 09h         ; IF ONE NUMBER - NEGATIVE => PRINT ERROR
  57.         LEA DX, ERR_1
  58.         INT 21h
  59.  
  60. cnd2:   MOV AX, A           ; IS (A % 2) == 0?
  61.         IDIV TWO            ; IF A EVEN => A-=2, B-=2
  62.         CMP DX, 0           ;
  63.         JE good2            ;
  64.        
  65.         MOV AX, B
  66.         IDIV TWO
  67.         CMP DX, 0
  68.         JE good2
  69.        
  70.         MOV AH, 09h         ; IF BOTH NUMBERS ARE ODD => PRINT ERROR
  71.         LEA DX, ERR_2
  72.         INT 21h
  73.        
  74.         JMP fin             ; IF BOTH CONDITIONS - FALSE => FINISH PROGRAM
  75.    
  76. good2:  newline
  77.         MOV AX, A           ; SUB 2 AND PRINT
  78.         SUB AX, 2           ;
  79.         outch 2Dh           ;
  80.         outch 20h           ;
  81.         outint AX           ;
  82.        
  83.         newline
  84.        
  85.         MOV AX, B           ; SUB 2 AND PRINT
  86.         SUB AX, 2           ;
  87.         outch 2Dh           ;
  88.         outch 20h           ;
  89.         outint AX           ;
  90.  
  91. fin:    MOV AH, 4Ch         ; END PROGRAM
  92.         INT 21h
  93.     main ENDP
  94. CODE ENDS
  95.  
  96.     END main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement