You are on page 1of 4

BÀI TẬP VI XỬ LÝ I

Bài 1: Viết đoạn chương trình Assembly để thực hiện phép nhân hai số 3A62H với
B214H. Kết quả được lưu vào hai vị trí nhớ có nhãn là MEM1 và MEM2.
Giải:
BAI1 PUSH AX ; cất AX
PUSH CX ; cất CX
MOV AX, 3A62H ; nạp 3A62H vào AX
MOV CX, 0B214H ; nạp B214H vào CX
MUL CX ; nhân AX với CX
MOV MEM1, AX ; chuyển AX vào nhãn MEM1
MOV MEM2, DX ; chuyển DX vào nhãn MEM2
POP CX ; hoàn trả nội dung CX
POP AX ; hoàn trả nội dung AX
RET
Bài 2: Viết đoạn chương trình Assembly để thực hiện phép chia hai số 6H cho 3H
dung thanh ghi CL. Kết quả được đưa vào vị trí nhớ có nhãn là MEM1.
Giải:
BAI2 PUSH AX ; cất AX
PUSH CX ; cất CX
MOV AL,6H ; nạp 6H vào AL
MOV AH,0H ; cho AH bằng 0
MOV CL,3H ; nạp 3H vào CL
DIV CL ; chia AX cho CL
MOV MEM1,AL ; chuyển AL vào MEM1
POP CX ; hoàn trả nội dung CX
POP AX ; hoàn trả nội dung AX
RET
Bài 3: Viết đoạn chương trình Assembly để thực hiện phép chia hai số 1A034H
cho 1002H dùng thanh ghi BX. Kết quả được đưa vào vị trí nhớ có nhãn là MEM1
và số dư được đưa vào vị trí nhớ có nhãn là MEM2.
Giải:
BAI3 PUSH AX ;Cất AX
PUSH BX ;Cất BX
PUSH DX ;Cất DX
MOV AX, 0A034H ;Nạp A034H vào AX
MOV DL, 01H ;Nạp 1H vào DL
MOV DH, 00H ;Nạp 0H vào DH
MOV BX, 1002H ;Nạp 1002H vào BX
DIV BX ;Chia DX:AX cho BX
MOV MEM1, AX ;Chuyển kết quả vào MEM1
MOV MEM2, DX ;Chuyển số dư vào MEM2
POP DX ;Hoàn trả nội dung DX
POP BX ;Hoàn trả nội dung BX
POP AX ;Hoàn trả nội dung AX
RET
Bài 4: Viết chương trình chuyển mảng dữ liệu từ vùng nhớ DISPLAY_VIDEO
(700H) có địa chỉ mảng là DISPLAY_BASE (B800H) tới vùng nhớ dữ liệu
BUFFER_SAVE có địa chỉ do DS quản lý. Biết rằng vùng nhớ DISPLAY_VIDEO
chứa 1KB ký tự (mã ASCII).
Giải:
;…………………………….
; Định nghĩa các hằng số
;…………………………….
DISPLAY_BASE EQU 0B800h
DISPLAY_VIDEO EQU 700h
;……………………………..
Code_Seg SEGMENT ; mở mảng lệnh
ASSUME CS:Code-Seg, DS:Data_Seg
ORG 100h ; Tạo file dạng COM
ThuTucChinh PROC ;thủ tục chính
CALL Chuyen_Mang ;gọi chương trình con chuyển mảng
ThuTucChinh EndP
;…………………………….
Chuyen_Mang PROC NEAR
PUSH AX
PUSH CX
MOV SI, DISPLAY_VIDEO ;SI trỏ tới vùng chứa ký tự cần chuyển
LEA DI, BUFFER_SAVE ;DI trỏ tới vùng sẽ chuyển ký tự tới
MOV AX, DISPLAY_BASE
MOV DS, AX ;DS:SI tới vùng chứa ký tự cần chuyển đi
MOV AX, CS
MOV ES, AX ;ES:DI trỏ tới vùng sẽ chuyển ký tự tới
CLD ;Xóa cờ DF:DF=0
MOV CX, 1024 ;bộ đếm 1024
Loop 1Kb:
MOVSB ; dùng lệnh chuyển xâu ký tự kiểu byte
LOOP Loop 1Kb ; lặp lại cho tới hết 1024 byte
POP CX
POP AX
RET
Chuyen_Mang ENDP
;……………….
Code_Seg ENDS ;đóng mảng lệnh
;………………………
Data_Seg SEGMENT ;mở mảng dữ liệu
BUFFER_SAVE DB 1024 DUP(?); Cấp phát vùng nhớ để chứa dữ liệu
Data_Seg EndS ;Đóng mảng dữ liệu
;………………………
END ThuTucChinh

