Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DATA SEGMENT
- BUFFER DB 7, '?', 6 DUP('?'), '$'
- ERROR DB 'ERROR$'
- ERROR1 DB 'Error inc symb!$'
- HELLO DB 'Enter number from -32768 to 32767: $'
- ERROR11 DB 'Error!'
- ERROR2 DB 'Error incorrect symbols!1$'
- ERROR3 DB 'Error m$'; mul
- ERROR4 DB 'Error a$'; add
- ERROR5 DB 'Error: out of range$'
- ERROR6 DB 'Error: out of range!$'
- NUM DW ?
- MESSAGE2 DB '....', 0DH, 0AH, '$'
- DATA ENDS
- CODE SEGMENT
- ASSUME CS:CODE, DS:DATA
- INIT_DS MACRO
- MOV AX, DATA
- MOV DS, AX
- ENDM
- OUT_STR MACRO STR
- PUSH AX
- LEA DX, STR
- MOV AH, 9
- INT 21H
- ENDM
- START:
- PUSH DS;
- XOR AX,AX;
- INIT_DS
- OUT_STR HELLO
- CALL GET_INTEGER
- CMP DI,2
- JZ ER
- OUT_STR MESSAGE2
- MOV AH, 10H
- INT 16H
- POP AX
- CALL PRINT_INTEGER
- MOV AH, 10H
- INT 16H
- MOV AH, 4CH
- INT 21H
- ER:
- ;MOV DX, OFFSET ERROR
- ; MOV AH,09
- ; INT 21H
- MOV AH, 10H
- INT 16H
- MOV AH, 4CH
- INT 21H
- GET_INTEGER PROC
- MOV AH,0AH ; string input
- XOR DI,DI
- MOV DX,OFFSET BUFFER
- INT 21H
- MOV DL,0AH
- MOV AH,02 ; screen output
- INT 21H
- MOV SI, OFFSET BUFFER+1
- CMP BYTE PTR [SI], 0
- JZ ERG11
- MOV DI,0
- MOV SI,OFFSET BUFFER+2
- CMP BYTE PTR [SI],"+"
- JZ P1
- CMP BYTE PTR [SI],"-"
- JNZ P2
- MOV DI,1
- P1:
- INC SI
- P2:
- XOR AX,AX
- MOV BX,10
- P3:
- MOV CL,[SI]
- CMP CL,0DH
- JZ ENDIN
- CMP CL,'0'
- JB ERG1
- CMP CL,'9'
- JA ERG2
- SUB CL,'0'; error -988484884
- MUL BX
- JC ERG3
- ADD AX,CX
- JC ERG4
- CMP AX, -32768
- JA ERG5
- CMP DI, 1
- JE CONT
- CMP AX, 32767
- JA ERG
- CONT:
- INC SI
- JMP P3
- ERG: ; error borders
- MOV DX, OFFSET ERROR6
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG1: ;incorrect symbols
- MOV DX, OFFSET ERROR1
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG11: ;no symbols entered
- MOV DX, OFFSET ERROR11
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG2: ; incorrect symbols
- MOV DX, OFFSET ERROR2
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG3:
- MOV DX, OFFSET ERROR3
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG4:
- MOV DX, OFFSET ERROR4
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ERG5: ; error out of range
- MOV DX, OFFSET ERROR5
- MOV AH,09
- INT 21H
- MOV DI,2
- RET
- ENDIN:
- ;CMP AX,0
- ;JZ NEWEND
- CMP DI,1
- JZ P4
- MOV NUM, AX
- ret ;AND AX,7FFFH
- ;CMP AX,0
- ;JZ ERG
- ;NEWEND:
- ;RET
- P4:
- NEG AX
- MOV NUM, AX
- RET
- GET_INTEGER ENDP
- PRINT_INTEGER PROC
- MOV BX, NUM;!!
- OR BX, BX
- JNS ML
- MOV AL, '-'
- INT 29H
- NEG BX
- ML:
- MOV AX,BX
- XOR CX,CX
- MOV BX,10
- M2:
- XOR DX,DX
- DIV BX
- ADD DL,'0'
- PUSH DX
- INC CX
- TEST AX,AX
- JNZ M2
- M3:
- POP AX
- INT 29H
- LOOP M3
- RET
- PRINT_INTEGER ENDP
- CODE ENDS
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement