đề ôn tập môn vi xử lý
Trang 11 Viết chương trình
hợp ngữ dạng .EXE
nhập vào từ bàn phím 2
số nguyên 0<=a, b<=9.
Tính tổng a+b và hiển
thị kết quả ra màn
hình Ví dụ: a=4, b=5,
tổng là: 9; a=6, b=7,
tổng là: 13.
.model small
.stack 100h
.data
x1 db 10,13, 'Nhap a=$'
x2 db 10,13, 'Nhap b=$'
x3 db 10,13, 'Tong a+b= $'
.code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,x1 int 21h
nhapa:
mov ah,1 int 21h cmp al,'0'
jb nhapa cmp al,'9'
ja nhapa mov bl,al
nhapb:
mov ah,1 int 21h cmp al,'0'
jb nhapb
cmp al,'9'
ja nhap add bl,al sub bl,30h mov ah,9 lea dx,x3 int 21h cmp bl,'9'
ja lonhon9 mov ah,2 mov dl,bl int 21h jmp kthuc
lonhon9:
mov ah,2 mov dl,'1' int 21h sub bl,10 mov dl,bl int 21h kthuc:
mov ah,4ch int 21h
main endp end main
2 Viết chương trình
hợp ngữ dạng .EXE
nhập vào từ bàn phím 2
số nguyên 0<=a, b<=9.
Tính hiệu a-b và hiển
thị kết quả ra màn
hình Ví dụ: a=8, b=5,
hiệu là: 3; a=4, b=7,
hiệu là: -3.
.model small
.stack 100h
.data
x1 db 10,13, 'Nhap a=$'
x2 db 10,13, 'Nhap b=$'
x3 db 10,13, 'Hieu a-b= $'
.code main proc mov ax,@data mov ds,ax mov ah,9 lea dx,x1 int 21h
nhapa:
mov ah,1 int 21h cmp al,'0'
jb nhapa cmp al,'9'
ja nhapa mov bl,al
nhapb:
mov ah,1 int 21h cmp al,'0'
jb nhapb
cmp al,'9'
ja nhapb mov cl,al mov ah,9 lea dx,x3 int 21h cmp bl,cl jae lonhon mov ah,2 mov dl,'-' int 21h xchg bl,cl
lonhon:
sub bl,cl mov ah,2
mov dl,bl int 21h mov ah,4ch int 21h
main endp end main
.model tiny
.stack 100h
.data
tb1 db 'Nhap a=$'
tb2 db 10,13, 'Nhap
b=$'
tb3 db 10,13, 'Hieu 2 so
da nhap la: $'
.code main proc mov ah,9 lea dx,tb1 int 21h mov ah,1 int 21h mov bl,al
mov ah,9
lea dx,tb2 int 21h mov ah,1 int 21h mov cl,al
mov ah,9 lea dx,tb3 int 21h
cmp bl,cl jae thoat xchg bl,cl
mov ah,2 mov dl,'-' int 21h thoat:
sub bl,cl add bl,30h
mov ah,2 mov dl,bl int 21h mov ah,4ch int 21h main endp end main
3 Viết chương
trình hợp ngữ
dạng EXE nhập vào
từ bàn phím 1 chữ số
Hecxa từ A->F (chữ
in hoa), hãy in ra
màn hình số thập
phân tương ứng.
Nếu nhập sai : Yêu
cầu nhập lại Ví dụ :
Nhập vào A, số thập
phân tương ứng là 10.
.model tiny stack 100h data tb1 db 10, 13, 'Nhap chu so Hecxa (kt) = $'
tb2 db 10, 13, 'So thap phan tuong ung la: $'
.code main proc mov ax,@data mov ds,ax
nhap: Mov ah,9 lea dx,tb1 int 21h mov ah,1 int 21h
cmp al,'A'
jb nhap cmp al,'F'
ja nhap sub al,11h mov bl,al
mov ah,9 lea dx,tb2 int 21h
mov ah,2 mov dl,'1' int 21h mov dl,bl int 21h mov ah,4ch int 21h main endp end main
4 Viết chương
trình hợp ngữ
dạng .EXE nhập vào
từ bàn phím 1 chữ số
Hecxa từ a->f (chữ thường), hãy in ra màn
hình số thập phân tương ứng Nếu nhập
sai : Yêu cầu nhập lại.
Ví dụ : Nhập vào a, số
Trang 2thập phân tương ứng
là 10.
.model tiny
.stack 100h
.data
tb1 db 10, 13, 'Nhap
chu so Hecxa (kt) = $'
tb2 db 10, 13, 'So thap phan tuong ung la:
$' code main proc mov ax,@data mov ds,ax
nhap: Mov ah,9
lea dx,tb1 int 21h mov ah,1 int 21h cmp al,'a'
jb nhap cmp al,'f'
ja nhap
sub al,11h mov bl,al
mov ah,9 lea dx,tb2 int 21h mov ah,2 mov dl,'1'
int 21h mov dl,bl int 21h mov ah,4ch int 21h main endp end main
5 Viết chương
trình hợp ngữ
dạng .EXE nhập vào
từ bàn phím 1 chữ số.
Nếu nhập sai yêu cầu
nhập lại Hãy xác định
đó là số chẵn hay số lẻ
và thông báo kết quả
ra màn hình ?
.model tiny
.stack 100h
.data
debai db 10,13, 'Kiem tra tinh chan le cua 1 ky
tu so$' tb1 db 10,13, 'Nhap
ky tu so can kiem tra (kt):$'
tb2 db 10,13, 'Do la
so chan$' tb3 db 10,13, 'Do la
so le$' tb4 db 10,13, 'Hay nhap lai voi
(0<=kt<=9)$'
.code main proc mov ah,9 lea dx,debai int 21h mov ah,9 lea dx,tb1 int 21h nhap:
mov ah,1 int 21h
cmp al,'0'
jb nhap cmp al,'9'
ja nhap and ax,000fh shr ax,1
jc le mov ah,9 lea dx,tb2 int 21h jmp kt
le:
mov ah,9 lea dx,tb3 int 21h kt:
mov ah,4ch int 21h main endp end main
6 Viết chương
trình hợp ngữ
dạng .EXE nhập vào
từ bàn phím 2 số a, b
(0<=a, b<=9) Hãy tính
trung bình cộng của
chúng Ví dụ : a=5,
b=4, TBC=4.5 ; a=5,
b=7, TBC=6.0.
.model tiny
.stack 100h
.data
x1 db 'Nhap a:$'
x2 db 'Nhap b:$' x3 db 'Trung binh cua
a va b la:$' x4 db '.5$' x5 db '.0$'
.code main proc
mov ah,9 lea dx,x1 int 21h
nhapa:
mov ah,1 int 21h cmp al,'0'
jb nhapa cmp al,'9'
ja nhapa sub al,30h mov bl,al mov ah,9 lea dx,x2 int 21h
nhapb:
mov ah,1 int 21h
cmp al,'0'
jb nhapb cmp al,'9'
ja nhapb sub al,30h add bl,al mov ah,9 lea dx,x3 int 21h mov cl,bl shr cl,1 mov ah,2 mov dl,cl add dl,30h int 21h mov dl,'.' int 21h shr bl,1
jc le mov ah,2 mov dl,'0' int 21h jmp kt
le:
mov ah,2 mov dl,'5' int 21h
kt:
mov ah,4ch int 21h
main endp end main
7 Cho AX chứa 1
số nguyên không dấu
nằm trong phạm vi 0 ÷
65535 Viết chương
trình hợp ngữ
dạng EXE in số đó ra
màn hình theo chiều
ngược lại Ví dụ :
AX=12345 In ngược lại
là : 54321.
.model tiny stack 100h data ;debai db 10,13, 'In day so 12345 nguoc lai la:$'
.code main proc ;mov ah,9 ;lea dx,debai ;int 21h ;mov ax,12345 mov bx,10 mov cx,0
lap:
xor dx,dx div bx push ax mov ah,2
or dl,30h int 21h pop ax
cmp ax,0
ja lap mov ah,4ch int 21h main endp end main
Trang 38 Cho AX chứa 1 số
nguyên không dấu nằm
trong phạm vi 0 ÷
65535 Viết chương
dạng .EXE kiểm tra
xem số trong AX có
phải là số đối xứng
không Ví dụ :
AX=12321 Hiển thị ra
màn hình là : Là số đối xứng.
.model small stack 100h data
X1 db 'la so doi xung$' X2 db 'la so khong doi xung$'
.code main proc
mov ax,@data
mov ds,ax mov es,ax push ax mov bx,0 mov cx,10
daoso:
push ax mov ax,10 mul bx mov bx,ax mov dx,0
pop ax div cx add bx,dx cmp ax,0 jne daoso push ax cmp ax,bx
je doixung mov ah ,9 lea dx,x2 int 21h
jmp kt
doixung:
mov ah ,9 lea dx,x1 int 21h
kt:
mov ah,4ch int 21h
main endp end main
9 Viết chương
trình hợp ngữ
dạng EXE nhập 1 ký tự
bất kỳ từ bàn phím.
Hãy in mã ASCII của
nó ở dạng nhị phân Ví
dụ : Ký tự là : A, Mã
ASCII dạng nhị phân
là : 01000001b
.model tiny
.stack 100h
.data
x1 db 10,13, 'Nhap mot ky tu:$'
x2 db 10,13, 'Ma ASII
o dang nhi phan la:$'
n db ? code main proc mov ah,9 lea dx,x1 int 21h mov ah,1 int 21h mov bl,al
mov ah,9 lea dx,x2 int 21h mov cx,8 mov n,0 lap:
shl bl,1 inc n
jc inso1 mov ah,2 mov dl,'0' int 21h jmp nhay
inso1:
mov ah,2 mov dl,'1' int 21h nhay:
cmp n,4
jb tiep mov ah,2 mov dl,20h int 21h mov n,0
tiep:
loop lap mov ah,2 mov dl,'b' int 21h mov ah,4ch int 21h main endp end main
10 Viết chương trình
hợp ngữ dạng .EXE
nhập 1 ký tự bất kỳ từ
bàn phím Hãy in mã
ASCII của nó ở dạng
Hecxa Ví dụ : Ký tự
là : A, Mã ASCII dạng
Hexa là : 41h (chú
thích : nhập vào
A<=kt<F đổi sang
ASCII dạng Hexa)
.model small stack 100h data x1 db 10,13, 'Nhap mot ky tu:$'
x2 db 10,13, 'Ma ASCII o dang Hexa la:$' code
main proc mov ah,9 lea dx,x1 int 21h
mov ah,1 int 21h mov bl,al
mov ah,9 lea dx,x2 int 21h mov al,bl mov cl,4 shr al,cl cmp al,9 jbe inra
add al,7 inra:
mov dl,al add dl,30h mov ah,2 int 21h and bl,0fh cmp bl,9 jbe inra1 add al,7 inra1:
mov dl,bl add dl,30h mov ah,2 int 21h
mov ah,2 mov dl,'h' int 21h mov ah,4ch int 21h main endp end main
11 Viết chương trình
hợp ngữ dạng .EXE
nhập 1 ký tự bất kỳ từ
bàn phím Hãy in mã
ASCII của nó ở dạng
thập phân Ví dụ : Ký
tự là : A, Mã ASCII
dạng thập phân là :
65d (In ra 13d … ???)
.model small
.stack 100h
.data
x1 db 13,10, 'Nhap mot ky tu bat ky:$' x2 db 13,10, 'Ma ascii cua ky tu vua nhap duoi dang thap phan:$' code
main proc mov ax,@data mov ds,ax nhaplai:
mov ah,9 lea dx,x1 int 21h
mov ah,1 int 21h mov ah,7 int 21h mov bl,al mov ah,9 lea dx,x2 int 21h mov cx,8 mov ax,0 mov dx,1 tp:
shr bl,1 jnc tiep add ax,dx
tiep:
shl dx,1 loop tp mov bx,10
chia:
xor dx,dx div bx push dx inc cx
cmp ax,0 jne chia mov ah,2 hthi:
pop dx add dx,30h int 21h loop hthi mov ah,2 mov dl,'d' int 21h mov ah,4ch int 21h
Trang 4main endp end main
12 Cho BX chứa một số
nhị phân 16bit (VD :
BX=1100 0011 1011
0110b) Viết chương
dạng .EXE in ra màn
hình nội dung trong
thanh ghi BX ra dạng
Hexa (Ví dụ : Dạng
hexa là : C3B6h)
.model small
.stack 100h
.data
x1 db 'Ma hecxa:$'
.code main proc mov ah,9 lea dx,x1 int 21h push bx mov cl,12 shr bx,cl call hien pop bx push bx mov cl,8 shr bx,cl
and bx,000fh call hien pop bx push bx mov cl,4 shr bx,cl and bx,000fh call hien pop bx and bx,000fh call hien mov ah,4ch int 21h
hien proc push ax push bx push dx cmp bx,9 jbe chuso add bx,7 chuso:
mov dx,bx mov ah,2 add dx,30h int 21h pop dx
pop ax pop ax ret hien endp end hien mov ah,4ch int 21h main endp end main
13 Cho BX chứa một số
nhị phân 16bit (VD :
BX=1100 0011 1011
0110b) Viết chương
dạng .EXE in ra màn
hình nội dung trong
thanh ghi BX ra dạng
thập phân (Ví dụ :
Dạng thập phân là : 50102d)
.model tiny stack 100h data x1 db 'Ma thap phan:$' .code
main proc mov ah,9 lea dx,x1
int 21h mov cx,16 mov ax,0 mov dx,1 tiep:
shr bx,1 jnc tinhmu add ax,dx tinhmu:
shl dx,1
jmp tiep mov bx,10 mov cx,0 chia:
xor dx,dx div bx push dx inc cx cmp ax,0 jne chia
mov ah,2 pop dx add dl,30h int 21h
kt:
mov ah,4ch int 21h main endp end main
14 Cho BX chứa 1 số
Hexa 4 chữ số (VD : BX
= A3B4h) Viết chương
trình hợp ngữ
dạng .EXE in BX ra
màn hình dạng nhị
phân, mỗi nhóm 4 bit
cách nhau 1 dấu trống.
Ví dụ : Dạng nhị phân
là : 1010 0011 1011
0100b.
.model tiny stack 100h data debai db 10,13, 'In a3b4h sang dang nhi phan:$'
n db ? code main proc mov ah,9 lea dx,debai int 21h
mov bx,0a3b4h mov cx,16 mov ah,2 mov n,0
lap:
shl bx,1 inc n
jc inso1 mov dl,'0' jmp inra
inso1:
mov dl,'1' inra:
int 21h cmp n,4
jb tiep mov ah,2 mov dl,20h int 21h mov n,0
tiep:
loop lap mov dl,'b' mov ah,2 int 21h mov ah,4ch int 21h main endp end main
15 Cho BX chứa 1 số
Hexa 4 chữ số (VD : BX
= A3B4h) Viết chương
trình hợp ngữ
dạng .EXE in BX ra
màn hình dạng thập
phân Ví dụ : Dạng thập
phân là : 41908d.
16 Cho AX chứa 1 số
nguyên có dấu nằm
trong phạm vi -32768 ÷
32767 Viết chương trình hợp ngữ dạng .EXE in AX ra màn hình ở dạng thập phân Ví dụ : AX =
1234, In ra AX =1234, AX= - 1234 In ra : AX=
-1234.
.model tiny stack 100h data
x1 db 10,30, 'Xau trong AX la:$' code
main proc mov ah,9 lea dx,x1 int 21h mov ax,-12345 ;hay ax=12345
or ax,ax jns duong push ax
mov ah,2 mov dl,'-' int 21h pop ax neg ax duong:
mov bx,10 xor cx,cx chiatiep:
xor dx,dx div bx push dx
inc cx cmp ax,0
ja chiatiep mov ah,2 inra:
pop dx
or dl,30h int 21h loop inra pop dx pop cx pop bx pop ax
Trang 5
mov ah,4ch
int 21h
main endp end main
17 Cho một xâu ký tự
S, viết chương trình
hợp ngữ dạng EXE tạo
ra xâu S1 là xâu đảo
ngược của xâu S và in
xâu S1 ra màn hình.
.model small
.stack 100h
.data
s db 80 dup(?) s1 db 80 dup(?) x1 db "Xau dao cua S la:$"
.code main proc mov ax, @data mov ds,ax mov es,ax mov cx,0 lea si,s
cld lap:
lodsb cmp al,'$'
je tiep inc cx jmp lap tiep:
sub si,2 lea di,s1
cld dao:
lodsb stosb sub si,2 loop dao mov al,'$' stosb mov ah,9 lea dx,x1 int 21h
lea dx,s1 int 21h mov ah, 4ch int 21h main endp end main
18 Cho 2 xâu ký tự S1,
S2, viết chương trình
hợp ngữ dạng .EXE
kiểm tra xem xâu S1 và
xâu S2 có bằng nhau
không? Hiển thị kết quả
ra màn hình
.model small
.stack 100h
.data
tb1 db 'Xau S1 bang
S2$'
tb2 db 'Xau S1khong bang S2$'
s1 db 'duch$' s2 db 'duch$' code
main proc mov ax,@data mov ds,ax mov es,ax
mov cx,0 lea si,s1 cld dems1:
lodsb cmp al,'$'
je tiep inc cx jmp dems1
tiep:
mov dx,0 lea si,s2 cld dems2:
lodsb cmp al,'$'
je ss1 inc dx jmp dems2 ss1:
cmp cx,dx jne kbang lea si,s1 lea di,s2 cld repe cmpsb cmp cx,0 jne kbang mov ah,9
lea dx,tb1 int 21h jmp kt kbang:
mov ah,9 lea dx,tb2 int 21h
kt:
mov ah,4ch int 21h main endp end main
19 Cho xâu ký tự S,
viết chương trình hợp
ngữ dạng .EXE kiểm
tra xem xâu S có phải là
xâu đối xứng hay
không? Hiển thị kết quả
ra màn hình.
.model small
.stack 100h
.data
s db 'AbbA$'
s1 db 80 dup(?)
x1 db 13,10, 'xau doi xung$'
x2 db 13,10, 'khong doi xung$'
code main proc mov ax,@data mov ds,ax mov es,ax mov cx,0 lea si,s cld cuoixau:
lodsb
cmp al,'$'
je daoxau inc cx jmp cuoixau
daoxau:
sub si,2 lea di,s1 push cx std ;cld xaudao:
lodsb;lay 1 ki tu trong xau ra AL stosb; nap vao s1
add di,2 loop xaudao lea si,s lea di,s1 cld pop cx ssdx:
cmpsb jne kdx loop ssdx mov ah,9 lea dx,x1 int 21h jmp ketthuc
kdx:
mov ah,9 lea dx,x2 int 21h ketthuc: mov ah,4ch int 21h main endp end main
Trang 620 Cho xâu ký tự S,
viết chương trình hợp
ngữ dạng EXE đếm số
ký tự là chữ số có trong
S Hiển thị kết quả ra
màn hình.
.model small
.stack 100h
.data
s db 'ha noi2013$'
x1 db 13,10, 'So ky tu
la chu so trong xau=$'
code main proc mov ax,@data mov ds,ax mov es,ax mov cx,0 lea si,s cld dem:
lodsb cmp al,'$'
je inra cmp al,'0'
jb dem cmp al,'9'
ja dem inc cx jmp dem inra:
lea dx,x1 mov ah,9 int 21h xor ax,ax mov ax,cx xor cx,cx
mov bx,10
;xor ax,ax ;mov ax,cx ;xor cx,cx ;xor bx,bx ;mov bx,10
chia:
xor dx,dx div bx push dx inc cx cmp ax,0
jne chia mov ah,2
hthi:
pop dx add dx,30h int 21h loop hthi
mov ah,4ch int 21h main endp end main
21 Cho xâu ký tự S,
viết chương trình hợp
ngữ dạng EXE nhập từ
bàn phím một ký tự ch
và kiểm tra xem ch có
trong xâu S hay không?
Nếu ký tự ch có trong
xâu S thì hiển thị ra
màn hình vị trí đầu tiên
xuất hiện ký tự trong
xâu S.
.model small
.stack 100h
.data
s db 'tran duc hanh';db
100 dup(0)
x1 db 10,13, 'Nhap ch:
$' x2 db 'Khong xuat hien$'
x3 db 10,13, 'Xuat hien$'
x4 db 10,13, 'Vi tri xuat hien dau tien trong xau:$'
code main proc mov ax,@data mov ds,ax mov es,ax
lea dx,x1 mov ah,9
int 21h mov ah,1 int 21h mov bl,al lea si,s cld lap:
lodsb cmp al,bl
je kq1 cmp al,'$'
je kq2 jmp lap kq1:
lea dx,x3 mov ah,9
int 21h lea dx,x4 mov ah,9 int 21h mov ax,si mov bx,10 mov cx,0
chia:
xor dx,dx div bx push dx inc cx cmp ax,0 jne chia mov ah,2
lap1:
pop dx add dx,30h int 21h loop lap1 jmp thoat
kq2:
lea dx,x2 mov ah,9 int 21h
thoat:
mov ah,4ch int 21h main endp end main
22 Cho xâu ký tự S,
viết chương trình hợp
ngữ dạng EXE đếm số
lượng các chữ cái
thường có trong xâu S.
Hiển thị kết quả ra màn
hình.
.model small
.stack 100h
.data
s db 'ha noi2013$'
x1 db 13,10, 'So ky tu
la chu so trong xau=$'
code main proc mov ax,@data mov ds,ax mov es,ax mov cx,0 lea si,s cld dem:
lodsb cmp al,'$'
je inra cmp al,'a'
jb dem cmp al,'z'
ja dem inc cx jmp dem inra:
lea dx,x1 mov ah,9 int 21h xor ax,ax mov ax,cx xor cx,cx
mov bx,10
;xor ax,ax ;mov ax,cx ;xor cx,cx ;xor bx,bx ;mov bx,10
chia:
xor dx,dx div bx push dx inc cx cmp ax,0
jne chia mov ah,2
hthi:
pop dx add dx,30h int 21h loop hthi
mov ah,4ch int 21h main endp end main
Trang 7
23 Cho xâu ký tự S, viết
chương trình hợp ngữ
dạng EXE tính tổng của
các ký tự số có trong xâu
S và lưu kết quả vào
thanh ghi BX.
.model small
.stack 100h
.data
s db 'ha noi2013&'
x1 db 13,10, 'So ky tu la
chu so trong xau=$'
code main proc mov ax,@data mov ds,ax mov es,ax mov cx,0 mov bx,0 lea si,s cld dem:
lodsb cmp al,'$'
je inra
cmp al,'0'
jb dem cmp al,'9'
ja dem and al,0fh add bx,ax
inc cx jmp dem inra:
lea dx,x1 mov ah,9 int 21h
mov ax,bx mov bx,10 mov cx,0
chia:
xor dx,dx div bx push dx inc cx cmp ax,0 jne chia mov ah,2
hthi:
pop dx add dx,30h int 21h loop hthi
mov ah,4ch int 21h main endp end main
24 Cho 2 xâu ký tự S1
và S2, viết chương
trình hợp ngữ
dạng EXE so sánh hai
xâu S1 và S2 Hiển thị
kết quả so sánh ra màn
hình.
.model small
.stack 100h
.data
x3 db 'S1=S2$'
x4 db 'S1>S2$'
x5 db 'S1<S2$'
l1 dw ?
l2 dw ?
s1 db ‘abc$'
s2 db 'abc$'
.code
main proc
mov ax,@data
mov ds,ax mov es,ax mov cx,0 lea si,s1 cld dems1:
lodsb cmp al,'$'
je dems2 inc cx jmp dems1 mov l1,cx dems2:
mov cx,0 lea si,s2 cld dem:
lodsb cmp al,'$'
je ss1 inc cx
jmp dem mov l2,cx ss1:
cmp cx,l1
je bangnhau
jb tiep ; mov cx,l1 tiep:
lea si,s1 lea di,s2 cld repe cmpsb
mov cx,0
je kq1 sub si,1 lodsb mov bl,al sub si,1
mov ax,si lea si,s2 add si,ax lodsb cmp bl,al
ja s1lh lea dx, x5 mov ah,9 int 21h jmp kt s1lh:
lea dx, x4 mov ah,9 int 21h jmp kt kq1:
mov cx,l1 cmp cx,l2
ja xaulons1 lea dx, x5 mov ah,9
int 21h jmp kt xaulons1:
lea dx, x4 mov ah,9 int 21h jmp kt bangnhau:
lea dx, x3 mov ah,9 int 21h kt:
mov ah,4ch int 21h main endp end main
25 Cho 2 xâu ký tự S1
và S2, viết chương
trình hợp ngữ
dạng EXE nối xâu S2
vào sau xâu S1.Hiển
thị xâu S1 ra màn
hình.
.model small
.stack 100h
.data
x1 db 'Xau so khi noi la:$'
s1 db 'abc$' s2 db 'abc$' code
main proc mov ax,@data mov ds,ax mov es,ax mov cx,0 lea si,s1
cld tim:
lodsb cmp ah,'$' jne tim mov di,si sub di,1 lea si,s2 cld noixau:
lodsb cmp al,'$'
je inxau stosb jmp noixau
inxau:
stosb mov ah,9 lea dx,x1 int 21h
lea dx,s1 int 21h mov ah,4ch int 21h main endp end main
26 Cho xâu ký tự S, viết
chương trình hợp ngữ
dạng .EXE chèn ký tự
ch vào trong xâu S tại vị trí k với ký tự ch và số nguyên k được nhập vào
(1<k<length(ch)).
.model small
.stack 100h data
l dw ?
k dw ? x1 db 10,13,' nhap ch:
$'
Trang 8x2 db 10,13,' nhap k:$'
x3 db 10,13,' ky tu sau
khi da chen la:$'
s1 db 'duc hanh$'
s db ?
code
main proc
nhapk proc
push ax
push dx
nhaplai:
mov bx,0
_nhap:
mov ah,1
int 21h
cmp al,0dh
je _nhap ;je _ktnhap
and ax,000fh
push ax
mov ax,10 mul bx cmp dx,0 jne nhaplai cmp ax,cx
ja nhaplai pop bx add bx,ax
jc nhaplai cmp bx,cx
ja nhaplai jmp _nhap cmp bx,1 jbe nhaplai pop dx pop ax ret nhapk endp end nhapk
mov ax,@data mov ds,ax mov es,ax
mov cx,0 lea si,s1 cld dem:
lodsb cmp al,'$'
je nhap inc cx jmp dem mov l,cx mov ah,9 lea dx,x2 int 21h
nhap:
mov ah,1 int 21h cmp al,1 jbe nhap cmp ax,cx
ja nhap call nhapk mov k,bx mov ah,9 lea dx,x1 int 21h mov ah,1 int 21h mov bl,al sub cx,1 mov di,l mov si,l
std daykytu: lodsb stosb cmp si,k jae daykytu mov al,bl stosb mov ah,9 lea dx,x3 int 21h lea dx,s int 21h mov ah,4ch int 21h main endp end main