Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 19

Xử lý số học

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Tính n! trong đó n nhập từ bàn phím.
a. Bài làm
.model small
.stack 100
.data
tb1 db "Nhap MSV: $"
tb2 db "AT160353","$"
tb3 db 13,10,"NGUYEN THI HUYEN TRANG $"
tb4 db 13,10,"sai msv$"
str1 db 100,0,100 dup('$')
.code
main proc
mov ax,@data
mov ds,ax

;nhap chuoi 1
lea dx,tb1
mov ah,09h
int 21h
lea dx,str1
mov ah,10
int 21h
xor cx,cx

check:
lea si,str1+2
mov cl,[str1+1]
lea di,tb2

lap:
xor ax,ax
mov al,[si]
cmp al,[di]
jne notsame
inc si
inc di
loop lap
lea dx,tb3
mov ah,9
int 21h
jmp Exit

notsame:
lea dx,tb4
mov ah,9
int 21h
jmp Exit

Exit:
mov ah,4ch
int 21h
main endp
end main

b. Bài làm:
.model small
.stack 100
.data
str1 DB 'moi nhap x: $'
str2 DB 'x! = $'
Er DB 'Sai dinh dang so$'
CRLF DB 10, 13, '$'
.code
main proc
mov ax, @data
mov ds, ax
lea dx, str1
call printString
call nhap
call endline
lea dx, str2
call printString
call calculate
call printNumber
mov ah, 4ch
int 21h
main endp
;---------------------
nhap proc
;vao: ban phim
;ra: ax
push bx
push dx
xor bx, bx
tieptuc:
mov ah, 1
int 21h
cmp al, 13
je thoat
cmp al, '0'
jb error
cmp al, '9'
ja error
and ax, 000fh
push ax
mov ax, 10
mul bl
mov bx, ax
pop ax
add bx, ax
jmp tieptuc
error:
mov ah, 9
lea dx, Er
int 21h
mov ah, 4ch
int 21h
thoat:
mov ax, bx
pop dx
pop bx
ret
nhap endp
;---------------------
calculate proc
;vao: ax
;ra: ax
push cx
push dx
xor dx, dx
mov cx, ax
mov ax, 1
tinhtiep:
mul cx
loop tinhtiep
pop dx
pop cx
ret
calculate endp
;---------------------
endline proc
push ax
push dx
mov ah, 9
lea dx, CRLF
int 21h
pop dx
pop ax
ret
endline endp
;---------------------
printNumber proc
;vao: ax
;ra: man hinh
push bx
push cx
push dx
mov bx, 10
mov cx, 0
xor dx, dx
XULY:
div bx
inc cx
push dx
xor dx, dx
cmp ax, 0
jz INRA
jmp XULY
INRA:
mov ah, 2
pop dx
add dx, '0'
int 21h
loop INRA
pop dx
pop cx
pop bx
ret
printNumber endp
;---------------------
printString proc
push ax
mov ah, 9
int 21h
pop ax
ret
printString endp
end main
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Tính tổng các phần tử trong chuỗi số.
b)Giải:
;tong cac phan tu trong chuoi so
.model tiny
.stack 100h
.data
tb1 db 13,10,'tong cac phan tu trong chuoi:$'
st2 db 13,10,'$'
m db 1,2,3,4,5,6,7,8,9
a db 0
.code
main proc
mov ax,@data
mov ds,ax

lea dx,tb1
mov ah,9
int 21h

mov cx,9 ;do dai chuoi


lea si,m
mov a,0

lap:
mov al,[si]
mov bl,a
add al,bl
mov a,al
inc si
loop lap

mov al,a ;chuyen so tro lai thanh ghi al


mov bl,10;de chia cho 10
mov cx,0
chia:
mov ah,0
div bl
mov dl,ah
add dl,30h
push dx
inc cx
cmp al,0
je inso
jmp chia

inso:
pop dx
mov ah,2 ;chi in dc 1 ki tu
int 21h
loop inso

mov ah,4ch
int 21h
main endp
end main

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Đếm số lượng số nguyên tố trong chuỗi số.
.model small
isngto macro
xor bx,bx
mov bl,2
xor ah,ah
mov al, [si]
lap:
cmp ax, 2
jb bang0
cmp ax,2
jz bang1
xor dx,dx
div bx
cmp dx, 0
jz bang0
mov al, [si]
inc bx
cmp bx,ax
jz bang1
jmp lap
bang1:
jmp cong1
bang0:
mov tmp,0
endm
.stack 100h
.data
msg1 db "so luong so nguyen to la: $"
chuoi db 0,1,2,3,4,5,6,7,8,9,10,11
tmp db 1
s db 0
.code
MAIN PROC
mov ax,@data
mov ds,ax
mov es,ax
mov bx,13
push bx
mov ah,9
lea dx, msg1
int 21h
xor cx,cx
mov cl, 12
ktra:
lea si,chuoi
tungso:
isngto
inc si
loop tungso
vao:
xor ax,ax
mov al,s
inra:
mov bx, 10
xor dx,dx
div bx
push dx
cmp ax,0
jz hienthi
jmp inra
hienthi:
pop dx
cmp dx,13
jz thoat
mov ah,2
add dl,30h
int 21h
jmp hienthi
thoat:
mov ah,4Ch
int 21h
cong1:
add s,1
inc si
loop tungso
jmp vao
main endp
end main

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Đếm số lượng số chia hết cho 5 (hay một số bất kỳ) trong chuỗi số
Bai lam:
.model small
.stack 100h
.data
msg1 db "so luong so chia het cho 5 la: $"
n db 10
sum db ?
chuoiso db 10,54,13,47,50,6,71,8,70,112
.code
main proc
mov ax,@data
mov ds,ax
mov es,ax

mov ah,9
lea dx,msg1
int 21h

xor cx,cx
mov cl,10 ;thay n vao day
lea si, chuoiso
mov ax,13
push ax
ktra:
xor ah,ah
mov al, [si]
xor dx,dx
div n
inc si
cmp ah,0
jz chiahet
loop ktra
jmp exit
chiahet:
inc sum
dec cx
cmp cx,0
jz exit
jmp ktra

exit:
xor ax,ax
mov al,sum
mov bx,10
vao:
xor dx,dx
div bx
push dx
cmp ax,0
jz ra
jmp vao
ra:
pop dx
cmp dx,13
jz kt
mov ah,2
add dl,30h
int 21h
jmp ra
kt:
mov ah,4Ch
int 21h
main endp
end main

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Đếm số lượng phần tử âm dương trong chuỗi số
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào mã sinh viên và hiển thị đúng tên của mình.
b. Nhập vào một số hệ thập phân hiển thị các giá trị đổi ra cơ số 16 (hexa)
và nhị phân (16 bit)

Xử lý chuỗi kí tự
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào mã sinh viên và hiển thị đúng đúng tên của mình.
b. Đổi tất cả các ký tự in thường thành in HOA trong chuỗi ký tự nhập vào
từ bàn phím
Ys b:
.model small
.stack 100
.data
str db 256 dup('$')
tb1 db 0Dh, 0Ah, 'Chuyen sang chuoi in thuong: $' ;10, 13
tb2 db 0Dh, 0Ah, 'Chuyen sang chuoi in hoa: $'
.code
main proc
mov ax, @data
mov ds, ax
lea dx, str
;nhap chuoi
mov ah, 10
int 21h

mov ah, 9
lea dx, tb1
int 21h
call inthuong

mov ah, 9
lea dx, tb2
int 21h
call inhoa

mov ah, 4ch


int 21h
main endp
inthuong proc
lea si, str+2
lap1:
mov dl, [si]
cmp dl, 'A'
jl in1
cmp dl, 'Z'
jg in1
add dl, 32
In1:
mov ah, 2
int 21h
inc si
cmp [si], '$'
jne lap1
RET
inthuong endp

inhoa proc
lea si, str+2
lap2:
mov dl, [si]
cmp dl, 'a'
jl in2
cmp dl, 'z'
jg in2
sub dl, 32
In2:
mov ah, 2
int 21h
inc si
cmp [si], '$'
jne lap2
RET
inhoa endp
end

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng đúng tên của mình.
b. Đổi tất cả các ký tự in HOA thành in thường trong chuỗi ký tự nhập vào
từ bàn phím. Code treen cau 7
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào mã sinh viên và hiển thị đúng đúng tên của mình.
b. Đảo ngược chuỗi ký tự nhập vào từ bàn phím (dùng ngăn xếp)
Bai lam:
.model small
.stack 100
.data
mang db 20,0, 20 dup(?)
tb1 db "Nhap ma SV: $"
tb2 db 10,13,'Ma SV dao nguoc la: $'

