MẠCH CỘNG FA (FULL ADDER 3 BIT)
Rút gọn Cout dùng giản đồ Kanaugh
Các bước thực hiện trên phần mềm Quatus II:
3 Tạo project mới, đặt tên: FA
4 Tạo tập tin thiết kế mạch FA Lưu lại với tên: FA.bdf
5 Biên dịch thiết kế: Processing Start Compilation
6 Đóng gói thiết kế Đặt tên là: FA.bsf
5 Tạo tập tin mô phỏng Lưu lại với tên FA.vwf
MẠCH CỘNG 4 BIT KHÔNG DẤU
Tạo project mới, đặt tên: CONG4BIT
Mạch cộng 4 bit được thiết kế từ 1 mạch cộng HA và 3 mạch cộng FA Trước khi tiến hành thiết kế, cần sao chép các tập tin HA.bdf, HA.bsf, FA.bdf và FA.bsf từ các dự án HA và FA vào dự án mới tạo.
2 Tạo tập tin thiết kế mạch cộng 4 bit Lưu lại với tên: CONG4BIT.bdf
3 Tạo tập tin mô phỏng Lưu ý: chọn hệ cơ số khi mô phỏng là Unsigned Decimal Lưu lại với tên:
MẠCH CỘNG/TRỪ 4 BIT CÓ DẤU
1 Tạo project mới, đặt tên: CONGTRU4BIT
2 Tạo tập tin thiết kế mạch cộng/trừ 4 bit Lưu lại với tên: CONGTRU4BIT.bdf (Sao chép các tập tin cần thiết HA, FA vào project mới)
3 Tạo tập tin mô phỏng Lưu ý: chọn hệ cơ số khi mô phỏng là Signed Decimal Lưu lại với tên: CONGTRU4BIT.vwf
- Khi tín hiệu CONTROL = 0 mạch thực hiện chức năng cộng (S=A+B), khi CONTROL = 1
mạch thực hiện chức năng trừ (S=A-B)
- Mạch thực hiện chức năng cộng/trừ trên số có dấu 4 bit nên kết quả chỉ hiện thị đúng khi tổng/hiệu thuộc miền giá trị [-8,+7]
1 Tạo project mới đặt tên là: NHAN3BIT
Mạch nhân 3 bit kết hợp các module mạch cộng 1 bit như FA và HA cùng với các cổng AND Để bắt đầu, chúng ta cần sao chép các tập tin cần thiết vào dự án mới.
3 Tạo tập tin thiết kế mạch nhân 3 bit Lưu lại với tên: NHAN3BIT.bdf
4 Tạo tập tin mô phỏng Lưu ý: chọn hệ cơ số khi mô phỏng là Unsigned Decimal Lưu lại với tên:
To eliminate delays and display noise in the results, switch the simulation mode from Timing to Functional Navigate through the menu: Assignments > Settings > Simulator Settings > Simulation mode, and select Functional.
Từ menu Processing Generate Functional Simulation Netlist Chạy lại mô phỏng và quan sát kết quả
3.2.1 Mạch đa hợp 2-1 1 bit (Mux2_1_1bit)
Bảng trạng thái s Ngõ ra tại m
- Chọn ngõ vào a, chọn Count Value Timing Mục count every: đặt giá trị là 50
- Tương tự, tại ngõ vào b, đặt giá trị là 10 Mục đích của việc này là tạo ra 2 tín hiệu có thể hiện khác nhau
- Lưu và chạy mô phỏng, kết quả thể hiện như hình bên dưới
Giải thích: khi s bằng 0 ngõ ra m bằng a, khi s bằng 1 ngõ ra m bằng b
- Thực hiện đóng gói thiết kế cho mạch đa hợp 2-1 1bit Lưu và đặt tên là: MUX2_1_1BIT.bsf
Thực hiện ghép 4 mạch MUX2_1_1BIT để tạo thành mạch đa hợp 2-1 4 bit
1 Tạo project mới đặt tên là MUX2_1_4BIT
2 Sao chép các file cần thiết vào project mới
4 Mô phỏng s1 s0 Ngõ ra tại m
- Thực hiện đóng gói thiết kế cho mạch đa hợp 4-1 1bit Lưu và đặt tên là: MUX4_1_1BIT.bsf
3.2.4 Mạch đa hợp 4-1 4 bit (MUX4_1_4bit)
Thực hiện ghép 4 mạch MUX4_1_1BIT để tạo thành mạch đa hợp 4-1 4 bit (Sinh viên tự làm)
1 Tạo project mới đặt tên là ALU1BIT_2CN
2 Sao chép các file cần thiết vào project mới
Giải thích: Khi s bằng 0 mạch thực hiện chức năng AND, khi s bằng 1 mạch thực hiện chức năng OR
4.2 ALU 4 BIT 2 CHỨC NĂNG AND, OR
Thực hiện ghép 4 mạch ALU1BIT_2CN để tạo thành mạch ALU4BIT_2CN (Sinh viên tự làm)
4.3 ALU 1 BIT 4 CHỨC NĂNG AND, OR, XOR,
Xây dựng mạch ALU 1 bit 4 chức năng từ mạch đa hợp 4-1 1 bit kết hợp với cổng AND, OR, XOR và mạch CỘNG/TRỪ
1 Tạo project mới đặt tên là ALU1BIT_4CN
2 Sao chép các file cần thiết vào project ALU1BIT_4CN
4 Thực hiện đóng gói thiết kế cho mạch ALU1BIT_4CN Lưu và đặt tên: ALU1BIT_4CN.bsf
4.4 ALU 4 BIT 4 CHỨC NĂNG AND, OR, XOR,
Thực hiện ghép 4 mạch ALU1BIT_4CN để tạo thành mạch ALU4BIT_4CN
1 Tạo project mới đặt tên là ALU4BIT_4CN
2 Sao chép các file cần thiết vào project ALU4BIT_4CN
Để kiểm tra chức năng CỘNG/TRỪ của mạch một cách hiệu quả, việc chuyển hệ cơ số sang signed decimal là rất quan trọng, giúp lưu trữ và xuất dữ liệu một cách chính xác Ngoài ra, có nhiều loại flip-flop khác nhau, được ứng dụng rộng rãi trong nhiều lĩnh vực.
Trong bài viết này, chúng ta sẽ khám phá flip-flop T, được sử dụng trong thiết kế bộ đếm, và flip-flop D, áp dụng trong thiết kế thanh ghi Cả hai loại flip-flop này đều hoạt động tại cạnh lên của xung clock, khi mức điện áp chuyển từ thấp lên cao.
Bảng trạng thái hoạt động
1 Tạo project mới có tên: FLIPFLOP_T
2 Tạo tâp tin thiết kế: File New Block Diagram/Schematic File
3 Thêm khối tff, các input và output vào thiết kế, đặt tên như hình bên dưới
4 Lưu lại với tên FLIPFLOP_T.bdf
5 Biên dịch thiết kế: Processing Start Compilation
6 Tạo tập tin mô phỏng: File New Vector Waveform File
7 Thêm các ngõ tín hiệu và cài đặt các tham số như hình bên dưới Lưu lại với tên
8 Chạy mô phỏng, kết quả thể hiện như hình bên dưới
Bảng trạng thái hoạt động
1 Tạo project mới có tên: FLIPFLOP_D
2 Tạo tâp tin thiết kế: File New Block Diagram/Schematic File
3 Thêm khối dff, các input và output vào thiết kế, đặt tên như hình bên dưới
4 Lưu lại với tên FLIPFLOP_D.bdf
5 Biên dịch thiết kế: Processing Start Compilation
6 Tạo tập tin mô phỏng: File New Vector Waveform File
7 Thêm các ngõ tín hiệu và cài đặt các tham số như hình bên dưới Lưu lại với tên
1 Tạo project mới đặt tên: BODEM4BIT
Bộ đếm 4 bit được thiết kế bằng cách kết hợp 4 flip-flop T (TFF) Để lưu trữ thiết kế này, hãy đặt tên cho tệp là BODEM4BIT.bdf.
3 Tạo tập tin mô phỏng: File New Vector Waveform File Cài đặt các giá trị tương ứng như hình bên dưới Lưu lại với tên: BODEM4BIT.vwf
Giải thích: Tại vị trí cạnh lên của xung clock (chuyển từ mức thấp lên mức cao), tăng giá trị của Q lên 1 đơn vị.
Trong CPU, ngoài đơn vị xử lý số học (ALU) còn có các thanh ghi (register), đơn vị điểu khiển (control unit – CU) và bộ nhớ cache
1 Tạo project mới có tên: THANHGHI4BIT
2 Thanh ghi được cấu tạo từ các flip-flop D (DFF), do đó để thiết kế một thanh ghi 4 bit ta sẽ dùng
4 flip-flop D ghép lại Lưu lại với tên: THANHGHI4BIT.bdf
Giải thích: Tại vị trí cạnh lên của xung clock (chuyển từ mức thấp lên mức cao), lấy giá trị của D ghi vào Q
Thiết kế thanh ghi dịch 4 bit dùng flip-flop D ghép lại
Giải thích: Tại vị trí cạnh lên của xung clock, dịch giá trị của Q qua phải 1 bit và ghi giá trị của D vào bit cao nhất (MSB) của Q
1 Tạo một project mới, đặt tên RAM8BYTE
2 Chọn New Block Diagram/Schematic File để tạo thiết kế mới Vào Tools MegaWizard Plug-In Manager
4 Trong Memory Compiler, chọn RAM 1-PORT Đặt tên tập tin: RAM Chọn Next
Bộ nhớ RAM có kích thước 8 byte, do đó, độ rộng của bus dữ liệu là 8 bit và bus địa chỉ là 3 bit Hãy thiết lập các tùy chọn theo hình bên dưới.
Regs/Clken/Byte Enable/Aclrs
5 Lấy bộ nhớ RAM vừa tạo ra và gắn các input và output vào Đặt tên như hình bên dưới Lưu lại với tên RAM8BYTE.bdf
- Khi chân tín hiệu wren = 1 quá trình ghi dữ liệu từ data tại địa chỉ address vào q, khi wren 0 quá trình đọc dữ liệu tại địa chỉ address vào q
- Quá trình đọc/ghi dữ liệu được thực hiện tại vị trí cạnh lên của xung clock (xung clock chuyển từ mức thấp sang mức cao)
BÀI 7 LẬP TRÌNH HỢP NGỮ
Cấu trúc thông thường của một chương trình hợp ngữ cho vi xử lý 8086/8088:
Trong cấu trúc chương trình trên các từ khóa MODEL, CODE, DATA, STACK, PROC, ENDP, END là các hướng dẫn biên dịch
Cấu trúc chương trình hợp ngữ bao gồm ba phần chính: Đoạn CODE chứa toàn bộ mã lệnh, Đoạn DATA khai báo dữ liệu cần thiết, và Đoạn STACK lưu trữ ngăn xếp khi chương trình được nạp vào bộ nhớ để thực thi.
Thao tác đầu tiên của chương trình là trỏ thanh ghi đoạn DS về đầu đoạn DATA, hay còn gọi là khởi tạo thanh ghi đoạn DS:
Yêu cầu: Viết chương trình hợp ngữ cho vi xử lý (VXL) 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự từ bàn phím
- Hiển thị ký tự đã nhập ra màn hình
INT 21H là lệnh được sử dụng để gọi nhiều hàm của DOS, với chức năng cụ thể được xác định dựa trên giá trị trong thanh ghi AH Khi thực hiện lệnh INT 21H, hệ thống sẽ thực thi chức năng tương ứng mà chúng ta đã chỉ định.
Trong bài này chúng ta sẽ quan tâm đến 3 chức năng sau đây:
01H Nhập 1 ký tự Ký tự sau khi nhập được chứa trong thanh ghi AL
02H Xuất 1 ký tự Ký tự trước khi xuất được đặt trong thanh ghi DL 09H Xuất một chuỗi ký tự Địa chỉ chuỗi được lưu trong thanh ghi DX
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU DA NHAP LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Hiển thị ký tự LIỀN TRƯỚC và LIỀN SAU của ký tự đã nhập
- Để hiển thị ký tự liền sau, ta tăng giá trị của thanh ghi chứa ký tự lên một đơn vị:
INC DL (DL đang chứa ký tự)
- Ngược lại, để hiển thị ký tự liền trước, ta giảm giá trị của thanh ghi đi một đơn vị:
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU LIEN TRUOC LA:$'
THONGBAO3 DB 13,10,'KY TU LIEN SAU LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;DI CHUYEN KY TU VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự HOA
- Hiển thị ký tự THƯỜNG tương ứng của ký tự đã nhập
- Để hiển thị ký tự thường, thực hiện phép cộng ký tự hoa với giá trị 32D hoặc 20H
- Lệnh cộng thanh ghi với giá trị: ADD DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU HOA:$'
THONGBAO2 DB 13,10,'KY TU THUONG LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;CHUYEN TU KY TU HOA SANG KY TU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự THƯỜNG
- Hiển thị ký tự HOA tương ứng của ký tự đã nhập
- Để hiển thị ký tự hoa, thực hiện phép trừ ký tự thường với giá trị 32D hoặc 20H
- Lệnh trừ thanh ghi với giá trị: SUB DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU THUONG:$'
THONGBAO2 DB 13,10,'KY TU HOA LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập phím ENTER
- Phím ENTER có mã ASCII là 13D
- Ta tiến hành so sánh ký tự nhập vào với mã 13D Nếu bằng thì nhảy đến nhãn THOAT Nếu không thì lặp lại đoạn chương trình nhập ký tự
- Lệnh so sánh thanh ghi với giá trị: CMP THANH_GHI,GIA_TRI
- Lệnh nhảy nếu bằng: JE NHAN
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,13D ;SO SANH KY TU NHAP VOI VOI MA 13
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập đủ 10 ký tự
- Thanh ghi CX có chức năng đếm Sau mỗi vòng lặp giá trị của CX tự động giảm 1 đơn vị
- Muốn thực hiện bao nhiêu vòng lặp thì đặt giá trị tương ứng vào thanh ghi CX
- Kiểm tra CX=0 thì thoát chương trình
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP CX,0 ;KIEM TRA DU SO VONG LAP
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
Hướng dẫn sử dụng câu lệnh so sánh kết hợp với câu lệnh lặp có điều kiện LOOPNZ để thực hiện các bước cho đến khi CX=0 hoặc ZF=1.
(Lưu ý: thanh ghi cờ ZF=1 khi hiệu của phép trừ ký tự nhập vào với mã ASCII của phím
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP AL,13 ;SO SANH KY TU NHAP VAO VOI MA 13
LOOPNZ LAP ;LAP NEU CX BANG 0 HOAC ZF=1
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự số hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU SO” nếu ký tự nhập vào là ký tự số
+ In ra thông báo: “KHONG LA KY TU SO” nếu ký tự nhập vào không phải là ký tự số
- Giá trị số 0 đến 9 có mã ASCII tương ứng từ 48D đến 57D
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
+ JB NHAN: nhảy đến NHAN nếu nhỏ hơn
+ JA NHAN: nhảy đến NHAN nếu lớn hơn
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU SO!$'
THONGBAO3 DB 13,10,'KHONG LA KY TU SO!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,48D ;SO SANH KY TU VOI KY TU '0'
JB KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU NHO HON
CMP AL,57D ;SO SANH KY TU VOI KY TU '9'
JA KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU LON HON
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự CHỮ hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU HOA” nếu ký tự nhập vào là ký tự HOA
+ In ra thông báo: “LA KY TU THUONG” nếu ký tự nhập vào là ký tự THƯỜNG
+ In ra thông báo: “KHONG LA KY TU CHU” nếu ký tự nhập vào không phải là ký tự chữ
- Ký tự HOA có mã ASCII trong đoạn [65D, 90D], ký tự THƯỜNG có mã ASCII trong đoạn [97D, 122D]
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU HOA!$'
THONGBAO3 DB 13,10,'LA KY TU THUONG!$'
THONGBAO4 DB 13,10,'KHONG LA KY TU CHU!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,65D ;SO SANH VOI KY TU 'A'
JB KHONGLAKYTUCHU ;NEU NHO HON -> KHONG PHAI
CMP AL,122D ;SO SANH VOI KY TU 'z'
JA KHONGLAKYTUCHU ;NEU LON HON -> KHONG PHAI
CMP AL,90D ;SO SANH VOI KY TU 'Z'
JBE LAKYTUHOA ;NEU NHO HON HOAC BANG -> LA CHU HOA
CMP AL,97D ;SO SANH VOI KY TU 'a'
JAE LAKYTUTHUONG ;NEU LON HON HOAC BANG -> LA CHU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ Ngược lại, in ra tổng của hai số A, B
THONGBAO4 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,57D ;SO SANH TONG VOI SO '9'
;DI CHUYEN TONG VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ In ra thông báo: “TONG BANG 5” nếu tổng hai số bằng 5
+ In ra thông báo: “TONG NHO HON 5” nếu tổng hai số nhỏ hơn 5
+ In ra thông báo: “TONG LON HON 5” nếu tổng hai số lớn hơn 5
Hướng dẫn: Sử dụng các lệnh ADD, SUB, CMP và các lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP SO THU NHAT:$'
THONGBAO2 DB 13,10,'MOI NHAP SO THU HAI:$'
THONGBAO3 DB 13,10,'TONG LON HON 5!$'
THONGBAO5 DB 13,10,'TONG NHO HON 5!$'
THONGBAO6 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;HIEN THI THONGBAO2 NHAP SO THU 2
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
1 Chương trình nhập vào 1 ký tự, hiển thị mã ASCII của ký tự đó
2 Chương trình đếm số ký tự của một chuỗi nhập vào
3 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi thường, chuỗi hoa
4 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi đảo ngược
5 Chương trính tính tổng của 2 số bất kỳ
6 Chương trình nhập vào 1 toán tử và 2 toán hạng Tính kết quả.
MẠCH NHÂN - MẠCH ĐA HỢP
ĐƠN VỊ XỬ LÝ SỐ HỌC
ALU 4 BIT 2 CHỨC NĂNG AND, OR
Thực hiện ghép 4 mạch ALU1BIT_2CN để tạo thành mạch ALU4BIT_2CN (Sinh viên tự làm)
ALU 1 BIT 4 CHỨC NĂNG AND, OR, XOR, CỘNG/TRỪ
Xây dựng mạch ALU 1 bit 4 chức năng từ mạch đa hợp 4-1 1 bit kết hợp với cổng AND, OR, XOR và mạch CỘNG/TRỪ
1 Tạo project mới đặt tên là ALU1BIT_4CN
2 Sao chép các file cần thiết vào project ALU1BIT_4CN
4 Thực hiện đóng gói thiết kế cho mạch ALU1BIT_4CN Lưu và đặt tên: ALU1BIT_4CN.bsf
ALU 4 BIT 4 CHỨC NĂNG AND, OR, XOR, CỘNG/TRỪ
Thực hiện ghép 4 mạch ALU1BIT_4CN để tạo thành mạch ALU4BIT_4CN
1 Tạo project mới đặt tên là ALU4BIT_4CN
2 Sao chép các file cần thiết vào project ALU4BIT_4CN
4 Mô phỏng Để dễ kiểm tra chức năng CỘNG/TRỪ của mạch, ta chuyển hệ cơ số khi mô phỏng là signed decimal có ý nghĩa quan trọng trong việc lưu trữ dữ liệu trong mạch và xuất dữ liệu ra khi cần Có nhiều loại flip-flop khác nhau, chúng được sử dụng rộng rãi trong nhiều ứng dụng
Trong bài viết này, chúng ta sẽ tìm hiểu về flip-flop T, được sử dụng trong thiết kế bộ đếm, và flip-flop D, thường được áp dụng trong thiết kế thanh ghi Cả hai loại flip-flop này đều hoạt động tại cạnh lên của xung clock, tức là khi mức điện áp chuyển từ thấp lên cao.
Bảng trạng thái hoạt động
1 Tạo project mới có tên: FLIPFLOP_T
2 Tạo tâp tin thiết kế: File New Block Diagram/Schematic File
3 Thêm khối tff, các input và output vào thiết kế, đặt tên như hình bên dưới
4 Lưu lại với tên FLIPFLOP_T.bdf
5 Biên dịch thiết kế: Processing Start Compilation
6 Tạo tập tin mô phỏng: File New Vector Waveform File
7 Thêm các ngõ tín hiệu và cài đặt các tham số như hình bên dưới Lưu lại với tên
8 Chạy mô phỏng, kết quả thể hiện như hình bên dưới
Bảng trạng thái hoạt động
1 Tạo project mới có tên: FLIPFLOP_D
2 Tạo tâp tin thiết kế: File New Block Diagram/Schematic File
3 Thêm khối dff, các input và output vào thiết kế, đặt tên như hình bên dưới
4 Lưu lại với tên FLIPFLOP_D.bdf
5 Biên dịch thiết kế: Processing Start Compilation
6 Tạo tập tin mô phỏng: File New Vector Waveform File
7 Thêm các ngõ tín hiệu và cài đặt các tham số như hình bên dưới Lưu lại với tên
1 Tạo project mới đặt tên: BODEM4BIT
2 Bộ đếm được cấu tạo từ các flip-flop T (TFF), do đó để thiết kế một bộ đếm 4 bit ta sẽ dùng 4 flip-flop T ghép lại Lưu lại với tên: BODEM4BIT.bdf
3 Tạo tập tin mô phỏng: File New Vector Waveform File Cài đặt các giá trị tương ứng như hình bên dưới Lưu lại với tên: BODEM4BIT.vwf
Giải thích: Tại vị trí cạnh lên của xung clock (chuyển từ mức thấp lên mức cao), tăng giá trị của Q lên 1 đơn vị.
Trong CPU, ngoài đơn vị xử lý số học (ALU) còn có các thanh ghi (register), đơn vị điểu khiển (control unit – CU) và bộ nhớ cache
1 Tạo project mới có tên: THANHGHI4BIT
2 Thanh ghi được cấu tạo từ các flip-flop D (DFF), do đó để thiết kế một thanh ghi 4 bit ta sẽ dùng
4 flip-flop D ghép lại Lưu lại với tên: THANHGHI4BIT.bdf
Giải thích: Tại vị trí cạnh lên của xung clock (chuyển từ mức thấp lên mức cao), lấy giá trị của D ghi vào Q
Thiết kế thanh ghi dịch 4 bit dùng flip-flop D ghép lại
Giải thích: Tại vị trí cạnh lên của xung clock, dịch giá trị của Q qua phải 1 bit và ghi giá trị của D vào bit cao nhất (MSB) của Q
1 Tạo một project mới, đặt tên RAM8BYTE
2 Chọn New Block Diagram/Schematic File để tạo thiết kế mới Vào Tools MegaWizard Plug-In Manager
4 Trong Memory Compiler, chọn RAM 1-PORT Đặt tên tập tin: RAM Chọn Next
Bộ nhớ RAM có dung lượng 8 byte, dẫn đến độ rộng bus dữ liệu là 8 bit và bus địa chỉ là 3 bit Hãy thiết lập các tùy chọn theo hình bên dưới.
Regs/Clken/Byte Enable/Aclrs
5 Lấy bộ nhớ RAM vừa tạo ra và gắn các input và output vào Đặt tên như hình bên dưới Lưu lại với tên RAM8BYTE.bdf
- Khi chân tín hiệu wren = 1 quá trình ghi dữ liệu từ data tại địa chỉ address vào q, khi wren 0 quá trình đọc dữ liệu tại địa chỉ address vào q
- Quá trình đọc/ghi dữ liệu được thực hiện tại vị trí cạnh lên của xung clock (xung clock chuyển từ mức thấp sang mức cao)
BÀI 7 LẬP TRÌNH HỢP NGỮ
Cấu trúc thông thường của một chương trình hợp ngữ cho vi xử lý 8086/8088:
Trong cấu trúc chương trình trên các từ khóa MODEL, CODE, DATA, STACK, PROC, ENDP, END là các hướng dẫn biên dịch
Chương trình hợp ngữ được cấu trúc thành ba phần chính: đoạn CODE chứa toàn bộ mã lệnh, đoạn DATA khai báo dữ liệu và đoạn STACK lưu trữ stack của chương trình khi được nạp vào bộ nhớ để thực thi.
Thao tác đầu tiên của chương trình là trỏ thanh ghi đoạn DS về đầu đoạn DATA, hay còn gọi là khởi tạo thanh ghi đoạn DS:
Yêu cầu: Viết chương trình hợp ngữ cho vi xử lý (VXL) 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự từ bàn phím
- Hiển thị ký tự đã nhập ra màn hình
INT 21H là lệnh được sử dụng để truy cập nhiều hàm của DOS, với chức năng được xác định dựa trên giá trị trong thanh ghi AH Khi giá trị này được thiết lập, lệnh INT 21H sẽ thực hiện chức năng tương ứng.
Trong bài này chúng ta sẽ quan tâm đến 3 chức năng sau đây:
01H Nhập 1 ký tự Ký tự sau khi nhập được chứa trong thanh ghi AL
02H Xuất 1 ký tự Ký tự trước khi xuất được đặt trong thanh ghi DL 09H Xuất một chuỗi ký tự Địa chỉ chuỗi được lưu trong thanh ghi DX
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU DA NHAP LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Hiển thị ký tự LIỀN TRƯỚC và LIỀN SAU của ký tự đã nhập
- Để hiển thị ký tự liền sau, ta tăng giá trị của thanh ghi chứa ký tự lên một đơn vị:
INC DL (DL đang chứa ký tự)
- Ngược lại, để hiển thị ký tự liền trước, ta giảm giá trị của thanh ghi đi một đơn vị:
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU LIEN TRUOC LA:$'
THONGBAO3 DB 13,10,'KY TU LIEN SAU LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;DI CHUYEN KY TU VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự HOA
- Hiển thị ký tự THƯỜNG tương ứng của ký tự đã nhập
- Để hiển thị ký tự thường, thực hiện phép cộng ký tự hoa với giá trị 32D hoặc 20H
- Lệnh cộng thanh ghi với giá trị: ADD DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU HOA:$'
THONGBAO2 DB 13,10,'KY TU THUONG LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;CHUYEN TU KY TU HOA SANG KY TU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự THƯỜNG
- Hiển thị ký tự HOA tương ứng của ký tự đã nhập
- Để hiển thị ký tự hoa, thực hiện phép trừ ký tự thường với giá trị 32D hoặc 20H
- Lệnh trừ thanh ghi với giá trị: SUB DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU THUONG:$'
THONGBAO2 DB 13,10,'KY TU HOA LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập phím ENTER
- Phím ENTER có mã ASCII là 13D
- Ta tiến hành so sánh ký tự nhập vào với mã 13D Nếu bằng thì nhảy đến nhãn THOAT Nếu không thì lặp lại đoạn chương trình nhập ký tự
- Lệnh so sánh thanh ghi với giá trị: CMP THANH_GHI,GIA_TRI
- Lệnh nhảy nếu bằng: JE NHAN
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,13D ;SO SANH KY TU NHAP VOI VOI MA 13
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập đủ 10 ký tự
- Thanh ghi CX có chức năng đếm Sau mỗi vòng lặp giá trị của CX tự động giảm 1 đơn vị
- Muốn thực hiện bao nhiêu vòng lặp thì đặt giá trị tương ứng vào thanh ghi CX
- Kiểm tra CX=0 thì thoát chương trình
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP CX,0 ;KIEM TRA DU SO VONG LAP
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
Để thực hiện, bạn có thể làm theo các bước hướng dẫn đã nêu hoặc sử dụng câu lệnh so sánh kết hợp với câu lệnh lặp có điều kiện LOOPNZ, cho phép lặp lại cho đến khi CX bằng 0 hoặc ZF bằng 1.
(Lưu ý: thanh ghi cờ ZF=1 khi hiệu của phép trừ ký tự nhập vào với mã ASCII của phím
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP AL,13 ;SO SANH KY TU NHAP VAO VOI MA 13
LOOPNZ LAP ;LAP NEU CX BANG 0 HOAC ZF=1
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự số hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU SO” nếu ký tự nhập vào là ký tự số
+ In ra thông báo: “KHONG LA KY TU SO” nếu ký tự nhập vào không phải là ký tự số
- Giá trị số 0 đến 9 có mã ASCII tương ứng từ 48D đến 57D
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
+ JB NHAN: nhảy đến NHAN nếu nhỏ hơn
+ JA NHAN: nhảy đến NHAN nếu lớn hơn
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU SO!$'
THONGBAO3 DB 13,10,'KHONG LA KY TU SO!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,48D ;SO SANH KY TU VOI KY TU '0'
JB KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU NHO HON
CMP AL,57D ;SO SANH KY TU VOI KY TU '9'
JA KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU LON HON
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự CHỮ hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU HOA” nếu ký tự nhập vào là ký tự HOA
+ In ra thông báo: “LA KY TU THUONG” nếu ký tự nhập vào là ký tự THƯỜNG
+ In ra thông báo: “KHONG LA KY TU CHU” nếu ký tự nhập vào không phải là ký tự chữ
- Ký tự HOA có mã ASCII trong đoạn [65D, 90D], ký tự THƯỜNG có mã ASCII trong đoạn [97D, 122D]
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU HOA!$'
THONGBAO3 DB 13,10,'LA KY TU THUONG!$'
THONGBAO4 DB 13,10,'KHONG LA KY TU CHU!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,65D ;SO SANH VOI KY TU 'A'
JB KHONGLAKYTUCHU ;NEU NHO HON -> KHONG PHAI
CMP AL,122D ;SO SANH VOI KY TU 'z'
JA KHONGLAKYTUCHU ;NEU LON HON -> KHONG PHAI
CMP AL,90D ;SO SANH VOI KY TU 'Z'
JBE LAKYTUHOA ;NEU NHO HON HOAC BANG -> LA CHU HOA
CMP AL,97D ;SO SANH VOI KY TU 'a'
JAE LAKYTUTHUONG ;NEU LON HON HOAC BANG -> LA CHU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ Ngược lại, in ra tổng của hai số A, B
THONGBAO4 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,57D ;SO SANH TONG VOI SO '9'
;DI CHUYEN TONG VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ In ra thông báo: “TONG BANG 5” nếu tổng hai số bằng 5
+ In ra thông báo: “TONG NHO HON 5” nếu tổng hai số nhỏ hơn 5
+ In ra thông báo: “TONG LON HON 5” nếu tổng hai số lớn hơn 5
Hướng dẫn: Sử dụng các lệnh ADD, SUB, CMP và các lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP SO THU NHAT:$'
THONGBAO2 DB 13,10,'MOI NHAP SO THU HAI:$'
THONGBAO3 DB 13,10,'TONG LON HON 5!$'
THONGBAO5 DB 13,10,'TONG NHO HON 5!$'
THONGBAO6 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;HIEN THI THONGBAO2 NHAP SO THU 2
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
1 Chương trình nhập vào 1 ký tự, hiển thị mã ASCII của ký tự đó
2 Chương trình đếm số ký tự của một chuỗi nhập vào
3 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi thường, chuỗi hoa
4 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi đảo ngược
5 Chương trính tính tổng của 2 số bất kỳ
6 Chương trình nhập vào 1 toán tử và 2 toán hạng Tính kết quả.
BỘ ĐẾM – THANH GHI
BỘ ĐẾM
1 Tạo project mới đặt tên: BODEM4BIT
2 Bộ đếm được cấu tạo từ các flip-flop T (TFF), do đó để thiết kế một bộ đếm 4 bit ta sẽ dùng 4 flip-flop T ghép lại Lưu lại với tên: BODEM4BIT.bdf
3 Tạo tập tin mô phỏng: File New Vector Waveform File Cài đặt các giá trị tương ứng như hình bên dưới Lưu lại với tên: BODEM4BIT.vwf
Giải thích: Tại vị trí cạnh lên của xung clock (chuyển từ mức thấp lên mức cao), tăng giá trị của Q lên 1 đơn vị.
BỘ NHỚ RAM
Trình bày cách thiết kế và mô phỏng kết bộ nhớ RAM của máy tính.
LẬP TRÌNH HỢP NGỮ
LẬP TRÌNH CƠ BẢN
Cấu trúc thông thường của một chương trình hợp ngữ cho vi xử lý 8086/8088:
Trong cấu trúc chương trình trên các từ khóa MODEL, CODE, DATA, STACK, PROC, ENDP, END là các hướng dẫn biên dịch
Cấu trúc chương trình hợp ngữ bao gồm ba phần chính: đoạn CODE chứa toàn bộ mã lệnh, đoạn DATA chứa khai báo dữ liệu, và đoạn STACK là nơi lưu trữ ngăn xếp của chương trình khi được nạp vào bộ nhớ.
Thao tác đầu tiên của chương trình là trỏ thanh ghi đoạn DS về đầu đoạn DATA, hay còn gọi là khởi tạo thanh ghi đoạn DS:
Yêu cầu: Viết chương trình hợp ngữ cho vi xử lý (VXL) 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự từ bàn phím
- Hiển thị ký tự đã nhập ra màn hình
INT 21H là lệnh được sử dụng để gọi nhiều hàm trong DOS, với chức năng tương ứng được xác định dựa trên giá trị được đặt trong thanh ghi AH.
Trong bài này chúng ta sẽ quan tâm đến 3 chức năng sau đây:
01H Nhập 1 ký tự Ký tự sau khi nhập được chứa trong thanh ghi AL
02H Xuất 1 ký tự Ký tự trước khi xuất được đặt trong thanh ghi DL 09H Xuất một chuỗi ký tự Địa chỉ chuỗi được lưu trong thanh ghi DX
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU DA NHAP LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Hiển thị ký tự LIỀN TRƯỚC và LIỀN SAU của ký tự đã nhập
- Để hiển thị ký tự liền sau, ta tăng giá trị của thanh ghi chứa ký tự lên một đơn vị:
INC DL (DL đang chứa ký tự)
- Ngược lại, để hiển thị ký tự liền trước, ta giảm giá trị của thanh ghi đi một đơn vị:
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'KY TU LIEN TRUOC LA:$'
THONGBAO3 DB 13,10,'KY TU LIEN SAU LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;DI CHUYEN KY TU VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự HOA
- Hiển thị ký tự THƯỜNG tương ứng của ký tự đã nhập
- Để hiển thị ký tự thường, thực hiện phép cộng ký tự hoa với giá trị 32D hoặc 20H
- Lệnh cộng thanh ghi với giá trị: ADD DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU HOA:$'
THONGBAO2 DB 13,10,'KY TU THUONG LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
;CHUYEN TU KY TU HOA SANG KY TU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự THƯỜNG
- Hiển thị ký tự HOA tương ứng của ký tự đã nhập
- Để hiển thị ký tự hoa, thực hiện phép trừ ký tự thường với giá trị 32D hoặc 20H
- Lệnh trừ thanh ghi với giá trị: SUB DL,GIA_TRI
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU THUONG:$'
THONGBAO2 DB 13,10,'KY TU HOA LA:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
;DI CHUYEN KY TU VAO THANH GHI DL
LẬP TRÌNH NÂNG CAO
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập phím ENTER
- Phím ENTER có mã ASCII là 13D
- Ta tiến hành so sánh ký tự nhập vào với mã 13D Nếu bằng thì nhảy đến nhãn THOAT Nếu không thì lặp lại đoạn chương trình nhập ký tự
- Lệnh so sánh thanh ghi với giá trị: CMP THANH_GHI,GIA_TRI
- Lệnh nhảy nếu bằng: JE NHAN
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,13D ;SO SANH KY TU NHAP VOI VOI MA 13
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 chuỗi ký tự
- Thoát chương trình khi người dùng nhập đủ 10 ký tự
- Thanh ghi CX có chức năng đếm Sau mỗi vòng lặp giá trị của CX tự động giảm 1 đơn vị
- Muốn thực hiện bao nhiêu vòng lặp thì đặt giá trị tương ứng vào thanh ghi CX
- Kiểm tra CX=0 thì thoát chương trình
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP CX,0 ;KIEM TRA DU SO VONG LAP
JE THOAT ;NEU BANG THI NHAY DEN NHAN THOAT
LOOP LAP ;NEU KHONG BANG THI NHAY DEN NHAN LAP
Hướng dẫn sử dụng câu lệnh so sánh kết hợp với câu lệnh lặp có điều kiện LOOPNZ để thực hiện các bước, lặp lại cho đến khi CX=0 hoặc ZF=1.
(Lưu ý: thanh ghi cờ ZF=1 khi hiệu của phép trừ ký tự nhập vào với mã ASCII của phím
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
MOV CX,10 ;KHOI TAO SO VONG LAP
CMP AL,13 ;SO SANH KY TU NHAP VAO VOI MA 13
LOOPNZ LAP ;LAP NEU CX BANG 0 HOAC ZF=1
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự số hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU SO” nếu ký tự nhập vào là ký tự số
+ In ra thông báo: “KHONG LA KY TU SO” nếu ký tự nhập vào không phải là ký tự số
- Giá trị số 0 đến 9 có mã ASCII tương ứng từ 48D đến 57D
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
+ JB NHAN: nhảy đến NHAN nếu nhỏ hơn
+ JA NHAN: nhảy đến NHAN nếu lớn hơn
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU SO!$'
THONGBAO3 DB 13,10,'KHONG LA KY TU SO!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,48D ;SO SANH KY TU VOI KY TU '0'
JB KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU NHO HON
CMP AL,57D ;SO SANH KY TU VOI KY TU '9'
JA KHONGLASO ;NHAY DEN NHAN KHONGLASO NEU LON HON
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào 1 ký tự
- Kiểm tra ký tự có phải ký tự CHỮ hay không và in ra thông báo tương ứng:
+ In ra thông báo: “LA KY TU HOA” nếu ký tự nhập vào là ký tự HOA
+ In ra thông báo: “LA KY TU THUONG” nếu ký tự nhập vào là ký tự THƯỜNG
+ In ra thông báo: “KHONG LA KY TU CHU” nếu ký tự nhập vào không phải là ký tự chữ
- Ký tự HOA có mã ASCII trong đoạn [65D, 90D], ký tự THƯỜNG có mã ASCII trong đoạn [97D, 122D]
- Dùng các lệnh so sánh và lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP 1 KY TU:$'
THONGBAO2 DB 13,10,'LA KY TU HOA!$'
THONGBAO3 DB 13,10,'LA KY TU THUONG!$'
THONGBAO4 DB 13,10,'KHONG LA KY TU CHU!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,65D ;SO SANH VOI KY TU 'A'
JB KHONGLAKYTUCHU ;NEU NHO HON -> KHONG PHAI
CMP AL,122D ;SO SANH VOI KY TU 'z'
JA KHONGLAKYTUCHU ;NEU LON HON -> KHONG PHAI
CMP AL,90D ;SO SANH VOI KY TU 'Z'
JBE LAKYTUHOA ;NEU NHO HON HOAC BANG -> LA CHU HOA
CMP AL,97D ;SO SANH VOI KY TU 'a'
JAE LAKYTUTHUONG ;NEU LON HON HOAC BANG -> LA CHU THUONG
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ Ngược lại, in ra tổng của hai số A, B
THONGBAO4 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;KHOI TAO THANH GHI DS
CMP AL,57D ;SO SANH TONG VOI SO '9'
;DI CHUYEN TONG VAO THANH GHI DL
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
Yêu cầu: Viết chương trình cho VXL 8086/8088 thực hiện các chức năng sau:
- Cho phép người dùng nhập vào hai số nguyên dương A, B (A, B có 1 ký số)
- Tính tổng hai số và in ra thông báo tương ứng:
+ In ra thông báo: “KHONG THE THUC HIEN PHEP CONG” nếu tổng hai số lớn hơn hoặc bằng 10
+ In ra thông báo: “TONG BANG 5” nếu tổng hai số bằng 5
+ In ra thông báo: “TONG NHO HON 5” nếu tổng hai số nhỏ hơn 5
+ In ra thông báo: “TONG LON HON 5” nếu tổng hai số lớn hơn 5
Hướng dẫn: Sử dụng các lệnh ADD, SUB, CMP và các lệnh nhảy có điều kiện để giải quyết bài toán
MODEL SMALL ;KHAI BAO CHE DO BO NHO CUA CHUONG TRINH
STACK 100H ;KHAI BAO NGAN XEP
DATA ;KHAI BAO DU LIEU
THONGBAO1 DB 'MOI NHAP SO THU NHAT:$'
THONGBAO2 DB 13,10,'MOI NHAP SO THU HAI:$'
THONGBAO3 DB 13,10,'TONG LON HON 5!$'
THONGBAO5 DB 13,10,'TONG NHO HON 5!$'
THONGBAO6 DB 13,10,'KHONG THE THUC HIEN PHEP CONG!$'
CODE ;KHAI BAO CAC LENH XU LY
MAIN PROC ;BAT DAU HAM MAIN
;HIEN THI THONGBAO2 NHAP SO THU 2
;THOAT CHUONG TRINH, TRO VE DOS
MAIN ENDP ;KET THUC HAM MAIN
END MAIN ;KET THUC CHUONG TRINH
1 Chương trình nhập vào 1 ký tự, hiển thị mã ASCII của ký tự đó
2 Chương trình đếm số ký tự của một chuỗi nhập vào
3 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi thường, chuỗi hoa
4 Chương trình nhập vào 1 chuỗi ký tự, in ra chuỗi đảo ngược
5 Chương trính tính tổng của 2 số bất kỳ
6 Chương trình nhập vào 1 toán tử và 2 toán hạng Tính kết quả.