Professional Documents
Culture Documents
BÀI TẬP KỸ THUẬT VI XỬ LÝ
BÀI TẬP KỸ THUẬT VI XỬ LÝ
name "calc-sum"
; number of elements:
mov cx, 5
mov al, 0
; bx is an index:
mov bx, 0
; sum elements:
; next byte:
inc bx
loop next
; store result in m:
mov m, al
mov bl, m
mov cx, 8
jz zero
shl bl, 1
loop print
int 21h
int 21h
int 21h
mov al, m
call print_al
mov ah, 0
int 16h
ret
; variables:
vector db 5, 4, 5, 2, 1
m db 0
print_al proc
cmp al, 0
jne print_al_r
push ax
int 10h
pop ax
ret
print_al_r:
pusha
mov ah, 0
cmp ax, 0
je pn_done
mov dl, 10
div dl
call print_al_r
mov al, ah
int 10h
jmp pn_done
pn_done:
popa
ret
endp
Giải thích:
org 100h: đặt địa chỉ bắt đầu của chương trình là 100h
mov cx, 5: chuyển giá trị 5 vào thanh ghi cx để lưu số phần tử trong mảng
vector
mov al, 0: chuyển giá trị 0 vào thanh ghi al để lưu tổng các phần tử trong mảng
mov bx, 0: chuyển giá trị 0 vào thanh ghi bx để lưu chỉ số của mảng
next: nhãn để đánh dấu vòng lặp tính tổng
add al, vector[bx]: cộng giá trị của phần tử tại chỉ số bx trong mảng vector vào
al
inc bx: tăng giá trị của bx lên 1
loop next: lặp lại vòng lặp cho đến khi cx bằng 0
mov m, al: chuyển giá trị của al vào biến m để lưu kết quả của tổng
mov bl, m: chuyển giá trị của m vào thanh ghi bl để in ra kết quả dưới dạng nhị
phân
mov cx, 8: chuyển giá trị 8 vào thanh ghi cx để lưu số bit cần in ra
print: nhãn để đánh dấu vòng lặp in ra kết quả dưới dạng nhị phân
mov ah, 2: chuyển giá trị 2 vào thanh ghi ah để gọi hàm in ra
mov dl, ‘0’: chuyển ký tự ‘0’ vào thanh ghi dl để chuẩn bị in ra
test bl, 10000000b: kiểm tra bit đầu tiên của bl
jz zero: nếu bit đó bằng 0 thì nhảy đến nhãn zero
mov dl, ‘1’: nếu bit đó bằng 1 thì chuyển ký tự ‘1’ vào thanh ghi dl để chuẩn bị
in ra
zero: nhãn để đánh dấu khi bit đầu tiên bằng 0
int 21h: gọi ngắt số 21h để thực hiện hàm in ra
shl bl, 1: dịch trái bl một bit để chuẩn bị kiểm tra bit tiếp theo
loop print: lặp lại vòng lặp cho đến khi cx bằng 0
mov dl, ‘b’: chuyển ký tự ‘b’ vào thanh ghi dl để in ra hậu tố nhị phân
int 21h: gọi ngắt số 21h để thực hiện hàm in ra
mov dl, 0ah: chuyển ký tự xuống dòng vào thanh ghi dl để in ra xuống dòng
mới
int 21h: gọi ngắt số 21h để thực hiện hàm in ra
mov dl, 0dh: chuyển ký tự trở về đầu dòng vào thanh ghi dl để in ra trở về đầu
dòng
int 21h: gọi ngắt số 21h để thực hiện hàm in ra
mov al, m: chuyển giá trị của m vào thanh ghi al để in ra kết quả dưới dạng
thập phân
call print_al: gọi thủ tục print_al để thực