Code:
inxau macro tbao
LOCAL tbao
mov ah, 9
lea dx, tbao
int 21h
endm
clrscr macro
push ax
mov ah, 0fh
int 10h
mov ah, 00h
int 10h
endm
_stack segment stack; Khai báo doan toan phan
db 100h dup(?)
_stack ends
data segment
n dw ?
sopt DW ?
chiso dw ?
so dw 0
sum dw 0
a dw 100 dup (0)
m1 db 'so luong phan tu: $'
m2 db 0ah,0dh,'day so =$'
m3 db 0ah,0dh,' A[$'
m4 db '] = $'
m5 db 0ah,0dh,'cac so vua vao =$'
m6 db ' $'
m7 db 0ah,0dh,'Day so da sap xep : $'
m8 db 0ah,0dh,'Cac so nguyen to : $'
m9 db 0ah,0dh,'Cac so hoan hao : $'
m11 db 0ah,0dh,'Cac so palindrome : $'
data ends
code segment
assume cs:code, ds:data, ss:_stack
start:
mov ax, data
mov ds, ax
clrscr
inxau m1
;Nhap so chu so
mov ah, 1
int 21h
and al, 0fh
mov ah, 0
mov sopt, ax;chi so vong lap
mov chiso, ax
mov cx, ax
mov bx, offset a
inxau m2
mov n, 0 ;N la chi so cua day
t1:;Nhap mang
inxau m3
mov ax, n
call in10
inxau m4
mov so, 0
call nhap
mov ax, so
mov word ptr [bx], ax
inc n
add bx, 2
loop t1
;in day
inxau m5
mov cx, sopt
mov bx, offset a
t61:
mov ax, word ptr [bx]
call in10
inxau m6
add bx, 2
loop t61
;sap xep
dec chiso;giam chi so vong lap ngoai di 1 truoc khi sxep
t2:
mov cx, sopt
mov bx, offset a
dec cx
t3:
mov ax, word ptr [bx]
mov dx, word ptr [bx+2]
cmp ax, dx
jg t4
;neu khong thi hoan vi
mov word ptr [bx], dx
mov word ptr [bx+2], ax
t4:
add bx, 2
loop t3;vong lap trong luon chay sopt-1 vong
dec chiso
jnz t2;cu moi vong lap ngoai, thi vong lap trong phai chay sopt-1 vong
inxau m7
call inday
inxau m8
call inngto
inxau m9
call inhhao
inxau m11
call inpal
mov ah, 1
int 21h
mov ah, 4ch
int 21h
inday proc
push ax
push bx
push cx
mov cx, sopt
mov di, offset a
t6:
mov ax, word ptr [di]
call in10
inxau m6
add di, 2
loop t6
pop cx
pop bx
pop ax
ret
inday endp
inngto proc
push ax
push bx
push cx
mov cx, sopt
mov di, offset a
ht6:
mov so, 0
mov ax, word ptr [di]
mov so, ax
call ngto
cmp si, 0
je ht10
call in10
inxau m6
ht10:
add di, 2
loop ht6
pop cx
pop bx
pop ax
ret
inngto endp
inhhao proc
push ax
push bx
push cx
mov cx, sopt
mov di, offset a
ht7:
mov so, 0
mov ax, word ptr [di]
mov so, ax
call hoanhao
inxau m6
add di, 2
loop ht7
pop cx
pop bx
pop ax
ret
inhhao endp
inpal proc
push ax
push bx
push cx
mov cx, sopt
mov di, offset a
kt1:
mov so, 0
mov ax, word ptr [di]
mov so, ax
call palindrome
inxau m6
add di, 2
loop kt1
pop cx
pop bx
pop ax
ret
inpal endp
ngto proc
push ax
push bx
push cx
push dx
mov si, 0;khong phai so nguyen to
mov ax, so
mov cx, ax
shr cx, 1 ; so/2
h2:
cmp cx, 1
je h3
xor dx, dx
div cx
and dx, dx; ZF=0 bo
jz h4
mov ax, so
loop h2
h3:
;call in10 ; so la so nguyen to
inc si
h4:
pop dx
pop cx
pop bx
pop ax
ret
ngto endp
hoanhao proc
push ax
push bx
push cx
push dx
mov sum, 1 ; tong ban dau bang 1
mov ax, so
mov cx, ax
shr cx, 1 ; so/2
h5:
xor dx, dx
div cx
and dx, dx ; ZF=1 thi cong ax vao sum
jnz h6
add sum, ax
h6:
cmp cx, 2 ; khi cx=3 xuong gap loop se tru 1( cx=2 da test roi)
jle h7
mov ax, so
loop h5
h7:
mov ax, so
cmp ax, sum
jne h8
call in10 ; so la so hoan hao
h8:
pop dx
pop cx
pop bx
pop ax
ret
hoanhao endp
palindrome proc
push ax
push bx
push cx
push dx
push di
mov ax, so
mov di, 0
mov cx, 0 ; so chu so
mov bx, 10
k1:
xor dx, dx
div bx
push dx
inc cx
and ax, ax
jnz k1
;lay ra tu stack
mov di, cx
cmp di, 1
je k4
push bp
mov bp, sp
shl cx, 1
add bp, cx
mov ax, 0
mov cx, di
k3:
mul bx
mov dx, word ptr ss:[bp]
add ax, dx
sub bp, 2
loop k3
cmp ax, so
jne k2
call in10
k2:
pop bp
mov cx, di
k4:
pop dx
loop k4
pop di
pop dx
pop cx
pop bx
pop ax
ret
palindrome endp
nhap proc ;nhap so co dau
push bx
push cx
push dx
push si
mov bx, 10
xor cx, cx ;Xoa CX ve 0
mov si, cx; ban dau SF=0
l1:
mov ah, 1
int 21h
cmp al, 13
je het
cmp al, '-'
jne t11
inc si ;SF=1
jmp l1
t11:
cmp al, '0'
jl l1
cmp al, '9'
jg l1
xor ah, ah ;phai xoa AH ve 0
and al, 0fh
xchg ax, cx
mul bx
add cx, ax
jmp l1
het:
and si, si
jz t22
neg cx
t22:
mov ax, cx
mov so, ax
pop si
pop dx
pop cx
pop bx
ret
nhap endp
in10 proc
push ax;in ax so co dau
push bx
push cx
push dx
mov bx, 10
mov cx, 0;cx dem so chu so cua ax
and ax, ax
jns l3
push ax
mov al, '-'
mov ah, 0eh
int 10h
pop ax
neg ax
l3:
mov dx, 0
div bx
push dx
inc cx
cmp ax, 0
jnz l3
;lay ra tu stack de in
mov ah, 2
printf:
pop dx
or dl, 30h
int 21h
loop printf
pop dx
pop cx
pop bx
pop ax
ret
in10 endp
code ends
end start
Thầy giúp em tách từng chương trình con trong chương trình trên ạ! như chương trình tìm số nguyên tố, số hoàn hảo,..
em cảm ơn ạ !