Tải bản đầy đủ (.doc) (8 trang)

Các câu hỏi và đáp án môn vi xử lý

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (103.1 KB, 8 trang )

1. 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ố 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
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
8. 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 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
main 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
trình hợp 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
trình hợp 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


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

20. 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



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
từ bàn phím
(1<k<length(ch)).
.model small
.stack 100h
.data
l dw ?
k dw ?
x1 db 10,13,' nhap ch:
$'
x2 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

×