CTMT - Part 5
Câu hỏi 1: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thực hiện đặt mode màn hình là 00h, xoá màn hình và hiển thị lên màn hình máy tính dòng chữ: “LOP TIN HOC” có thuộc tính là nền vàng chữ đỏ tại vị trí hiện thời của con trỏ. - P2
Câu hỏi 2: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM hiển thị lên màn hình bắt đầu tại vị trí cột 20, dòng 5 một cột 5 chữ H có thuộc tính nền trắng, chữ màu vàng. P2
Câu hỏi 3: Giả sử có 1 dãy ký tự (mã ASCII) nhận từ bàn phím được nhớ trong 1 vùng nhớ có địa chỉ DS:SI, độ dài của dãy ký tự đó được lưu giữ trong thanh ghi CX. Lập trình hợp ngữ Assembly file có phần mở rộng là .COM truyền dãy ký tự đó ra cổng COM1 của máy tính với tốc độ truyền là 19200bps, 7 bits số liệu, 2 bit stop, không kiểm tra chẵn lẻ, tần số làm việc đưa vào chân Xin của vi mạch 8250 là 1,842*106 hz.. - P4
Câu hỏi 4: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thực hiện vẽ trên màn hình ở chế độ đồ hoạ 1 đường dọc có độ dày 4 điểm sáng bắt đầu từ toạ độ hàng 80 cột 60-63 đến toạ độ hàng 40 cột 60-63. - P6
Câu hỏi 5: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM hiển thị thông báo: “Phim nhan duoc la:” thuộc tính nền trắng, chữ xanh lục tại ví trí hiện thời của con trỏ. Sau đó chương trình sẽ chờ nhận phím từ bàn phím và hiện ra màn hình. Xuống dòng, về đầu dòng rồi lại hiển thị thông báo trên. 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. Mã ASCII của ký tự xuống dòng là 0dh, mã ASCII của ký tự về đầu dòng là 0ah.? - P7
Câu hỏi 6: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM đặt Card Video làm việc ở chế độ 02, sau đó hiển thị lên màn hình bắt đầu tại ví trí có toạ độ là hàng 5 cột 12 lần lượt 6 ký tự có mã ASCII như sau: 3fh, 3eh, 3dh, 3ch, 3bh, 3ah, mỗi ký tự cách nhau 1 khoảng trống với thuộc tính nền đỏ chữ trắng. P7
Câu hỏi 7: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM xác định tham số truyền cho vi mạch 8250 trên máy tính có địa chỉ giải mã là 3f8h như sau: 7 bit data, 1 bits stop, no parity, tốc độ truyền là 9600 bps, với tần số clock là 1,843Mhz. - P9
Câu hỏi 8: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thực hiện: Máy tính sẽ liên tục hỏi xem có phím được ấn hay không. Nếu có phím được ấn thì hiện thị thông báo:
"phim duoc an la:" và ký tự. Xuống dòng, về đầu dòng rồi lại đợi nhận 1 phím mới. Chương trình kết thúc khi ấn phím ESC - P10
Câu hỏi 9: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thực hiện:
Xoá màn hình. Thiết lập chế độ màn hình 06 (đồ hoạ, phân giải 640x200, 2màu),
Vẽ 1 đường chéo màu trắng từ điểm ảnh có toạ độ (60,60) đến toạ độ (40,20). - P11
Câu hỏi 10: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM cho vi mạch vào/ra Intel 8255A giả sử có địa chỉ giải mã là 04f0 làm công việc sau:
Máy tính sẽ liên tục đọc trạng thái của một mạch điện qua cổng B của 8255. Nếu bit D2 của cổng B có mức logic là “1” thì sẽ tạo ra trên cổng PC 4 của 8255 một xung vuông có độ rộng 33% (Phần xung dương bằng 1/3 phần xung âm). Giả sử chương trình tạo độ rộng được cho trước dưới dạng một chương trình con có tên là: DELAY. - P11
Câu hỏi 11: Lập trình hợp ngữ Assembly file có phần mở rộng là .COM thực hiện nhận số liệu từ cổng COM1 (dưới dạng mã ASCII). Cất số liệu nhận được vào vùng nhớ có địa chỉ DS:DI. Nếu mã ASCII nhận được có giá trị là 1dh thì kết thúc chương trình. Với định dạng đường truyền như sau 7 bit data, 1 bits stop, no parity, tốc độ truyền là 19,200 bps, với tần số clock là 1,843Mhz. - P13
Câu hỏi 12: Giả sử vi mạch 8255 cắm trên 1 Card vào slot ISA của máy tính IBM PC có địa chỉ giải mã là 0154h Lập trình hợp ngữ Assembly file có phần mở rộng là .COM cho vi mạch này làm việc như sau: Hai nhóm làm việc ở mode 0, cổng A là cổng vào, cổng B là cổng ra và tất cả các bit của cổng C là ra. Máy tính sẽ liên tục đọc và kiểm tra bit D6 của cổng A. Nếu bit này có mức logic “1” thì đưa ra trên cổng B các bit D0, D2, D4, D6 mức logic “1”. - P15
--------------------------------------------------------------------------------------------------------
Câu 1:
; Hien thi dong chu "LOP TIN HOC" nen do chu vang tai vi tri hien thoi cua con tro.
code segment
assume cs:code, ds:code
org 100h
begin:
; Dat mode man hinh: Su dung Int 10h voi Ah = 0; Al = che do
mov ah,00 ;
mov al,00
int 10h ; Dat che do xong
; Hien thi dong chu: Sư dung Int 13h voi al =00 (kh cap nhat vi tri) Bl chưa byte thuoc tinh
mov ah,13h ; dung int 10h voi ah = 13h
mov al,00 ; cap nhat thuoc tinh cua xau, khong cap nhat vi tri con tro
mov cx,0bh ; do dai xau ky tu là 11 ky tu
mov bh,00 ; trang hien thi la trang 0
mov bl, 0e4h ; thuoc tinh nen vang chu do
lea bp,str ; nap dia chi dau cua xau
int 10h ; Hien thi ky tu ra man hinh
; Ket thuc chuong trinh: Su dụng ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
str db "LOP TIN HOC"
code ends
end begin
Câu 2
; Hien thi ra man hinh tai vi tri (20,5) mot cot 5 chu H nen trang, chu vang.
code segment
assume cs:code, ds:code
org 100h
begin:
; Dat mode man hinh: Su dung Int 10h voi Ah = 0; Al = che do
mov ah,00 ;
mov al,02 ; che do 80 cot * 25 hang.
int 10h ; Dat che do xong
; Dua con tro ve vi tri cot 20 dong 5: Su dung ham Int 10h voi ah =02,
; Dh= toa do hang, Dl = toa do cot,
; su dung SI la thanh ghi dem so dong hien thi
mov dh,05h ; toa do tai hang 5
mov dl,14h ; toa do cot 20
mov si,05 ; hien thi mot cot 5 ky tu
lap:
mov ah,02
int 10h ; dat con tro ve vi tri trong dh va dl
; Hien thi mot cot 5 chu H tai vi tri con tro vua dat.
; Su dung ham Int 10h voi ah = 09h; bl thuoc tinh, cx so lan hien thi
mov cx, 01 ; so ky tu hien thi là 1
mov al, "H" ; Al chua ma ASCII cua ky tu H
mov ah,09 ; Hien thi ky tu
mov bl,7eh ; thuoc tinh nen trang chu vang
int 10h ; hien thi 1 chu H
inc dh ; tang toa do hang len 1
dec si ; giam thanh ghi dem so lan hien thi 1 don vi
jnz lap ; neu chua du 5 hang thi lam lai
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
code ends
end begin
Câu 3
với tốc độ truyền là 19,200 bps thì số chia được sẽ được xác định như sau:
Số chia = X(in)/ (Tốc độ truyền * 16) = ( 1,8432*10^6 ) / (19.200 * 16) = 6
; Truyen day so lieu tu bo nho ra cong COM1 voi toc do 19,200bps
code segment
assume cs:code, ds:code
org 100h
begin:
; Thiet lap duong truyen: dat bits D7 cçṡ thanh ghi 3fbh len 1
mov al,80h ; dat DLAB = 1
mov dx, 3fbh ; napdia chi thanh ghi dieu khien duong truyen
out dx, al ; DLAB = 1
; gui so chia: khi bit D7 của thanh ghi 3fb =1, thanh ghi
mov ax, 0006 ; toc do truyen la 19,200 bps
mov dx, 3f8h ; dia chi phan thap so chia
out dx,al ; nap phan thap so chia
mov al, ah ; chuyen phan cao so chia sang al
inc dx ; dia chi phan cao so chia
out dx, al ; nap phan cao so chia
; thiet lâp tham so truyen: nap vao thanh ghi dieu khien duong truyen 3fbh
mov al,86h ; tham so truyen 7 bit data, 2 bit stop, no parity
mov dx,03fbh ; dia chi thanh ghi dieu khien duong truyen
out dx,al
; Thuc hien truyen so lieu
mov al,03 ; DLAB = 0 de xac lap thanh ghi co dia chi
mov dx,03fbh ; 3f8h giu chuc nang thanh ghi chua du lieu
out dx,al ; se phat
L1:
mov dx,3fdh ; dia chi thanh ghi LSR
L2:
in al,dx ; doc cac bit cua thanh ghi trang thai
and al,20h ; Neu so lieu da gui di thi bit D5=1,
cmp al,20h ; UART san sang gui byte tiep va TSR rong
jnz L2 ; neu chua thi doc lai va kiem tra
mov al,[si] ; dua byte tiep theo vao thanh ghi al
mov dx,03f8h ; gui di
out dx,al
inc si ; tro den ky tu tiep theo cua xau
loop L1
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
code ends
end begin
Câu 4
; Ve 1 duong doc tren man hinh bat dau tu toa do (80,60) den toa do (40,60)
code segment
assume cs:code, ds:code
org 100h
begin:
; xoa man hinh: su dung int 10h voi ah = 06
mov ax, 0600h ;
mov bh, 07h ;
mov cx, 0000 ; toa do dau cua man hinh
mov dx, 184fh ; toa do cuoi man hinh
int 10h
; dat che do do hoa cho man hinh: ah = 0, al = 06 (al = 13h)
mov ax, 0006h
int 10h
; ve duong doc tu (80,60-63) den (40,60-63)
mov dx, 80 ; toa do dau hang diem anh
L: mov cx, 60 ; toa do dau cot diem anh
lap:
mov ah, 0ch ; 0c viet vao diem anh
mov al,71h ; mo diem anh (che do 05 neu al=10 mau hong)
int 10h
inc cx ; viet diem sang thu 2
cmp cx,63 ; viet 4 diem anh
jnz lap ; neu chu du 4 diem anh thi viet tiep
dec dx ; giam vi tri hang
cmp dx, 40 ; kiem tra vi tri cuoi cung
jnz L ; lam lai neu chua bang
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
code ends
end begin
Câu 5
; hien thi thong bao: "phim duoc an la:" nhan phim va hien thi ra man hinh voi thuoc tinh
; nen xanh chu trang, Xuong dong, ve dau dong roi lai hien thi dong chu tren, doi nhan 1
; phim moi. Chuong trinh ket thuc khi an phim ESC.
code segment
assume cs:code, ds:code
org 100h
begin:
; Hien thi thong bao; su dung int 21h voi ah = 09h
mov ah,09h
lea dx,msg
int 21h
; Kiem tra co phim an: int 21h. ah=08
mov ah,08
int 21h
; hien thi phim an co thuoc tinh. int 10h, ah = 09
mov ah,09h
mov bl,72h ; thuoc tinh
mov cx,01 ; hien thi mot ky tu
int 10h
; Neu phim an la ESC: ket thuc
cmp al,1bh
je ket_thuc
; xuong dong ve dau dong: int 21h voi ah=02
mov ah,02
mov dl,0dh
int 21h
mov dl,0ah
int 21h
jmp begin ; quay lai cho mot phim moi
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
ket_thuc:
mov ah,4ch
int 21h
msg db 'phim duoc an la: $'
code ends
end begin
Câu 6
;hien thi 5 ky tu co ma ASCII 3fh, 3e, 3d,3c,3b bat dau tu dong 5 cot 12
; che do 02 co thuoc tinh nen do chu trang moi chu cach nhau 2 khoang trong
code segment
assume cs:code, ds:code, ss: code
org 100h
begin:
; su dung thanh ghi si lam con dem
mov si,05 ; hien thi 5 lan
;dat che do hien thi (AH = 00,AL= che do) int 10h
mov ax,0002h
int 10h
; dat vi tri con tro (ah=02, dh=hang; dl = cot)
mov dh,05
mov dl,0ch
call vitri
;hien ky tu co thuoc tinh (ah =09, bl=thuoc tinh,ma ASCII trong al)
mov al,3fh ; ma ASCII cua ky tu
mov bl,47h ; thuoc tinh
lap:
mov ah,03 ; xac dinh vi tri hien thoi cua con tro, dh=hang, dl=cot
int 10h
mov cx,01 ; hien 1 ky tu
mov ah,09
int 10h
inc dl ; tang vi tri con tro sang cot ben canh
dec al ; Al chua ma ASCII cua ky tu tiep theo
; dich vi tri con tro
call vitri
; tao 1 khoang trong
call khoangtrong
dec si
jnz lap
; ket thuc
mov ah,4ch
int 21h
; chuong trinh con dat con tro vao vi tri
vitri proc near
mov ah,02h
int 10h
;chuong trinh con tao khoang trong(int 21h Ah=02, dl ma ASCII)
khoangtrong proc near
push ax
push dx
mov ah,02
mov dl,00
int 21h
pop dx
pop ax
code ends
end begin
Câu 7
với tốc độ truyền là 9,600 bps thì số chia được sẽ được xác định như sau:
Số chia = X(in)/ (Tốc độ truyền * 16) = ( 1,8432*10^6 ) / (9.600 * 16) = 12
; Truyen day so lieu tu bo nho ra cong COM1 voi toc do 9,600bps
code segment
assume cs:code, ds:code
org 100h
begin:
; Thiet lap duong truyen: dat bits D7 cçṡ thanh ghi 3fbh len 1
mov al,80h ; dat DLAB = 1
mov dx, 3fbh ; napdia chi thanh ghi dieu khien duong truyen
out dx, al ; DLAB = 1
; gui so chia: khi bit D7 cçṡ thanh ghi 3fb =1, thanh ghi
mov ax, 000ch ; toc do truyen la 9,600 bps
mov dx, 3f8h ; dia chi phan thap so chia
out dx,al ; nap phan thap so chia
mov al, ah ; chuyen phan cao so chia sang al
inc dx ; dia chi phan cao so chia
out dx, al ; nap phan cao so chia
; thiet lâp tham so truyen: nap vao thanh ghi dieu khien duong truyen 3fbh
mov al,83h ; tham so truyen 7 bit data, 1 bit stop, no parity
mov dx,03fbh ; dia chi thanh ghi dieu khien duong truyen
out dx,al
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
code ends
end begin
Câu 8
May tinh se lien tuc hoi xem co phim duoc an hay khong. Neu co phim duoc an thi hien thi thong bao:
; "phim duoc an la:" va ky tu. Xuong dong, ve dau dong roi lai doi
; nhan 1 phim moi. Chuong trinh ket thuc khi an phim ESC.
code segment
assume cs:code, ds:code
org 100h
begin:
; Hien thi thong bao; sau hanh dong nay al=$ (24h)
mov ah,09h
lea dx,msg
int 21h
; Kiem tra co phim an: int 21h. ah=08
mov ah,08
int 21h
; hien thi phim an. int 10h, ah = 09
mov ah,09h
mov bl,72h ; thuoc tinh
mov cx,01 ; hien thi mot ky tu
int 10h
; Neu phim an la ESC: ket thuc
cmp al,1bh
je ket_thuc
; xuong dong ve dau dong: int 21h voi ah=02
mov ah,02
mov dl,0dh
int 21h
mov dl,0ah
int 21h
jmp begin ; quay lai cho mot phim moi
ket_thuc:
mov ah,4ch
int 21h
msg db 'phim duoc an la: $'
code ends
end begin
Câu 9
; dat mode do hoa cho man hinh.
; ve mot duong cheo tren man hinh tu toa do (60,60) den (40,20)
code segment
assume cs:code, ds:code
org 100h
begin:
; xoa man hinh
mov ax, 0600h ;
mov bh, 07h ;
mov cx, 0000
mov dx, 184fh
int 10h
; dat che do cho man hinh che do 06
mov ax, 0013h
int 10h
; ve duong cheo tu (60,60) den (40,20)
mov cx, 60
mov dx, 60
lap:
mov ah, 0ch ; 0c viet vao diem anh
mov al, 01 ; mo diem anh (che do 05 neu al=10 mau hong)
int 10h
dec dx ; giam vi tri hang di 1
dec cx ; giam vi tri cot di 2
dec cx
cmp cx,20 ; kiem tra vi tri cuoi cung
jnz lap ; Nhay neu nho hon hoac bang
ket_thuc:
mov ah,4ch
int 21h
code ends
end begin
Câu 10
Phân tích: Để đọc trạng thái của bit 2 cổng B của 8255 cần phải thiết lập cho vi mạch này làm việc ở chế độ 0, cổng B là cổng đọc vào.
Để tạo xung trên đầu ra trên đầu ra PC4 ta thiết lập vimạch làm việc ở chế độ đặt và xoá mức (BSR). Xung trên đầu ra PC 4 có dang sau: __|--------|__________|-----
| 1/3T | 2/3T |
Thiết lập cho 8255 mode 0, cổng B là cổng vào; Thanh ghi điều khiển có giá trị: 82h
để thiết lập mức 1 trên PC 4 Thanh ghi điều khiển có giá trị: 09h
để thiết lập mức 0 trên PC 4 Thanh ghi điều khiển có giá trị: 08h
; Chuong trinh thiet lap mode cho 8255
code segment
assume cs:code, ds:code
org 100h
begin:
; dat 8255 mode 0, cong B la cong vao
mov dx, 04f3h ; dia chi cua thanh ghi dieu khien
mov al, 82h ;
out dx,al ; dat mode vao thanh ghi dieu khien
; hoi trang thai bit D2
lap:
mov dx, 04f1h ; dia chi cong B
in al,dx
and al,02h ; nhan logic al voi 02 (bit D2=1)
cmp al,02h
jnz lap ; neu bit D2 kh co muc 1 thi doc lai
; nang PC4 1 len muc logic 1
mov dx,04f3h dia chi cua thanh ghi dieu khien
mov al,09h ; xac dinh muc 1 tren PC4
out dx,al ; nap thanh ghi dieu khien
call dellay ; giu cham 1 khoang dellay
; ha PC4 xuong muc 0
mov dx,04f3h ;
mov al,08h ; ha muc tren PC4 xuong 0
out dx,al
call dellay
call delay ; giu cham muc 0 2 khoang dellay
; nang PC4 len muc logic 1
mov dx,04f3h ; dia chi cua thanh ghi dieu khien
mov al,09h ; xac dinh muc 1 tren PC4
out dx,al ; nap thanh ghi dieu khien
ket_thuc:
mov ah,4ch
int 21h
code ends
end begin
Câu 11
với tốc độ truyền là 9,600 bps thì số chia được sẽ được xác định như sau:
Số chia = X(in)/ (Tốc độ truyền * 16) = ( 1,8432*10^6 ) / (9.600 * 16) = 12
; Nhan day so lieu tu cong COM1 voi toc do 9,600bps
code segment
assume cs:code, ds:code
org 100h
begin:
; Thiet lap duong truyen: dat bits D7 cua thanh ghi 3fbh len 1
mov al,80h ; dat DLAB = 1
mov dx, 3fbh ; napdia chi thanh ghi dieu khien duong truyen
out dx, al ; DLAB = 1
; gui so chia: khi bit D7 cua thanh ghi 3fb =1, thanh ghi
mov ax, 000ch ; toc do truyen la 9,600 bps
mov dx, 3f8h ; dia chi phan thap so chia
out dx,al ; nap phan thap so chia
mov al, ah ; chuyen phan cao so chia sang al
inc dx ; dia chi phan cao so chia
out dx, al ; nap phan cao so chia
; thiet lâp tham so truyen: nap vao thanh ghi dieu khien duong truyen 3fbh
mov al,83h ; tham so truyen 7 bit data, 1 bit stop, no parity
mov dx,03fbh ; dia chi thanh ghi dieu khien duong truyen
out dx,al
; hoi bit trang thai cua thanh ghi trang thai duong truyen
mov dx,03fdh ; dia chi thanh ghi trang thai duong truyen
lap1:
in al,dx
cmp al,60h ; neu 2 bit D5, D6 cung = 1san sang nhan
jnz lap1
; nhan so lieu tu cong
mov cx,00 ; dung cx lam thanh ghi so byte thong tin nhan
mov dx,03f8h ; dia chi bo dem thu
in al,dx ; nhan so lieu tu cong COM
mov [di], al ; cat byte nhan duoc vao [DI]
inc di ; tang con tro di len 1 tro sang byte tiep theo
inc cx ; tang cx len 1 bao co them 1 bit nua vua nhan
cmp al,0dh ; hoi ky tu nhan co phai la xuong dong kh?
jnz lap1 ; neu kh phai, nhan tiep byte tiep theo
; Ket thuc chuong trinh: Su dung ham Int 21h voi Ah = 4ch.
mov ah,4ch
int 21h
code ends
end begin
Câu hỏi 12
Phân tích: để thiết lập mode 0 cho 8255 với cổng A: vào, cổng B: ra và cổng C: ra thì giá trị của thanh ghi điều khiển là 90h
Chọn Mode – nhóm B || D0 = 0: Nửa thấp Port C – out
0 – Mode 0 || D0 = 1: Nửa thấp PortC - in
1 – Mode 1 ||
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
Chọn Mode – nhóm A ||
00 – Mode 0 || D4 = 0: Port A – out || D1 = 0: Port B – out
01 – Mode 1 || D4 = 1: Port A – in || D1 = 1: Port B – in
1x – Mode 2
|| D3 = 0: nửa cao Port C – out
|| D3 = 1: nửa cao port C – in
Định nghĩa thanh ghi điều khiển 8255A
; Chuong trinh thiet lap mode cho 8255
code segment
assume cs:code, ds:code
org 100h
begin:
; dat 8255 mode 0, cong A la vao, cong B, C là ra
mov dx, 0157h ; dia chi cua thanh ghi dieu khien
mov al, 90h ;
out dx,al ; dat mode vao thanh ghi dieu khien
; hoi trang thai bit D6 cua cong A
lap:
mov dx, 0154h ; dia chi cong A
in al,dx
and al,20h ; nhan logic al voi 20 (bit D6=1)
cmp al,20h
jnz lap ; neu bit D2 kh co muc 1 thi doc lai
; nang cac bit D0, D2, D4, D6 cong B len muc logic 1
mov dx,0155h ; dia chi cua cong B
mov al,55h ; cac bits D0, D2, D4, D6 co muc logic 1
out dx,al ; out ra cong B
ket_thuc:
mov ah,4ch
int 21h
Bạn đang đọc truyện trên: AzTruyen.Top