Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INCLUDE IO.ASM
- STK SEGMENT
- DW 128 DUP(?)
- STK ENDS
- DATA SEGMENT
- A DW ?
- B DW ?
- TWO DW 2
- ERR_1 DB 'ONE NUMBER ARE NEGATIVE!', '$'
- ERR_2 DB 'BOT NUMBERS ARE ODD!', '$'
- DATA ENDS
- CODE SEGMENT
- ASSUME SS: STK, DS: DATA, CS: CODE
- main PROC
- PUSH DS ; SAVE DS
- MOV AX, DATA ; INIT DS
- MOV DS, AX ;
- MOV AX, 0000h ; TELL OS, WHERE MY STACK STARTS
- PUSH AX ;
- inint A ; READ VARIABLES
- inint B ;
- MOV AX, A
- CMP AX, 0
- JL bad_1 ; IF A < 0 PRINT THIS
- MOV AX, B
- CMP AX, 0
- JL bad_1 ; IF A AND B < 0 SKIP *2 GO TO COND2
- MOV AX, A ; MULTIPLY BY 2 AND PRINT
- MUL TWO ;
- outch 2Bh ;
- outch 20h ;
- outint AX ;
- newline
- MOV AX, B ; MULTIPLY BY 2 AND PRINT
- MUL TWO ;
- outch 2Bh ;
- outch 20h ;
- outint AX ;
- JMP cnd2 ; IF OKAY => SKIP ERROR
- bad_1: MOV AH, 09h ; IF ONE NUMBER - NEGATIVE => PRINT ERROR
- LEA DX, ERR_1
- INT 21h
- cnd2: MOV AX, A ; IS (A % 2) == 0?
- IDIV TWO ; IF A EVEN => A-=2, B-=2
- CMP DX, 0 ;
- JE good2 ;
- MOV AX, B
- IDIV TWO
- CMP DX, 0
- JE good2
- MOV AH, 09h ; IF BOTH NUMBERS ARE ODD => PRINT ERROR
- LEA DX, ERR_2
- INT 21h
- JMP fin ; IF BOTH CONDITIONS - FALSE => FINISH PROGRAM
- good2: newline
- MOV AX, A ; SUB 2 AND PRINT
- SUB AX, 2 ;
- outch 2Dh ;
- outch 20h ;
- outint AX ;
- newline
- MOV AX, B ; SUB 2 AND PRINT
- SUB AX, 2 ;
- outch 2Dh ;
- outch 20h ;
- outint AX ;
- fin: MOV AH, 4Ch ; END PROGRAM
- INT 21h
- main ENDP
- CODE ENDS
- END main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement