Tải bản đầy đủ (.docx) (11 trang)

BT Cấu Trúc máy tính có lời giải

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 (57.64 KB, 11 trang )

BÀI TẬP
1

2

Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 10h/AH=0 để đặt chế độ màn hình là 02h. Sau đó, sử dụng
ngắt INT 10h/AH=13h để hiển thị lên màn hình máy tính dòng chữ: “HOC
VIEN KTQS” có thuộc tính là nền đỏ chữ vàng (4Eh) bắt đầu tại vị trí cột
15, dòng 20.
org 100h
Begin:
;dat mode man hinh:
mov ah,00h
mov al,02h
int 10h
;hien thi dong chu:
mov al,00
mov ah,13h
mov cx,13
mov bl,4eh
lea bp,str
;vi tri con tro:
mov dh,0fh
mov dl,14h
int 10h
;ket thuc:
int 20h
str db "HOC VIEN KTQS"
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử


dụng ngắt INT 10h/AH=0 thiết lập chế độ màn hình 03.Sau đó, sử dụng
ngắt INT 10h/AH=13h để hiển thị lên màn hình bắt đầu tại vị trí cột 30,
dòng 12, chuỗi ký tự “CAU TRUC MAY TINH” có thuộc tính chữ màu đỏ,
nền màu vàng (1110_0100b).
org 100h
;dat mode man hinh:
mov ah,00h
mov al,03h
int 10h
;hien thi dong chu:


3

mov al,00
mov ah,13h
mov cx,17
mov bl,0e4h
lea bp,str
;vi tri con tro:
mov dh,0ch
mov dl,1eh
int 10h
;ket thuc:
int 20h
str db "CAU TRUC MAY TINH"
ret
Bài tập: Viết chương trình hợp ngữ sử dụng ngắt INT 14h/AH=00 để thiết
lập tham số truyền của cổng COM1: tốc độ truyền 4800 baud, độ dài dữ liệu
7 bit, 1 bit dừng (1 stop bit), kiểm tra lỗi bằng bit bậc chẵn (Even Parity).

Sau đó, kiểm tra thanh ghi đệm phát rỗng (bit D5=1 của từ trạng thái cổng
COM) thì sử dụng ngắt INT 14h/AH=01 để gửi chuỗi ký tự “Hello!” ra cổng
COM1.
org 100h
DATA DB "HELLO","$"
;che do cong com1
mov ah,00
mov dx,00
mov al,82h; 110=4800;11=BAC CHAN;0=1 BIT DUNG;10=7 BI
int 14h
;thiet lap duong truyen:
mov al,80h
mov dx,3fbh
out dx,al
;gui so chia:
mov ax,18h
mov dx,3f8h
out dx,al
mov al,ah
inc dx
out dx,al
;thiet lap tham so truyen:
mov al,82h


4

mov dx,03fbh
out dx,al
mov [SI],OFFSET DATA

;hoi bi trang thai cua thanh ghi
mov dx,03fdh
lap1:
mov ah,01
int 14h
in al,dx
and al,20h
cmp al,20h
jnz lap1
mov al,[SI]
cmp al,"$"
je kt
kt:
int 20h
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thiết
lập màn hình chế độ đồ họa 13h, sau đó vẽ trên màn hình một đường dọc bắt
đầu từ toạ độ cột 62 hàng 60 (62,60) đến toạ độ cột 62 hàng 30 (62,30).
org 100h
; xoa man hinh
mov ax,0600h
mov bh,07h
mov cx,0000 ;toa do dau man hinh
mov dx,184fh
int 10h
;dat che do do hoa cho man hinh
mov ax,0013h
int 10h
;ve duong doc
mov dx,60

mov cx,62
lap:
mov ah,0ch
mov al,01h
int 10h
dec cx


5

6