Bài 5: Tính toán thiết kế bộ nhớ có dumg lượng 16KB (16x1024x8bit) trên cơ sở
các RAM nhớ 4KB (4x1024x8bit).
Bài 6: Tính toán thiết kế bộ nhớ có dung lượng 64K (16x1024x16bit) trên cơ sở
các RAM nhớ 16KB (16x1024x4bit0.
Bài 7: Tính toán thiết kế bộ nhớ có dung lượng 128MB (128x1020x1024x16bit)
trên cơ sở các RAM nhớ 32MB (32x1024x1024x8bit).
Bài 8: Tính toán thiết kế bộ nhớ có dung lượng 32GB (32x1024x1024x1024x32bit)
trên cơ sở các RAM nhớ 2GB (2x1024x1024x1024x8bit).
Bài 9: Tính toán thiết kế bộ nhớ có dung lượng 32KB (32x1024x16bit) trên cơ sở
các RAM nhớ 4KB (4x1024x8bit).
Bài 10: Giả sử 8255A có địa chỉ cơ sở là 00H và hoạt động ở MODE 0. Viết đoạn
chương trình để nhận thong tin từ ngoại vi 1 nối với cổng PA của 8255A từng byte
một rồi xuất cho ngoại vi 2 nối với cổng PB, biết số byte cần chuyển là 100.
Giải:
Port A EQU 00H
Port B EQU 01H
Port C EQU 02H
CWR EQU 03H
CW EQU 90H
PUSH AX ;Cất AX
PUSH CX ;Cất CX
MOV AL,CW ;Nạp từ điều khiển vào AL
OUT CWR,AL ;Đưa từ điều khiển ra CWR
MOV CX,100 ;Tạo vòng lặp 100 lần
Loop 100
IN AL,Port A ;Nhập byte dữ liệu từ Port A
OUT Port B, AL ;Chuyển byte dữ liệu ra Port B
LOOP Loop 100 ;Lặp 100 lần
POP CX ;Trả giá trị cho CX
POP AX ;Trả giá trị cho AX
Bài 11: Ta có địa chỉ mạch ưu tiên ngắt 8259A
PIC0 = 0000H
PIC1 = 00001H
Hãy viết chương trình khởi tạo cho 8259A để làm việc với CPU họ 80X86 ở chế độ
chủ. Trong hệ không có đẹm BUS, chế độ ưu tiên cố định và EOI thường. IR kích
theo mức. Tín hiệu IR0-gán số hiệu ngắt 70H.
Giải:
ICW1: 00011111 = 1FH
ICW2: 01110000 = 70H
ICW4: 00000101 = 05H
PIC0 EQU 0000H ; cho bit Ao=0
PIC1 EQU 0001H ;cho bit Ao=1
PUSH AX
PUSH I
CLI ;cấm mọi ngắt
MOV AL,1FH ;nạp 1FH vào AL
OUT PIC0,AL ;ghi vào ICW1 của Pic
MOV AL,70H ;nạp 70H vào AL
OUT PIC1,AL ;ghi vào ICW2 của Pic
MOV AL,05H ;nạp 05H vào AL
OUT PIC1,AL ;ghi vào ICW4 của Pic
STI ;cho phép các ngắt hoạt động trở lại
POP I
POP AX

You might also like