You are on page 1of 25

KHOA KT&CN

PHONG KY THUAT VI X LY

BAI TAP LAP TRNH ASSEMBLY


;
BAI TAP1
;
TLINK BT1+BTlib
;----------------Dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
MAX
chuoi db
len
.code

BT LT . ASSEMBLER
ThS.KS.NGUYEN NH LUYEN

;phan dau tien


;khai bao bo nho co kich thuong nho
;dang ki voi he thong 1 bo nho 200h

'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
?

extrn write_char: near, disp_string: near


extrn finish: near, getnumber: near
start:

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

;la phan bat buoc


;chuyen dx->ds
;
;chuyen chuoi vao dx
;goi xuat chuoi
;
;

;dinh nghia getstring


;nap bx vao ngan xep stack

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:

'Chuong trinh hien uoc so cua N', '$'


13,10,'Nhap so N (<100):','$'
13,10,'Cac uoc so la
:','$'
db
'Khong hop le !','$'
db
?
equ
100
db
MAX dup(?)

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
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
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

'Chuong trinh hien USCLN cua 2 so nguyen', '$'


13,10,'Nhap so thu 1 (<100):','$'
13,10,'Nhap so thu 2 (<100):','$'
13,10,'USCLN la
:','$'
db
'Khong hop le !','$'
db
?
db
?
equ
100
db
MAX dup(?)
db
MAX dup(?)

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:

mov
mov

bx, @data
ds, bx

mov

dx, offset about

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

dx, offset prompt2


disp_string
getnumber

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

;lay tung so o day1 so voi day2


mov
si, offset daychuoiso1
compareloop:
mov
dl, [si]
mov
bx, offset daychuoiso2
small_loop:
cmp
dl, [bx]
je
compare_done
inc
bx
mov
al, [bx]
cmp
al, '$'
je
hetchuoi2
jmp
small_loop
hetchuoi2:
inc
si
mov
al, [si]
cmp
al, '$'
je
compare_done
jmp
compareloop
compare_done:
mov
al, dl
mov
dx, offset mess
call
disp_string
mov
dl, al
call
write_decimal
ret
process
endp
;-------------------------------; 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
push
cx
mov
cl, 1
uocsoloop:

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

;lay AX=N chia CL, AH=du, AL=thuong

cl
cl, dl
uocso_done
uocsoloop
al, '$'
[bx], al
cx
ax
endp

;-------------------------------end
start

;ket thuc chuoi

;
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

'Chuong trinh hien BSCNN cua 2 so nguyen', '$'


13,10,'Nhap so thu 1 (<100):','$'
13,10,'Nhap so thu 2 (<100):','$'
13,10,'BSCNN la
:','$'
db
'Khong hop le !','$'
db
?
db
?
db
?
equ
100
db
MAX dup(?)
db
MAX dup(?)

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:

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

dx, offset prompt2


disp_string
getnumber
N2, al

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

dx, offset mess

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

'Chuong trinh hien tong cua 2 so nguyen duong ', '$'


13,10,'Nhap so thu 1 (<100):','$'

prompt2db
mess
db
errormess
N1
N2
.code

13,10,'Nhap so thu 2 (<100):','$'


13,10,'Tong 2 so la
:','$'
db
'Khong hop le !','$'
db
?
db
?

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:

mov
mov

bx, @data
ds, bx

mov

dx, offset about

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

dx, offset prompt2


disp_string
getnumber
N2, al

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:

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
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

KHOA KT&CN

BT LT . ASSEMBLER

call
call
mov

disp_string
getnumber
N1, al

mov
call
call
mov
ret

dx, offset prompt2


disp_string
getnumber
N2, al

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

'Chuong trinh hien tich cua 2 so nguyen duong ', '$'

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

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
mov
mov

bx, @data
ds, bx

mov
call
call
call

dx, offset about


disp_string
getdata
process

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

dx, offset prompt2


disp_string
getnumber
N2, al

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

'Chuong trinh hien thuong cua 2 so nguyen duong ', '$'


13,10,'Nhap so thu 1 (<100):','$'
13,10,'Nhap so thu 2 (<100):','$'
13,10,'Thuong 2 so la
:','$'
db
'Khong hop le !','$'
db
?
db
?

.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

dx, offset about


disp_string
getdata

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

dx, offset prompt2


disp_string
getnumber
N2, al

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

'Chuong trinh tinh tong : S = 1^2 + 2^2 + ...


13,10,'Nhap so N (<10):','$'
13,10,'Ket qua
:','$'
db
'Khong hop le !','$'
db
?
dw
0

+ n^2 ', '$'

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:

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

;dung AX tich binh phuong

dx, offset mess


disp_string
ax, S
cl, 8
ax, cl
dl, al
write_decimal
ax, S
ax, 0FFh
dl, al
write_decimal
endp

;-------------------------------end
start
;
BAI TAP10
;
TLINK BT10+BTlib
;----------------dosseg
.model small
.stack 200h
.data
about db
prompt db
mess
db
errormess
N
S
.code

'Chuong trinh tinh tong : S = 1.2 + 2.3 + ...


13,10,'Nhap so N (<10):','$'
13,10,'Ket qua
:','$'
db
'Khong hop le !','$'
db
?
dw
0

+ (n-1)n ', '$'

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near, write_decimal: near, write_char: near
start:

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

;dung AX tinh tich

mov
call
mov
mov
shr
cmp
jle
mov
call

dx, offset mess


disp_string
ax, S
cl, 8
ax, cl
ax, 0
cont
dl, '#'
write_char

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:

'Chuong trinh xet doan van hop le', '$'


