-
Notifications
You must be signed in to change notification settings - Fork 0
/
DeCuong_Bai2_Updated.asm
122 lines (103 loc) · 2.97 KB
/
DeCuong_Bai2_Updated.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// BIG NOTE!! : code này nếu tổng chuỗi số là 1 số âm thì sẽ hiển thị ra kết quả sai -> đi thi cút luôn
// định sửa nma lười quá, recommend nên cộng tổng các số âm, tổng các số dương lại rồi so sánh, nếu tổng dương > tổng âm thì lấy tổng dương trừ đi tổng âm là ra kq
// còn nếu tổng âm > tổng dương thì cũng lấy tổng âm trừ đi tổng dương rồi in ra thêm ký tự - là được. Good luck!
.model small
.stack 100
.data
msg1 db 10,13, "Nhap chuoi so(vd: '-12 23 44'): $"
msg2 db 10,13, "Tong cac phan tu trong chuoi so: $"
str db 100 dup("$")
tmp dw ?
sum dw ?
.code
main proc
mov ax, data
mov ds, ax
; in thong bao nhap chuoi so
mov ah,09h
lea dx, msg1
int 21h
; nhap chuoi so
mov ah, 0Ah
lea dx, str
int 21h
;in thong bao tong chuoi so
mov ah, 09h
lea dx, msg2
int 21h
;tinh tong chuoi so
mov cx, 0
mov cl, [str + 1] ; chuyen do dai cua chuoi vao cl
lea si, [str + 2] ; lay dia chi ky tu dau tien luu vao si
mov bx, 10
mov ax, 0
mov sum, ax
calc:
mov dx,[si]
cmp dl,'-'
je next1
mov dx,[si]
cmp dl, 20h
je next2
mul bx
mov dx,[si]
mov dh,0
sub dl,30h
add ax,dx
jmp nextLoop
next1:
inc tmp
jmp nextLoop
next2:
cmp tmp,0
jne tru
jmp cong
tru:
mov tmp,0
sub sum, ax
mov ax,0
jmp nextLoop
cong:
add sum,ax
mov ax,0
jmp nextLoop
nextLoop:
inc si
loop calc
cmp tmp,0
jne tru2
jmp cong2
tru2:
sub sum, ax
jmp done
cong2:
add sum,ax
jmp done
done:
mov ax,sum
call print
mov ah, 4ch
int 21h
main endp
print proc
mov bx, 10
mov cx, 0
chia10:
mov dx, 0
div bx ; ax = ax / bx, dx = dx % bx
push dx ; day dx vao stack
inc cx
cmp ax, 0
je hienthi
jmp chia10
hienthi:
pop dx ; lay dx tu stack
add dl, 30h
mov ah, 2
int 21h
dec cx
cmp cx,0
jne hienthi
ret
print endp
end