.code
main proc
mov ax,@data
mov ds,ax
mov ah,9
lea dx, tb1
int 21h

mov ah,0ah
lea dx,mang
int 21h

lea dx, tb2


mov ah,9
int 21h

mov cl,[mang + 1]
lea si, mang + 2
Lap:
push [si]
inc si
loop Lap
mov cl, [mang + 1]
Lap2:
pop dx
mov ah,2
int 21h
Loop Lap2
mov ah,4ch
int 21h
main endp
end main

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng đúng tên của mình.
b. Nhập vào một chuỗi, tìm ký tự trong chuỗi (ví dụ tìm ký tự “A”)
write macro bien1
mov ah, 09h
lea dx, bien1
int 21h
endm
dseg segment
string db "ngo thi huong aA ?"
tb1 db "co ky tu A trong chuoi string $"
tb2 db "khong ky tu A trong chuoi string $"
dseg ends
cseg segment
assume cs:cseg, ds:dseg, es: dseg
begin:
mov ax, dseg
mov ds, ax
mov es, ax
cld ; chonchieu xu ly chuoi
mov cx, 17 ; so ky tu can tim
mov al, 'A' ; tim kien ky tu A trong string1
lea di, string ; (ES:DI)--> dia chi cua chuoi dich
repne scasb ; lap lai viec tim kiem ky tu cho den
jne intb2 ; khi gap duoc hoac den het chuoi
write tb1
jmp thoat
intb2: write tb2
thoat: mov ah,08h ; dung man hinh de xem ket qua
int 21h
mov ah, 4ch ; thoat ve Dos
int 21h
cseg ends
end begin

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào mã sinh viên và hiển thị đúng đúng tên của mình.
b. Nhập vào một chuỗi, đếm số ký tự trong chuỗi
;dem so ki tu nhap vao
.MODEL small
.STACK
.DATA
tb1 DB 'Nhap vao 1 chuoi: $'
tb2 DB 10,13,'So ki tu trong chuoi: $'
s DB 100,?,101 dup('$')
.CODE
BEGIN:
MOV AX, @DATA
MOV DS,AX

MOV AH,09h
LEA DX,tb1
INT 21h

MOV AH,0AH
LEA DX,s
INT 21h

MOV AH,09h
LEA DX,tb2
INT 21h

XOR AX,AX
MOV AL,s+1 ;Chuyen chieu dai chuoi vao ax
MOV CX,0 ;Khoi tao bien dem
MOV BX,10

LapDem1:
MOV DX,0 ;null
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LapDem1

MOV AH,2
LapDem2:
POP DX
OR DL,'0' ;chuyen chu so -> so
INT 21H
LOOP LapDem2
MOV AH,4ch
INT 21h
END BEGIN

Xử lý tệp tin
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào họ tên sinh viên và hiển thị đúng MSV của mình.
b. Tạo một tệp tin mới, tên tập tin nhập từ bàn phím, ghi nội dung vào tệp
tin nhập từ bàn phím.
DSEG SEGMENT
tenfile db 200 dup<?>,0
chuoi Db 100 DUP(0)
thefile dw ?

DSEG ENDS
CSEG SEGMENT
ASSUME cs:cseg, ds:dseg
begin:
mov ax, dseg
mov ds, ax

mov ah,1
lea si, tenfile

nhap:
int 21h
cmp al,0dh
jz abc
mov [si],al
inc si
jmp nhap

abc:
mov ah,3ch ; tao tap tin moi
mov cx, 020h ; thuoc tinh tap tin
lea dx, tenfile
int 21h

MOV SI, 0 ; chi so mang


MOV CX, 100 ; do dai mang max

LAP:
MOV AH, 1 ; nhap ky tu
INT 21H
CMP AL,0Dh ;check dau enter
JE STOP
MOV chuoi[SI], AL
INC SI
JMP LAP

STOP:
mov ah, 3ch ; tao tap tin moi
lea dx, tenfile
mov cx, 0 ; tap tin co thuoc tinh binh thuong
int 21h
mov cx, si
mov thefile, ax ; cat the file
mov ah, 40h ; ghi file
mov bx, thefile

GHI_FILE:
;xor cx, cx
;mov cl, len
mov dh,0
mov dl, chuoi[SI]
;lea dx, string1
int 21h
LOOP GHI_FILE
mov ah, 3eh ; dong tap tin
mov bx, thefile
int 21h
mov ah, 4ch ; thoat ve Dos
int 21h

CSEG ENDS
END begin

Ghi file

dseg segment
chuoi Db 100 DUP(0)
len db $ - string1
tenfile db "E:\emu8086\MyBuild\e.txt",0
thefile dw ?
dseg ends
cseg segment
assume cs:cseg, ds:dseg
begin: mov ax, dseg
mov ds, ax
MOV SI, 0 ; chi so mang
MOV CX, 100 ; do dai mang max

LAP:
MOV AH, 1 ; nhap ky tu
INT 21H
CMP AL,0Dh ;check dau enter
JE STOP
MOV chuoi[SI], AL
INC SI
JMP LAP

STOP:
mov ah, 3ch ; tao tap tin moi
lea dx, tenfile
mov cx, 0 ; tap tin co thuoc tinh binh thuong
int 21h
mov cx, si
mov thefile, ax ; cat the file
mov ah, 40h ; ghi file
mov bx, thefile

GHI_FILE:
;xor cx, cx
;mov cl, len
mov dh,0
mov dl, chuoi[SI]
;lea dx, string1
int 21h
LOOP GHI_FILE
mov ah, 3eh ; dong tap tin
mov bx, thefile
int 21h
mov ah, 4ch ; thoat ve Dos
int 21h
cseg ends
end begin

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào họ tên sinh viên và hiển thị đúng MSV của mình.
b. Đọc nội dung một tệp tin (.txt) đã tạo sẵn trong máy tính.
dseg segment
tenfile db "E:\emu8086\MyBuild\e.txt",0
thefile dw ?
chuoi Db 100 DUP(0)
len db ?
buffer db 251 dup ('$')

dseg ends
cseg segment
assume cs:cseg, ds:dseg
begin:
mov ax, dseg
mov ds, ax

mov ah, 3dh ; mo tap tin da co


lea dx, tenfile
mov al, 2 ; thuoc tinh tap tin
int 21h
mov thefile, ax ; cat the file
mov ah, 3fh ; doc noi dung file vao vung dem
mov bx, thefile
lea dx, buffer
mov cx, 250 ; so byte can doc tu file da mo
int 21h
mov ah, 09h ; in noi dung cua file ra man hinh
lea dx, buffer
int 21h

mov ah, 4ch ; thoat ve Dos


int 21h
cseg ends
end begin
Viết chương trình hợp ngữ với chức năng sau:
a. Nhập vào họ tên sinh viên và hiển thị đúng MSV của mình.
b. Xóa một tệp tin (.txt) đã tạo sẵn trong máy tính.
dseg segment
tenfile db "e:\emu8086\MyBuild\e.txt",0
dseg ends
cseg segment
assume cs:cseg, ds:dseg
begin: mov ax, dseg
mov ds, ax
mov ah,41h ; xoa tap tin da co
lea dx, tenfile
int 21h
mov ah, 4ch ; thoat ve Dos
int 21h
cseg ends
end begin

Viết chương trình hợp ngữ với chức năng sau:


a. Nhập vào họ tên sinh viên và hiển thị đúng MSV của mình.
b. Thay đổi tên một tệp tin (.txt) đã tạo sẵn trong máy tính.
dseg segment
newfile db "e:\emu8086\MyBuild\e.txt",0
oldfile db "e:\emu8086\MyBuild\solieu.txt",0
dseg ends
cseg segment
assume cs:cseg, ds:dseg, es: dseg
begin: mov ax, dseg
mov ds, ax
mov es, ax
mov ah,56h ; rename/remove tên file cu thanh moi
lea dx, oldfile
lea di, newfile
int 21h
mov ah, 4ch ; thoat ve Dos
int 21h
cseg ends
end begin

You might also like