Professional Documents
Culture Documents
Bai Tap VXL
Bai Tap VXL
PHONG KY THUAT VI X LY
BT LT . ASSEMBLER
ThS.KS.NGUYEN NH LUYEN
'Chuong trinh In chuoi nguoc', '$' ;db khai bao pham vi 8 bit <->256 ki tu
13,10,'Nhap 1 chuoi
:','$' ;13,16 xuong dau dong
13,10,'Ket qua
:$'
db
13, 10,'Chuoi khong hop le !$'
equ
100
MAX dup(?)
db
?
mov
mov
mov
bx, @data
ds, bx
es, bx
mov
dx, offset about
call
disp_string
call
getstring
call
process
call
finish.
;-------------------------------; Nhap 1 chuoi tu ban fim
; tra ve: AX=chi toi chuoi nhap
;-------------------------------getstring
proc
push
bx
push
cx
push
dx
mov
dx, offset prompt
call
disp_string
mov
ah, 3Fh
; nhap chuoi
mov
bx, 0
mov
cx, MAX
mov
dx, offset chuoi
; chua vao DX
int
21h
sub
ax, 2 ;do dai thuc cua chuoi
cmp
ax, 0
jg
validstring
mov
dx, offset errormess
call
disp_string
call
finish
ret
validstring:
mov
word ptr len, ax
mov
ax, dx
pop
dx
pop
cx
pop
bx
ret
getstring
endp
;----------------------;----------------------process
proc
mov
dx, offset mess
call
disp_string
KHOA KT&CN
1
2
BT LT . ASSEMBLER
mov
bx, offset chuoi
mov
cx, 0
mov
cl, len
mainloop:
PHONG KY THUAT VI X LY
mov
si, cx
dec
si
mov
dl, [bx+si]
call
write_char
loop
mainloop
ret
process
endp
;--------------------end
start
ThS.KS.NGUYEN NH LUYEN
;
BAI TAP2
;
TLINK BT2+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
N
MAX
daychuoiso
.code
start:
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt
call
disp_string
call
getnumber
mov
N, al
ret
getdata
endp
;------------------------------process
proc
mov
bx, offset daychuoiso
mov
dl, N
call
uocso
mov
bx, offset daychuoiso
disp_loop:
mov
dl, [bx]
cmp
dl, '$'
je
exit_disp_loop
call
write_decimal
mov
dl, ' '
call
write_char
KHOA KT&CN
inc
bx
jmp
disp_loop
exit_disp_loop:
ret
process
endp
;--------------------------------
BT LT . ASSEMBLER
; tao day uoc so cua so N, ket qua dua vao chuoi do BX chi toi
; DL=so nguyen can tim USC
;--------------------------------uocso
proc
push
ax
PHONGpush
KY THUAT
VI X LY
ThS.KS.NGUYEN NH LUYEN
cx
mov
cl, 1
uocsoloop:
mov
ah, 0
mov
al, dl
div
cl
;lay AX=N chia CL, AH=du, AL=thuong
cmp
ah, 0
jne
cont
mov
[bx], al
inc
bx
cont:
inc
cl
cmp
cl, dl
jg
uocso_done
jmp
uocsoloop
uocso_done:
mov
al, '$'
mov
[bx], al
;ket thuc chuoi
pop
cx
pop
ax
ret
uocso
endp
;-------------------------------end
start
;
BAI TAP3
;
TLINK BT3+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
mess
db
errormess
N1
N2
MAX
daychuoiso1
daychuoiso2
.code
mov
mov
bx, @data
ds, bx
mov
KHOA KT&CN
BT LT . ASSEMBLER
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
N1, al
mov
call
call
mov
ret
N2, al
getdata
endp
;------------------------------process
proc
PHONG;tao
KY THUAT
XN1
LY
day USCVIcua
mov
bx, offset daychuoiso1
mov
dl, N1
call
uocso
;tao day USC cua N2
mov
bx, offset daychuoiso2
mov
dl, N2
call
uocso
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
BT LT . ASSEMBLER
mov
mov
div
cmp
jne
mov
inc
ah, 0
al, dl
cl
ah, 0
cont
[bx], al
bx
cont:
inc
cmp
jg
jmp
uocso_done:
mov
mov
pop
pop
ret
uocso
cl
cl, dl
uocso_done
uocsoloop
al, '$'
[bx], al
cx
ax
endp
;-------------------------------end
start
;
BAI TAP4
;
TLINK BT4+BTlib
;----------------dosseg
.model small
PHONG.stack
KY THUAT
200h VI X LY
.data
about db
prompt1db
prompt2db
mess
db
errormess
N1
N2
N
MAX
daychuoiso1
daychuoiso2
.code
ThS.KS.NGUYEN NH LUYEN
mov
mov
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
N1, al
mov
call
call
mov
KHOA KT&CN
BT LT . ASSEMBLER
ret
getdata
endp
;------------------------------process
proc
mov
dl, N1
mov
dh, N2
cmp
dl, dh
jg
dl_greater
mov
N, dh
jmp
compare_done
dl_greater:
mov
N, dl
compare_done:
;N = so max
mainloop:
mov
ax, word ptr N
div
N1
;AX chia N1
cmp
ah, 0
;neu chia het
jne
cont
mov
ah, 0
mov
al, N
div
N2
;AX chia N2
cmp
ah, 0
;neu chia het
jne
cont
jmp
process_done
cont:
inc
N
jmp
mainloop
process_done:
mov
call
mov
call
ret
disp_string
dl, N
write_decimal
process
endp
PHONG KY THUAT VI X LY
;-------------------------------end
start
ThS.KS.NGUYEN NH LUYEN
;
BAI TAP5
;
TLINK BT5+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
mess
db
errormess
N1
N2
.code
mov
mov
bx, @data
ds, bx
mov
KHOA KT&CN
BT LT . ASSEMBLER
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
N1, al
mov
call
call
mov
ret
getdata
endp
;------------------------------process
proc
mov
al, N1
add
al, N2
process_done:
mov
dx, offset mess
call
disp_string
mov
dl, al
call
write_decimal
ret
process
endp
;-------------------------------end
start
;
BAI TAP6
;
TLINK BT6+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
'Chuong trinh hien hieu cua 2 so nguyen duong ', '$'
prompt1db
13,10,'Nhap so thu 1 (<100):','$'
PHONGprompt2db
KY THUAT VI X
LY
ThS.KS.NGUYEN NH LUYEN
13,10,'Nhap
so thu 2 (<100):','$'
mess
db
13,10,'Hieu 2 so la
:','$'
errormess
db
'Khong hop le !','$'
N1
db
?
N2
db
?
sign_flag
db
0
.code
start:
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
KHOA KT&CN
BT LT . ASSEMBLER
call
call
mov
disp_string
getnumber
N1, al
mov
call
call
mov
ret
getdata
endp
;------------------------------process
proc
mov
al, N1
sub
al, N2
jns
process_done
mov
sign_flag, 1
mov
ah, 0FFh
;ket qua am
sub
ah, al
inc
ah
mov
al, ah
process_done:
mov
dx, offset mess
call
disp_string
cmp
sign_flag, 0
je
cont
mov
dl, '-'
call
write_char
cont:
mov
dl, al
call
write_decimal
ret
process
endp
;-------------------------------end
start
;
BAI TAP7
;
TLINK BT7+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about
db
prompt1db
13,10,'Nhap so thu 1 (<100):','$'
prompt2db
13,10,'Nhap so thu 2 (<100):','$'
mess
db
13,10,'Tich 2 so la
:','$'
errormess
db
'Khong hop le !','$'
N1
db
?
PHONGN2
KY THUAT VI X
db LY?
over_flag
db
0
.code
start:
ThS.KS.NGUYEN NH LUYEN
bx, @data
ds, bx
mov
call
call
call
KHOA KT&CN
BT LT . ASSEMBLER
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
N1, al
mov
call
call
mov
ret
getdata
endp
;------------------------------process
proc
mov
al, N1
mul
N2
jno
process_done
mov
over_flag, 1 ;tran so
process_done:
mov
dx, offset mess
call
disp_string
cmp
over_flag, 0
je
cont
mov
dl, '#'
call
write_char
cont:
;
mov
dl, ah
;
call
write_decimal
mov
dl, al
call
write_decimal
ret
process
endp
;-------------------------------end
start
;
BAI TAP8
;
TLINK BT8+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
mess
db
errormess
N1
N2
.code
extrn string_to_number: near, disp_string: near
extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:
PHONGmov
KY THUAT
VI X LY
bx, @data
mov
ds, bx
mov
call
call
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
BT LT . ASSEMBLER
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
N1, al
mov
call
call
mov
ret
getdata
endp
;------------------------------process
proc
mov
ah, 0
mov
al, N1
div
N2
process_done:
mov
dx, offset mess
call
disp_string
mov
dl, al
call
write_decimal
ret
process
endp
;-------------------------------end
start
;
BAI TAP9
;
TLINK BT9+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
N
S
.code
mov
mov
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt
10
call
call
mov
disp_string
getnumber
N, al
PHONG KY THUAT VI X LY
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
BT LT . ASSEMBLER
ret
getdata
endp
;------------------------------process
proc
mov
ch, 0
mov
cl, N
mainloop:
mov
ax, 0
mov
al, cl
mul
cl
add
S, ax
loop
mainloop
mov
call
mov
mov
shr
mov
call
mov
and
mov
call
process
ret
;-------------------------------end
start
;
BAI TAP10
;
TLINK BT10+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
N
S
.code
mov
mov
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt
call
disp_string
call
getnumber
mov
N, al
KHOA KT&CN
BT LT . ASSEMBLER
11
12
ret
PHONG KY THUAT
getdata
endp VI X LY
;------------------------------process
proc
mov
ch, 0
mov
cl, N
mainloop:
mov
ax, 0
mov
al, cl
dec
al
mul
cl
add
S, ax
loop
mainloop
cont:
process
ThS.KS.NGUYEN NH LUYEN
mov
call
mov
mov
shr
cmp
jle
mov
call
mov
and
mov
call
ax, S
ax, 0FFh
dl, al
write_decimal
ret
;AX=(CL-1) x CL
endp
;-------------------------------end
start
;
BAI TAP11
;
TLINK BT11+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess1 db
mess2 db
errormess
MAX
chuoi db
len
.code
start:
bx, @data
ds, bx
es, bx
mov
call
call
call
call
KHOA KT&CN
BT LT . ASSEMBLER
13
getstring
proc
push
bx
push
cx
push
dx
mov
dx, offset prompt
PHONGcall
KY THUAT
VI X LY
disp_string
mov
ah, 3Fh
; nhap chuoi
mov
bx, 0
mov
cx, MAX
mov
dx, offset chuoi
; chua vao DX
int
21h
sub
ax, 2 ;do dai thuc cua chuoi
cmp
ax, 0
jg
validstring
mov
dx, offset errormess
call
disp_string
call
finish
ret
validstring:
mov
word ptr len, ax
mov
ax, dx
pop
dx
pop
cx
pop
bx
ret
getstring
endp
;----------------------process
proc
push
ax
push
bx
push
cx
push
dx
push
si
push
di
mov
mov
mov
cld
mainloop:
lodsb
cmp
jl
cmp
jg
jmp
IsSmallYet:
cmp
jl
cmp
jg
cont:
loop
jmp
cx, 0
cl, len
si, offset chuoi
al, 41h
;A
IsSBOrPointOrComm
al, 5Ah
;Z
IsSmallYet
cont
al, 61h
IsSBOrPointOrComm
al, 7Ah
IsSBOrPointOrComm
mainloop
RightText
IsSBOrPointOrComm:
cmp
je
cmp
je
cmp
KHOA KT&CN
je
mov
jmp
RightText:
mov
DisplayMess:
call
pop
pop
pop
pop
ThS.KS.NGUYEN NH LUYEN
BT LT . ASSEMBLER
RightText
dx, offset mess2
DisplayMess
dx, offset mess1
disp_string
di
si
dx
cx
;wrong
14
pop
pop
ret
bx
ax
process
endp
;----------------------PHONGend
KY THUAT VI X
LY
start
ThS.KS.NGUYEN NH LUYEN
;
BAI TAP12
;
TLINK BT12+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
prompt3db
a
b
c
mess1 db
mess2 db
errormess
MAX
chuoisodb
.code
start:
bx, @data
ds, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
a, al
mov
call
call
mov
KHOA KT&CN
mov
call
call
mov
ret
BT LT . ASSEMBLER
getdata
endp
;------------------------------process
proc
compare:
mov
al, 0
add
al, a
add
al, b
cmp
al, c
jle
notvalid
mov
al, 0
add
al, b
add
al, c
cmp
al, a
jle
notvalid
15
mov
al, 0
add
al, c
add
al, a
cmp
al, b
jle
notvalid
PHONGmov
KY THUAT
VI X mess1
LY
dx, offset
call
disp_string
ret
notvalid:
mov
dx, offset mess2
call
disp_string
ret
process
endp
;-------------------------------end
start
ThS.KS.NGUYEN NH LUYEN
;
BAI TAP13
;
TLINK BT13+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
tab_na db
MAX
chuoi db
len
so_na db
.code
start:
bx, @data
ds, bx
es, bx
mov
call
KHOA KT&CN
call
getstring
call
process
call
finish
;-------------------------------; Nhap 1 chuoi tu ban fim
; tra ve: AX=chi toi chuoi nhap
;-------------------------------getstring
proc
push
bx
push
cx
push
dx
mov
dx, offset prompt
call
disp_string
mov
ah, 3Fh
; nhap chuoi
mov
bx, 0
mov
cx, MAX
mov
dx, offset chuoi
; chua vao DX
int
21h
sub
ax, 2 ;do dai thuc cua chuoi
cmp
ax, 0
jg
validstring
mov
dx, offset errormess
call
disp_string
call
finish
ret
validstring:
mov
word ptr len, ax
mov
ax, dx
BT LT . ASSEMBLER
16
pop
dx
pop
cx
pop
bx
ret
getstring
endp
PHONG
KY THUAT VI X LY
;----------------------process
proc
push
ax
push
bx
push
cx
push
dx
push
si
push
di
mov
so_na, 0
mov
bx, offset chuoi
mov
cx, word ptr len
duyetchuoi:
mov
si, 0
duyetbang:
mov
al, [tab_na+si]
cmp
al, [bx]
jne
not_vowel
inc
so_na
jmp
cont
not_vowel:
inc
si
cmp
si, 10
jl
duyetbang
cont:
inc
bx
loop
duyetchuoi
mov
call
mov
call
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
pop
pop
pop
pop
pop
pop
ret
BT LT . ASSEMBLER
di
si
dx
cx
bx
ax
process
endp
;----------------------end
start
;
BAI TAP14
;
TLINK BT14+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
MAX
chuoi db
len
Upper db
.code
start:
bx, @data
ds, bx
es, bx
17
mov
dx, offset about
call
disp_string
call
getstring
call
process
call
finish
;-------------------------------PHONG
KY THUAT VI X LY
; Nhap 1 chuoi tu ban fim
; tra ve: AX=chi toi chuoi nhap
;-------------------------------getstring
proc
push
bx
push
cx
push
dx
mov
dx, offset prompt
call
disp_string
mov
ah, 3Fh
; nhap chuoi
mov
bx, 0
mov
cx, MAX
mov
dx, offset chuoi
; chua vao DX
int
21h
sub
ax, 2 ;do dai thuc cua chuoi
cmp
ax, 0
jg
validstring
mov
dx, offset errormess
call
disp_string
call
finish
ret
validstring:
KHOA KT&CN
BT LT . ASSEMBLER
mov
word ptr len, ax
mov
ax, dx
pop
dx
pop
cx
pop
bx
ret
getstring
endp
;----------------------process
proc
push
bx
push
cx
push
dx
mov
spaceloop:
mov
cmp
jne
inc
jmp
spacedone:
mov
mov
mov
dec
mainloop:
cmp
jne
call
jmp
xulyLower:
call
tieptuc:
inc
mov
cmp
jne
mov
inc
dec
KhongDoi:
loop
mov
ThS.KS.NGUYEN NH LUYEN
bx, ax
;BX chi toi chuoi
;loai cac khoang trang dau
al, [bx]
al, ' '
spacedone
bx
spaceloop
Upper, 1
ch, 0
cl, len
cl
Upper, 1
xulyLower
UpperCase
tieptuc
LowerCase
bx
bx
cx
al, [bx]
al, ' '
KhongDoi
Upper, 1
mainloop
dx, offset mess
18
call
disp_string
mov
cx, word ptr len
mov
bx, offset chuoi
disploop:
PHONGmov
KY THUAT
VI X LY
dl, [bx]
mov
ah, 2
int
21h
inc
bx
loop
disploop
pop
dx
pop
cx
pop
bx
ret
process
endp
;--------------------UpperCase
proc
mov
al, [bx]
cmp
al, 61h
jl
Upperdone
KHOA KT&CN
BT LT . ASSEMBLER
sub
al, 20h
Upperdone:
mov
[bx], al
mov
Upper, 0
ret
UpperCase
endp
;----------------------LowerCase
proc
mov
al, [bx]
cmp
al, 61h
jge
Lowerdone
add
al, 20h
Lowerdone:
mov
[bx], al
ret
LowerCase
endp
;----------------------end
start
;
BAI TAP15
;
TLINK BT15+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
prompt3db
mess
db
errormess
MAX
daychuoiso
.code
extrn string_to_number: near, disp_string: near
extrn finish: near, getnumber: near, sort_array: near
start:
mov
mov
mov
ThS.KS.NGUYEN NH LUYEN
bx, @data
ds, bx
es, bx
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
19
mov
call
call
mov
PHONGmov
KY THUAT
VI X prompt2
LY
dx, offset
call
disp_string
call
getnumber
mov
daychuoiso[1], al
mov
call
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
BT LT . ASSEMBLER
call
mov
mov
ret
getnumber
daychuoiso[2], al
daychuoiso[3], '$'
mov
call
mov
call
ret
getdata
endp
;------------------------------process
proc
mov
dx, offset daychuoiso
mov
ax, 3
call
sort_array
call
doichuoiso
process
endp
;-------------------------------; doi chuoi so thanh chuoi ky tu de in len man hinh
;-------------------------------doichuoiso
proc
mov
di, 0
mov
cx, 3
cld
mov
si, offset daychuoiso
convertloop:
lodsb
;dua vao AL
add
al, '0'
mov
daychuoiso[di], al
inc
di
loop
convertloop
ret
doichuoiso
endp
;---------------------------end
start
;
BAI TAP16
;
TLINK BT16+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt1db
prompt2db
prompt3db
mess1 db
mess2 db
errormess
MAX
daychuoiso
.code
extrn string_to_number: near, disp_string: near
extrn finish: near, getnumber: near
20
start:
mov
mov
mov
bx, @data
ds, bx
es, bx
PHONG KY THUAT VI X LY
ThS.KS.NGUYEN NH LUYEN
KHOA KT&CN
BT LT . ASSEMBLER
mov
dx, offset about
call
disp_string
call
getdata
call
process
call
finish
;--------------------getdata
proc
mov
dx, offset prompt1
call
disp_string
call
getnumber
mov
daychuoiso[0], al
mov
call
call
mov
mov
call
call
mov
mov
ret
mov
call
mov
mov
int
mov
call
mov
mov
int
ret
getdata
endp
;------------------------------process
proc
call
sort_array
mov
di, 0
mov
cx, 3
cld
mov
si, offset daychuoiso
convertloop:
lodsb
;dua vao AL
add
al, '0'
mov
daychuoiso[di], al
inc
di
loop
convertloop
process
endp
;-------------------------------; dung buble sort
;-------------------------------sort_array
proc
mov
cx, 1
;lap n-1 lan
main_loop:
mov
si, 3
;n - 1 vi chi so tinh tu 0
small_loop:
mov
dl, daychuoiso[si-2]
mov
dh, daychuoiso[si-1]
cmp
dl, dh
jl
cont
mov
daychuoiso[si-1], dl
21
KHOA KT&CN
BT LT . ASSEMBLER
PHONG KY THUAT VI X LY
ThS.KS.NGUYEN NH LUYEN
cont:
mov
daychuoiso[si-2], dh
dec
mov
inc
cmp
jge
si
bx, cx
bx
si, bx
small_loop
cmp
cx, 2
jg
sort_done
inc
cx
jmp
main_loop
sort_done:
ret
sort_array
endp
;-------------------------------end
start
small
db
equ
db
public string_to_number
;------------------------------; Doi chuoi thanh so(<100)
; DX: chi toi chuoi
; CX: so con so
; AX: so tra ve
;------------------------------string_to_number
proc near
push
bx
push
cx
push
dx
push
di
push
si
mov
mov
mov
doikytuloop:
mov
mov
mov
sub
cmp
je
jmp
hangchuc:
push
mov
mov
mul
mov
ax, 0
tiep
ax
KHOA KT&CN
pop
bx, dx
si, 1
dx, 0
di, cx
dl, [bx+di-1]
dl, '0'
si, 2
hangchuc
al, dl
ah, 10
ah
dl, al
BT LT . ASSEMBLER
ax
22
23
tiep:
jmp
tiep
add
ax, dx
inc
si
loop
doikytuloop
PHONG
KY THUAT VI X LY
xong:
pop
si
pop
di
pop
dx
pop
cx
pop
bx
ret
string_to_number
endp
;-------------------------------
public disp_string
;------------------------------; In chuoi ket thuc bang $
; nhap: DS:DX chi toi chuoi
;------------------------------disp_string
proc
push
ax
mov
ah, 9
int
21h
pop
ax
ret
disp_string
endp
public getnumber
;-------------------------------; Nhap 1 so tu ban fim <=255
; tra ve: AX=so nhap
;-------------------------------getnumber
proc
push
bx
push
cx
push
dx
mov
ah, 3Fh
; nhap chuoi
mov
bx, 0
mov
cx, MAX
mov
dx, offset chuoiso
; chua vao DX
int
21h
sub
ax, 2
; do dai thuc su cua chuoi khong ke LF+CR
mov
cx,
ax
cmp
cx, 1
; neu <0
jl
invalidnumber; khong nhap so=xong
cmp
cx, 2
; neu>2
jle
validnumber ;
invalidnumber:
mov
dx, offset errormess
call
disp_string
call
finish
ret
validnumber:
call
string_to_number
pop
dx
pop
cx
pop
bx
ret
getnumber
endp
;-------------------------------------public write_decimal
KHOA KT&CN
BT LT . ASSEMBLER
24
mov
ax, dx
mov
si, 10
xor
cx, cx
none_zero:
xor
dx, dx
PHONGdiv
KY THUAT VI X
si LY
push
dx
inc
cx
or
ax, ax
jne
none_zero
write_digit_loop:
pop
dx
add
dl, '0'
call
write_char
loop
write_digit_loop
end_decimal:
pop
si
pop
dx
pop
cx
pop
ax
ret
write_decimal endp
;-------------------------------------
ThS.KS.NGUYEN NH LUYEN
public write_char
;------------------------------;Xuat DL ra man hinh
;------------------------------write_char
proc
push
ax
mov
ah, 2
int
21h
pop
ax
ret
write_char
endp
public sort_array
;-------------------------------; dung buble sort
; DX : chi den chuoi
; AX : do dai chuoi
;-------------------------------sort_array
proc
push
bx
push
cx
push
si
dec
mov
mov
main_loop:
mov
small_loop:
mov
mov
cmp
ax
bx, dx
cx, 1
si, ax
;n - 1 vi chi so tinh tu 0
dl, bx[si-1]
dh, bx[si]
dl, dh
KHOA KT&CN
BT LT . ASSEMBLER
jl
mov
mov
continue_sort:
dec
cmp
jge
cmp
jg
inc
jmp
sort_done:
pop
pop
pop
ret
continue_sort
bx[si], dl
bx[si-1], dh
;hoan vi
si
si, cx
small_loop
cx, ax
sort_done
cx
main_loop
cx
bx
si
25
sort_array
endp
;------------------------------public string_link
;--------------------; Noi 2 chuoi
; BX, BP chi toi 2 chuoi
; DL, DH do dai 2 chuoi
;--------------------string_link
proc
push
ax
push
cx
push
si
mov
cx, 0
mov
cl, dh
mov
si, 0
mov
dh, 0
add
bx, dx
link_loop:
mov
al, [bp+si]
mov
[bx+si], al
inc
si
cmp
si, cx
jge
link_done
jmp
link_loop
link_done:
mov
al, '$'
mov
[bx+si], al
pop
si
pop
cx
PHONG KY THUAT VI X LY
Dng gi nh
AAA
AAD
AAM
AAS
ADC
ADD
AND
CALL
CBW
CLC
CLD
CLI
CMC
CMP
CMPS
CMPSB
CMPSW
CWD
DAA
DAS
DEC
DIV
ESC
HLT
IDIV
IMUL
IN
INC
INT
INTO
IRET
JA
JAE
JB
JBE
JC
JCXZ
JE
JG
JGE
JL
JLE
Tn y
ASCII Adjust for Addition
ASCII Adjust for Divition
ASCII Adjust for Multiplication
ASCII Adjust for Substraction
ADd with Carry
ADD
AND
CALL
Convert Byte to Word
CLear Carry flag
CLear Direction flag
CLear Interrupt flag
CoMplement Carry flag
CoMPare
CoMPare String
CoMPare String Byte
CoMPare String Word
Convert Word to Double word
Decimal Adjust for Addition
Decimal Adjust for Substraction
DECrement
DIVide
ESCape
HaLT
Integer DIVide
Integer MULtiply
INput byte or word
INCrement
INTerrupt
INTerrupt on Overflow
Interrupt RETurn
Jump if Above
Jump if Above or Equal
Jump if Below
Jump if Belowor Equal
Jump if Carry
Jump if CX Zero
Jump if Equal
Jump if Greater
Jump if Greater or Equal
Jump if Less than
Jump if Less than or Equal
pop
ax
ret
string_link
endp
;--------------------public finish
;------------------------------; ket thuc CT tro ve Dos
;------------------------------finish
proc
mov
ah, 4Ch
ThS.KS.NGUYEN NH LUYEN
Ngha
Cng c chnh ASCII
Chia c chnh ASCII
Nhn c chnh ASCII
Tr c chnh ASCII
Cng c nh
Php Cng
Php V
Gi th tc
i byte sang t
Xa c nh
Xa c nh hng
Xa c ngt
Ly b c nh
So snh
So snh chui
So snh xu byte
So snh xu word
i word sang word kp
Chnh thnh thp phn cho php cng
Chnh thnh thp phn cho php tr
Gim 1
Php chia
M that
M dng
Php chia nguyn
Php Nhn nguyn
Vo byte hay word
Tng 1
Gi ngt
Ngt do trn
Tr v t ngt
Nhy nu ln hn
Nhy nu ln hn hoc bng
Nhy nu nh hn
Nhy nu nh hn hoc bng
Nhy nu c nh c t
Nhy nu CX=0
Nhy nu bng
Nhy nu ln hn
Nhy nu ln hn hoc bng
Nhy nu nh hn
Nhy nu nh hn hoc bng
26
int
21h
PHONG KY THUAT VI X LY
Dng gi nh
JMP
OUT
JNA
POP
JNAE
POPF
JNB
PUSH
JNBE
PUSHF
JNC
RCL
JNE
RCR
JNG
REP
JNGE
REPE
JNL
REPNE
JNLE
REPNZ
JNO
REPZ
JNP
RET
JNS
ROL
JNZ
ROR
JO
SAHF
JP
SAL
JPE
SAR
JPO
SBB
JS
SCAS
JZ
SCASB
LAHF
SCASW
LDS
SHL
LEA
SHR
LES
STC
LOCK
STD
LODS
STI
LODSB
STOS
LODSW
STOSB
LOOP
STOSW
LOOPE
SUB
LOOPNE
TEST
LOOPNZ
WAIT
LOOPZ
XCHG
MOV
XLAT
MOVS
XOR
MOVSB
MOVSW
MUL
NEG
NOP
NOT
OR
Tn y
JuMP
OUTput byte or word
Jump if Not Above
POP
JumpFlags
POP
if Not Above or Equal
Jump if Not Below
PUSH
Jump ifFlags
PUSH
Not Below or Equal
Jump ifthrough
Rotate
Not Carry
Carry Left
Jump ifthrough
Rotate
Not Equal
Carry Right
Jump if Not Greater
REPeat
Jump if ifNot
REPeat
Equal
Greater or Equal
Jump
REPeat
if ifNot
NotLess
Equal
than
Jump if ifNot
REPeat
NotLess
Zerothan or Equal
Jump if ifNot
REPeat
Zero
Overflow
Jump if Not Parity
RETurn
Jump if Left
ROtate
Not Sign
Jump if Right
ROtate
Not Zero
Jump AH
Store
if Overflow
into Flags
Jump Arithmetic
Shift
if Parity Left
Jump
Shift Arithmetic
if Parity Even
Right
Jump if Parity
SuBtract
with Borrow
Odd
Jump ifString
SCAn
Sign
Jump Zero
SCAn
String Byte
Load AH
SCAn
String
withWord
Flags
Load pointer
SHift
Left into DS
Load Effective
SHift
Right
Address
LoadCarry
SeT
pointer
flag
into ES
LOCK
SeT
Direction
bus
flag
SeT
LOaD
Interrupt
String (byte
flag or word)
LOaD String
STOre
String Byte
LOaD String
STOre
String Word
Byte
LOOP String Word
STOre
LOOP while Equal
SUBtract
TEST
LOOP while Not Equal
LOOP while Not Zero
WAIT
LOOP while Zero
eXCHanGe
MOVe
TransLATe
MOVe String
eXclusive
OR
MOVe String Byte
MOVe String Word
MULtiply
NEGate
No OPeration
NOT
OR
ThS.KS.NGUYEN NH LUYEN
Ngha
Nhy
Ra byte
khng
hociu
wordkin
Nhyranu
Ly
t ngn
khngxp
ln hn
Nhycnu
Ly
t khng
ngn xp
ln hn hoc bng
Nhy
Np vo
nungn
khng
xpnh hn
Ly
Nhycnu
vokhng
ngn nh
xp hn hoc bng
Nhy
Quay nu
tri qua
c nh
c nh
c xa
Nhy phi
Quay
nu khng
qua cbng
nh
Nhy
Lp linu khng ln hn
Nhy
Lp linu
nukhng
bng ln hn hoc bng
Nhy
Lp linu
nukhng
khngnh
bng
hn
Nhylinu
Lp
nukhng
khc nh
khng
hn hoc bng
Nhy
Lp linu
nukhng
bng khng
trn
Nhy
Quay v
nu khng c li chn l
Nhy
Quay nu
tri khng c du
Nhy
Quay nu
phi khng bng 0
Nhy
Ct AH
nuvotrn
c
Nhy
Dch chuyn
nu ctri
li s
chn
hcl
Nhy
Dch chuyn
nu cphi
li chn
s hc
l theo chn
Nhycnu
Tr
mn
c li chn l theo l
Nhy
Duyt nu
byte c
hoc
duword ca xu
Duyt
Nhy nu
byte bng
ca xu
0
Duyt
Np cword
vo AH
ca xu
Np con
Dch
chuyn
tr vo
tri DS
Np a
Dch
chuyn
ch thc
phith
Np c
t
connh
tr vo ES
Khacbus
t
nh hng
Np c
t
byte
ngt
hay word ca xu
Np gi
Ct
bytebyte
cahay
xuword ca xu
Np
Ct gi
word
byte
caca
xuxu
Lnhgi
Ct
lpword ca xu
Lp trong
Php
tr khi bng
Lp trong
Kim
tra khi khng bng
Lp trong khi khc khng
Ch
Lp trong
Hon
i khi bng 0
Lnh chuyn
Dch
Lnh tr
Loi
chuyn byte hay word ca xu
Lnh chuyn byte ca xu
Lnh chuyn word ca xu
Php nhn
i du
Khng lm g
Php ph nh
Php hoc
27
28