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

BÀI TẬP KỸ THUẬT VI XỬ LÝ

Bài tập 1: Gthich chương trình

name "calc-sum"

org 100h ; directive make tiny com file.

; calculate the sum of elements in vector,

; store result in m and print it in binary code.

; number of elements:

mov cx, 5

; al will store the sum:

mov al, 0

; bx is an index:

mov bx, 0

; sum elements:

next: add al, vector[bx]

; next byte:
inc bx

; loop until cx=0:

loop next

; store result in m:

mov m, al

; print result in binary:

mov bl, m

mov cx, 8

print: mov ah, 2 ; print function.

mov dl, '0'

test bl, 10000000b ; test first bit.

jz zero

mov dl, '1'

zero: int 21h

shl bl, 1

loop print

; print binary suffix:


mov dl, 'b'

int 21h

mov dl, 0ah ; new line.

int 21h

mov dl, 0dh ; carrige return.

int 21h

; print result in decimal:

mov al, m

call print_al

; wait for any key press:

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

mov al, '0'

mov ah, 0eh

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

add al, 30h

mov ah, 0eh

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

You might also like