cmp cx,30
jnz lap
;ket thuc
int 20h
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 21h/AH=9 hiển thị thông báo: “Nhan phim:”. Sau đó, dùng
ngắt INT16h/AH=00 để đọc ký tự từ bàn phím và hiện ký tự đó ra màn hình
bằng ngắt INT 10h/AH=0Eh. Quá trình cứ lặp liên tục cho đến khi bạn ấn
phím ESC có mã ASCII là 1Bh chương trình sẽ kết thúc.
org 100h
;hien thong bao:
mov ah, 09h
lea dx,tb
int 21h
;doc ki tu tu ban phim:
dkt:
mov ah, 00H

int 16h
jz dkt
;hien kt ra man hinh:
mov ah, 0eh
int 10h
;neu an ESC thi kt:
cmp al,1bh
jz kt
jmp dkt
;ket thuc ct:
kt:
int 20h
tb db "nhan phim:$"
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 10h/AH=0 thiết lập màn hình chế độ 0, sau đó sử dụng ngắt
INT 10h/AH=09 hiển thị lên màn hình bắt đầu tại ví trí có toạ độ là cột 20 ,
hàng 12 lần lượt 6 ký tự có mã ASCII như sau: 31h, 32h, 33h, 34h, 35h, 36h,
với thuộc tính chữ trắng trên nền đỏ?
org 100h


;sd thanh ghi si làm con dem:
mov si,06
;dat che do hien thi:
mov ax,0002h
int 10h
;dat vi tri con tro:
mov dh,0ch
mov dl,14h

call vitri
;hien ki tu co thuoc tinh:
mov al,31h
mov bl,47h
lap:
mov ah,03; vi tri hien thoi con tro
int 10h
mov cx,01
mov ah,09
int 10h
inc dl
dec al
;tao 1 khoang trong:
call kt
dec si
jnz lap
int 20h
;dich vi tri con tro:
call vitri
;ct con dat con tro vao vi tri:
vitri proc near
mov ah,02h
int 10h
ret
;ct con tao kt:
kt proc near
push ax
push dx
mov ah,02
mov dl,00

int 21h
pop dx


7

8

pop ax
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thiết
lập tham số truyền cho vi mạch UART 8250 trên máy tính có địa chỉ giải mã
là 3f8h như sau: 7 bit data, 1 bits stop, kiểm tra lẻ, tốc độ truyền là 14.400
bps, với tần số clock là 1,843MHz. (Có thể dùng ngắt INT 14h/AH=0 để
thiết lập tham số truyền của cổng COM1)
org 100h
;thiet lap duong truyen:dat bit D7 co thanh ghi 3fbh len 1:
mov al,80h
mov dx,3fbh;nap dia chi
out dx,al
;gui so chia
mov ax,08h;toc do truyen 14.400
mov dx,3f8h;dia chi phan thap so chia
out dx,al; chuyen phan cao so chia sang al
inc dx; dia chi phan cao so chia
out dx,al; nap phan cao so chia
;thiet lap tham so truyen:
mov al,82h
mov dx,03fbh ;dia chi thanh ghi dk duong truyen
out dx,al

int 20h
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 16h/AH=0 đọc ký tự từ bàn phím. Nếu có phím được ấn thì
hiện thị thông báo "Phim duoc an la:" và ký tự. Sau đó lại quay lại đọc bàn
phím. Chương trình kết thúc khi ấn phím ESC (mã ASCII là 1Bh).
org 100h
begin:
;hien thong bao:
mov ah, 09h
lea dx,tb
int 21h
;kiem tra co phim an:
mov ah,08
int 21h
;doc ki tu tu ban phim:


9

dkt:
mov ah, 00H
int 16h
jz dkt
;hien kt ra man hinh:
mov ah,0eh
int 10h
;neu an ESC thi kt:
cmp al,1bh
jz kt

jmp dkt
jmp begin
;ket thuc ct:
kt:
int 20h
tb db "phim duoc an la:$"
ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 10h/AH=0 để thiết lập chế độ màn hình 06 (chế độ màn hình
đồ hoạ, độ phân giải 640x200, 2 màu). Sau đó, sử dụng ngắt INT
10h/AH=0Ch để vẽ một đường chéo màu trắng từ điểm ảnh có toạ độ
(60,60) đến toạ độ (40,40).
org 100h
; xoa man hinh
mov ax,0600h
mov bh,07h
mov cx,0000 ;toa do dau man hinh
mov dx,184fh
int 10h
;dat che do do hoa cho man hinh
mov ax,0013h
int 10h
;ve duong cheo
mov dx,60
mov cx,60
lap:
mov ah,0ch
mov al,01h
int 10h



