-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinput_output.asm
108 lines (81 loc) · 1.38 KB
/
input_output.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
.model SMALL
.stack
.data
CHAR DB 'J'
STR DB 'Hello world', 10, 13, '$' ;10 -> NEW LINE, 13 -> ALIGN LEFT, $-> END OF STR
VAR DB ?
BUFFER DB 31, 32 DUP(?)
.code
.startup
;|---PRINT STRING---|
MOV DX, OFFSET STR
MOV AH, 09
INT 21H
;MOV AX, OFFSET STR
;PUSH AX
;CALL PRINT_STR
;POP AX
;|---PRINT CHAR---|
MOV DL, CHAR
MOV AH, 02
INT 21H
;MOV AX, WORD PTR CHAR
;PUSH AX
;CALL PRINT_CHAR
;POP AX
;|---INPUT CHAR---|
MOV AH, 01
INT 21H ;AL WILL CONTAIN THE INPUT CHAR
MOV VAR, AL
;|---INPUT STRING---|
MOV BX, OFFSET BUFFER
MOV DX, BX
MOV BYTE[BX], 33 ;PUTTING 33 (32 CHAR + ENTER KEY) ON THE FIRST BYTE OF THE BUFFER. SERVICE 0AH NEED TO KNOW LENGTH OF STRING
MOV AH, 0AH
INT 21H
MOV BX, OFFSET BUFFER
MOV AL, [BX+1] ;AL NOW CONTAINS THE ACTUAL LENGTH OF THE STRING
ADD AL, 2
MOV AH, 0
MOV SI, AX
MOV BYTE[BX+SI], '$' ;PUTTING END OF STRING
MOV DX, OFFSET BUFFER
ADD DX, 2
MOV AH, 09
INT 21H ;OUTPUT OF THE STRING
.exit
PRINT_STR PROC NEAR
PUSH BP
MOV BP, SP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX, [BP+4]
MOV AH, 9
INT 21H
POP DX
POP CX
POP BX
POP AX
POP BP
RET
PRINT_STR ENDP
PRINT_CHAR PROC NEAR
PUSH BP
MOV BP, SP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DL, [BP+4]
MOV AH, 2
INT 21H
POP DX
POP CX
POP BX
POP AX
POP BP
RET
PRINT_CHAR ENDP
end