13,10,'Nhap dong van ban (<100) :','$'
13,10,'Ket qua : dong van ban dung !','$'
13,10,'Ket qua : dong van ban sai !','$'
db
'Chuoi khong hop le !$'
equ
100
MAX dup(?)
db
?

extrn string_to_number: near, disp_string: near


extrn finish: near, write_decimal: near
mov
mov
mov

bx, @data
ds, bx
es, bx

mov
call
call
call
call

dx, offset about


disp_string
getstring
process
finish

KHOA KT&CN

;-------------------------------; Nhap 1 chuoi tu ban fim


; tra ve: AX=chi toi chuoi nhap
;--------------------------------

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

al, ' '


RightText
al, '.'
RightText
al, ','

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

'Chuong trinh xet 3 canh tam giac', '$'


13,10,'Nhap do dai canh thu 1 (<100):','$'
'Nhap do dai canh thu 2 (<100):','$'
'Nhap do dai canh thu 3 (<100):','$'
db
?
db
?
db
?
13,10,'--> La 3 canh tam giac','$'
13,10,'--> Khong phai canh tam giac','$'
db
'Khong hop le !','$'
equ
10
MAX dup(?)

.code

start:

extrn string_to_number: near, disp_string: near


extrn finish: near, getnumber: near
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
a, al
mov
call
call
mov

dx, offset prompt2


disp_string
getnumber
b, al

KHOA KT&CN

mov
call
call
mov
ret

BT LT . ASSEMBLER

dx, offset prompt3


disp_string
getnumber
c, al

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:

'Chuong trinh xet tan so xuat hien nguyen am', '$'


13,10,'Nhap chuoi ho ten (<100) :','$'
13,10,'So lan xuat hien nguyen am:','$'
db
'Chuoi khong hop le !$'
'aeoiuAEOIU'
equ
100
MAX dup(?)
db
?
?

extrn string_to_number: near, disp_string: near


extrn finish: near, write_decimal: near
mov
mov
mov

bx, @data
ds, bx
es, bx

mov
call

dx, offset about


disp_string

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

;lay tu bang dua vao AL

dx, offset mess


disp_string
dl, so_na
write_decimal

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:

'Chuong trinh Proper', '$'


13,10,'Nhap chuoi ho ten (<100) :','$'
13,10,'Chuoi ket qua:$'
db
13, 10,'Chuoi khong hop le !$'
equ
100
MAX dup(?)
db
?
?

extrn string_to_number: near, disp_string: near


extrn finish: near, write_decimal: near
mov
mov
mov

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

;bat dau xu ly bat co Hoa

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

'Chuong trinh hien 3 so tang dan', '$'


13,10,'Nhap so thu 1 (<100):','$'
'Nhap so thu 2 (<100):','$'
'Nhap so thu 3 (<100):','$'
13,10,'Ket qua :','$'
db
'Khong hop le !','$'
equ
10
db
MAX dup(?)

.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

dx, offset prompt1


disp_string
getnumber
daychuoiso[0], al

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

dx, offset prompt3


disp_string

KHOA KT&CN

BT LT . ASSEMBLER

call
mov
mov
ret

getnumber
daychuoiso[2], al
daychuoiso[3], '$'

mov
call
mov
call
ret

dx, offset mess


disp_string
dx, offset daychuoiso
disp_string

;ket thu chuoi

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

'Chuong trinh hien so max, so min ', '$'


13,10,'Nhap so thu 1 (<100):','$'

prompt2db
prompt3db
mess1 db
mess2 db
errormess
MAX
daychuoiso

'Nhap so thu 2 (<100):','$'


'Nhap so thu 3 (<100):','$'
13,10,'So max :','$'
13,10,'So min :','$'
db
'Khong hop le !','$'
equ
10
db
MAX dup(?)

.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

dx, offset prompt2


disp_string
getnumber
daychuoiso[1], al

mov
call
call
mov
mov
ret

dx, offset prompt3


disp_string
getnumber
daychuoiso[2], al
daychuoiso[3], '$'

mov
call
mov
mov
int

dx, offset mess1


disp_string
dl, daychuoiso[2]
ah, 2
21h

mov
call
mov
mov
int
ret

dx, offset mess2


disp_string
dl, daychuoiso[0]
ah, 2
21h

;ket thu chuoi

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

PHU LUC TAP TIN BTLIB


; BTlib
;--------------------------------dosseg
.model
.data
errormess
MAX
chuoiso
.code

small
db
equ
db

'Khong hop le !$'


10
MAX dup(?)

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

; lay BX lam con tro den chuoi ky so


; SI=1: don vi, SI=2: chuc, ...
; AX chua tong tich luy

dx, 0
di, cx
dl, [bx+di-1]
dl, '0'
si, 2
hangchuc

; dung chua ket qua doi


; doi ky tu thanh so tu phai sang
; dua BX di tu cuoi chuoi ve dau
; doi thanh so thap phan
; neu la so hang chuc

al, dl
ah, 10
ah
dl, al

; dua DL=so vao AL


; dung AH de nhan cho AL
; AX= AL*10

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
;-------------------------------

; tich luy vao DX


ThS.KS.NGUYEN NH LUYEN

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

;-------------------------------------; In so thap phan 16 bit


; DX= so 16 bit
;-------------------------------------write_decimal proc near
push
ax
push
cx
push
dx
push
si

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

;BX chi toi chuoi


;vong lap ngoai lap n-1 lan

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

;neu lap n-1 lan thi ket thuc

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

;cho BX chi toi cuoi chuoi1

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

You might also like