dec cx
dec dx
cmp cx,40
jnz lap
10

11

ret
Bài tập: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM sử
dụng ngắt INT 16h/AH=0 liên tục đọc dữ liệu từ bàn phím. Nếu ký tự được
nhấn là ‘b’ thì bật loa bằng cách đặt 2 bit D1, D0 của cổng ra với địa chỉ 61h
đều bằng 1. Sau đó, quay lại đọc dữ liệu bàn phím. Nếu có phím bất kỳ
được nhấn (không phải phím ‘b’) thì loa tắt bằng cách xóa 2 bit D1, D0 của
cổng 61h. Rồi quay lại đọc bàn phím.
org 100h
dockitu:
mov ah, 00H
int 16h
jz dockitu
cmp al,"b"
jz batloa
mov al,00h
out 61h,al
batloa:
mov bl,00000011b
mov al,bl
out 61h,al
jmp dockitu

ret
Bài tập: Viết chương trình hợp ngữ sử dụng ngắt INT 14h/AH=00 để thiết
lập tham số truyền của cổng COM1: tốc độ 4800 baud, độ dài dữ liệu 7 bit, 1
bit dừng (1 stop bit), kiểm tra lỗi bằng bit bậc chẵn (Even Parity). Sau đó,
kiểm tra có dữ liệu nhận (bit D0=1 của từ trạng thái cổng COM) thì sử dụng
ngắt INT 14h/AH=02 để nhận ký tự từ cổng COM1, rồi cất vào bộ nhớ bắt
đầu từ địa chỉ DS:200h. Nếu nhận được ký tự Esc (mã ASCII là 1Bh) thì kết
thúc chương trình.
org 100h
;che do cong com1
mov ah,00
mov dx,00
mov al,82h; 110=4800;11=BAC CHAN;0=1 BIT DUNG;10=7 BI


12

int 14h
;thiet lap duong truyen:
mov al,80h
mov dx,3fbh
out dx,al
;gui so chia:
mov ax,18h
mov dx,3f8h
out dx,al
mov al,ah
inc dx
out dx,al
;thiet lap tham so truyen:

mov al,82h
mov dx,03fbh
out dx,al
;hoi bi trang thai cua thanh ghi
mov dx,03fdh
lap1:
mov ah,02
int 14h
in al,dx
and al,01h
cmp al,01h
jnz lap1
;nhan so lieu tu cong
mov cx,00
mov dx,03f8h
in al,dx
mov di:[200h],al
inc di
cmp al,1bh
je kt
jnz lap1
kt:
int 20h
ret
Bài tập: Lập trình hợp ngữ sử dụng ngắt INT 14h/AH=1 khởi tạo cổng máy
in LPT1. Sau đó kiểm tra trạng thái cổng máy in. Nếu trạng thái máy in sẵn


sàng (bit D7=1 trạng thái cổng máy in), thì sử dụng ngắt INT 14h/AH=0 để
in ra chuỗi ký tự “I print a message”. Sau đó thoát ra.

org 100h
;khoi tao cong may in
mov ah,0
mov dx,0
mov ah,01
int 14h
;dieu khien may in
out dx,al
inc dx
B3:
sub cx,cx
B3_1:
in al,dx
mov ah,al
test al,80h
jnz B4
loop B3_1
dec bl
jnz B3
or ah,01
and ah,0f9h
B4:
mov al,0dh
inc dx
out dx,al
mov al,0ch
out dx,al
mov [SI],OFFSET DATA
;kiem tra bit D7
lap1:

mov ah,01
int 14h
in al,dx
and al,80h
cmp al,80h
jnz lap1
mov al,[SI]


cmp al,"$"
je kt
kt:
int 20h
DATA DB "I print a message","$"
ret



×