Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- STEG SEGMENT PARA STACK "STACK" ;??????? ?????
- DB 64 DUP("STACK")
- STEG ENDS
- DSEG SEGMENT PARA PUBLIC "DATA" ;??????? ?????
- START_MSG DB 'You must enter a correct number in range [-32768, 32767]: ','$'
- SUCCESS_MSG DB 13,10,'Great, your number is correct: ','$'
- ERROR_MSG DB 13,10,'What are you doing? Just stop!',13,10,'$'
- INPUT_TEXT DB 7,?,7 DUP('$')
- COUNT DW -1
- NEG_BOOL DB 1 DUP('0')
- DSEG ENDS
- CSEG SEGMENT PARA PUBLIC "CODE" ;??????? ????
- MAIN PROC FAR
- assume SS:STEG,DS:DSEG,CS:CSEG
- MOV AX, DSEG
- MOV DS, AX
- ;MOV AH, 08H
- ;INT 21H
- MOV AX, 13123
- CALL SHOW_NUM
- MOV AH, 08H
- INT 21H
- MOV AX, 4C00h
- INT 21H
- MAIN ENDP
- SET_NEG:
- PUSH AX
- MOV AL, 1
- MOV NEG_BOOL, AL
- POP AX
- INC DI
- JMP START_POINT
- SET_POS:
- PUSH AX
- MOV AL, 0
- MOV NEG_BOOL, AL
- POP AX
- INC DI
- JMP START_POINT
- INPUT_NUM PROC NEAR
- MOV AH, 9
- LEA DX, START_MSG
- INT 21H
- LEA DX, INPUT_TEXT
- MOV AH, 10
- INT 21H
- LEA DI, INPUT_TEXT+2
- CMP BYTE PTR [DI], '-'
- JE SET_NEG
- CMP BYTE PTR [DI], '+'
- JE SET_POS
- START_POINT:
- MOV BX,10
- XOR AX,AX
- WHILE_NUM:
- MOV CX,COUNT
- INC CX
- MOV COUNT,CX
- XOR CX,CX
- CMP BYTE PTR [DI], 0DH
- JZ CHECK_NUM
- CMP BYTE PTR [DI], 30H
- JB FATAL_ERROR
- CMP BYTE PTR [DI], 39H
- JA FATAL_ERROR
- MOV CL, [DI]
- SUB CL, 30H
- MUL BX
- JC FATAL_ERROR
- ADD AX,CX
- JC FATAL_ERROR
- INC DI
- JMP WHILE_NUM
- ;END WHILE
- FATAL_ERROR:
- MOV AH, 9
- LEA DX, ERROR_MSG
- INT 21H
- MOV AH, 08H
- INT 21H
- MOV AX, 4C00h
- INT 21H
- ;Exit from app
- CHECK_NUM:
- CMP AX, 32768
- JA FATAL_ERROR
- MOV CL, NEG_BOOL
- CMP CL, 1
- JZ END_CHECK
- CMP AX, 32768
- JE FATAL_ERROR
- END_CHECK: RET
- INPUT_NUM ENDP
- SHOW_NUM PROC NEAR
- MOV CX,AX
- MOV AH, 9
- LEA DX, SUCCESS_MSG
- INT 21H
- OR CX,CX
- JNS ZERO_SKIP
- MOV AH,2
- MOV DL, '-'
- INT 21H
- NEG CX
- ZERO_SKIP:
- MOV AX,CX
- ;MOV AX,CX
- PRE_WRITE:
- XOR BX,BX
- MOV BX,10 ;
- XOR CX,CX
- ; MOV CX, COUNT
- WHILE_PUSH:
- XOR DX,DX
- DIV BX
- ADD DL, 30H ;OSTACHA + 30H I POLUCHIM CHISLO = TO SHO NADO
- PUSH DX
- INC CX
- TEST AX,AX
- JNZ WHILE_PUSH
- WHILE_OUT:
- XOR DX,DX
- MOV AH,2
- POP DX
- INT 21H
- LOOP WHILE_OUT
- XOR DX,DX
- RET
- SHOW_NUM ENDP
- CSEG ENDS
- END MAIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement