Về bản chất, BIOS là một nhóm lệnh được lưu trữ trênmột chip firmware nằm ở trên bo mạch chủ mainboard của máy vi tính.Theo đúng tên của mnh, BIOS có chức năng kiểm soát các tính năng c
NGHIÊN CỨU BIOS CHO MAINBOARD GIGABYTE
Các khái niệm
1.1.1 BIOS máy tính là gì?
BIOS là viết tắt của cụm từ "Basic Input/Output System" (hệ thống thông tin đầu vào/Đầu ra cơ bản") Về bản chất, BIOS là một nhóm lệnh được lưu trữ trên một chip firmware nằm ở trên bo mạch chủ (mainboard) của máy vi tính.
Theo đúng tên của mnh, BIOS có chức năng kiểm soát các tính năng căn bản của máy vi tính mà chúng ta ít khi trông tới: Kết nối và chạy trnh điều khiển (driver) cho các thiết bị ngoại vi (chuột, keyboard, usb…), đọc trật tự ổ cứng để khởi động các hệ điều hành, hiển thị tín hiệu lên màn hnh v.v… Khi máy vi tính được khởi động, nhiệm vụ của BIOS là "đánh thức" từng linh kiện và kiểm tra xem linh kiện này có hoạt động hay không Sau thời gian ấy, BIOS sẽ chuyển nhiệm vụ kiểm soát lại cho hệ điều hành.
Hình 1 BIOS máy tính 1.1.2 Mainboard Gigabyte là gì?
Mainboard Gigabyte hỗ trợ sử dụng được trên cả hai dòng chip AMD và Intel, và được đặt ở phân khúc cao cấp, hướng đến những người dùng sử dụng tác vụ cơ bản tới nâng cao.
Những mainboard Gigabyte thường được trang bị công nghệ Ultra Durable để nhằm mang tới sự ổn định, ép xung hiệu quả hơn,… khi chơi game, khung hnh được xử lý một cách nhanh chóng, gần như không bị khựng, lag
Sản phẩm có khả năng tính toán thông minh, hoạt động mượt mà với hệ thống quạt quản lý nhiệt cực kỳ hữu dụng, giúp bạn làm việc thời gian dài mà không bị quá nóng trong điều kiện môi trường khắc nghiệt
Trên các mainboard của GIGABYTE được trang bị 2 chip ROM BIOS (Main BIOS và Backup BIOS) hoạt động tương hỗ lẫn nhau so với 1 chip ROM trên bo mạch chủ của các hãng khác.Trong trường hợp nếu chip Main BIOS bị hỏng hoàn toàn, Backup BIOS sẽ được sử dụng như một Main BIOS cho hoạt động của Mainboard Như vậy, nếu hệ thống được nâng cấp lên các thiết bị mới hay để khắc phục lỗi tương thích giữa các thiết bị, người dùng có thể tự cập nhật BIOS cho mainboard của mnh một cách dễ dàng mà không sợ mainboard hỏng do quá trnh cập nhật BIOS.
Song song với công nghệ Dual BIOS, GIGABYTE cung cấp hai tiện ích giúp người dùng có thể dễ dàng cập nhật BIOS trong môi trường Window hoặc trong DOS và Qflash Bo mạch chủ được sử dụng là GIGABYTE GA-G41MT
/-D3 một trong những sản phẩm thuộc phân khúc thị trường phổ thông vừa có mặt tại trị trường Việt Nam G41MT-D3 tuy là mainboard phổ thông nhưng được trang bị khá nhiều công nghệ cao cấp của GIGABYTE như On/Off Charge,USB Power 3x
1.2 Các bước cập nhật BIOS.
Trước hết phải kiểm tra phiên bản BIOS hiện hành của mainboard làm theo cách sau: o Cách 1 : Khởi động máy, nhấn DEL vào BIOS rồi nhấn F9 sẽ hiển thị phiên bản BIOS của cả Main BIOS và Backup BIOS o Cách 2 : Sử dụng phần mềm CPU-Z (download tại đây) để kiểm tra
Chạy CPU-Z sau đó chọn tab Mainboard, phần BIOS sẽ hiển thị phiên bản BIOS hiện hành. o Cách 3 : Sau khi bật nguồn màn hnh BIOS hiện lên phiên bản BIOS sẽ là kí tự ngay cạnh tên mã sản phẩm
1.2.1 Cách up trong dos >> QFLASH
Qflash là tiện ích cung cấp khả năng cập nhật BIOS cho mainboard từ môi trường DOS và được tích hợp sẵn khi hệ thống được bật lên Trước khi tiến hành cập nhập BIOS cho mainboard cần tải bản BIOS muốn nâng cấp lên từ trang chủ của GIGABYTE (gigabyte.com) sau đó giải nén ra USB và cắm sẵn ÚSB vào máy hoă ~c bạn c•ng có thể bỏ trực tiếp vào ổ đ€a trên máy tính.
Bước 1 : Bật nguồn chờ màn hnh khởi động lên rồi nhấn END để kích hoạt Qflash o Bước 2 : sau khi nhấn END, Qflash được kích hoạt sau đó chọn
Update BIOS from Drive o Bước 3 : chọn đường dẫn tới nơi có chứa file BIOS đã được cắm sẵn trước đó (sub hoă ~c ổ cứng o Bước 4: Sau khi vào USB tm đến file BIOS trước đó đã được giải nén và lưu trong USB, thường có dạng *.BIN, nhấn Enter để chọn, thông báo hỏi bạn có chắc chắn muốn update không hiện ra, nhấn Enter để quá trnh update bắt đầu.
“Quá trình update sẽ tự động diễn ra cho đến khi thông báo “ Copy BIOS Completed – Pass ” hiện ra tức là bạn đã update BIOS thành công Sau đó khởi động lại hệ thống và sử dụng như bình thường.”
1.2.2 Update BIOS trực tiếp trên Windowns
C•ng là tiện ích update BIOS nhưng khác với Qflash, gigabyte cung cấp 1 phần mềm với tên gọi @bios có thể cài và up trực tiếp trên hê ~ diều hành
Link: @bios bạn tải phiên bản tương ứng với chipset mà bạn đang sử dụng
Giao diện chính của hiển thị các thông tin về bản BIOS hiện hành bên tay trái và 3 lựa chọn lưu, cập nhật BIOS nằm bên phía tay phải: a Update BIOS from GIGABYTE Server Đây là lựa chọn cho phép người dùng tự động update BIOS thông qua mạng Internet,sẽ tự động check bản BIOS mới nhất trên server của GIGABYTE rồi tải về và tiến hành cập nhật vào máy Sau khi click chọn lựa chọn này sẽ hiện ra bảng list các server để bạn liên kết update BIOS.
LẬP TRÌNH ASSEMBLY
Ngôn ngữ assembly
Ngôn ngữ assembly (còn gọi là hợp ngữ) là một ngôn ngữ bậc thấp được dùng trong việc viết các chương trnh máy tính Ngôn ngữ assembly sử dụng các từ có tính gợi nhớ, các từ viết tắt để giúp ta dễ ghi nhớ các chỉ thị phức tạp và làm cho việc lập trnh bằng assembly dễ dàng hơn Mục đích của việc dùng các từ gợi nhớ là nhằm thay thế việc lập trnh trực tiếp bằng ngôn ngữ máy được sử dụng trong các máy tính đầu tiên thường gặp nhiều lỗi và tốn thời gian.
Một chương trnh viết bằng ngôn ngữ assembly được dịch thành mã máy bằng một chương trnh tiện ích được gọi là assembler (Một chương trnh assembler khác với một trnh biên dịch ở chỗ nó chuyển đổi mỗi lệnh của chương trnh assembly thành một lệnh Các chương trnh viết bằng ngôn ngữ assembly liên quan rất chặt chẽ đến kiến trúc của máy tính Điều này khác với ngôn ngữ lập trnh bậc cao, ít phụ thuộc vào phần cứng.
Trước đây ngôn ngữ assembly được sử dụng khá nhiều nhưng ngày nay phạm vi sử dụng khá hẹp, chủ yếu trong việc thao tác trực tiếp với phần cứng hoặc hoặc làm các công việc không thường xuyên Ngôn ngữ này thường được dùng cho trnh điều khiển (tiếng Anh: driver), hệ nhúng bậc thấp (tiếng Anh: low-level embedded systems) và các hệ thời gian thực Những ứng dụng này có ưu điểm là tốc độ xử lí các lệnh assembly nhanh.
Không tự nhiên Assembly lại được nhận định là một trong những loại ngôn ngữ quan trọng hàng đầu khi lập trnh trên máy tính Vậy, những lợi ích của ngôn ngữ Assembly là g, cùng tm hiểu ngay một số thông tin bên dưới: o Tăng hiệu suất lập trình
Như đã nói ở trên, cách thức hoạt động chính của Assembly là dịch tự động các ngôn ngữ cấp cao về ngôn ngữ mà máy tính có thể hiểu được Do đó, nếu thông thạo ngôn ngữ Assembly, hiệu suất làm việc của bạn chắc chắn sẽ tăng lên rõ rệt Thay v phải dịch một cách thủ công, bạn có thể sử dụng ngôn ngữ Assembly như một hệ thống “translate” tự động, hiệu quả và chính xác. o Hiển thị nhanh và đầy đủ
Ngôn ngữ Assembly cung cấp cho người dùng khả năng quan sát toàn bộ màn hnh thông qua lệnh View Ngh€a là, bạn chỉ cần duy nhất một màn hnh máy tính để có thể thực hiện toàn bộ các lệnh với tốc độ xử lý và hiển thị vô cùng linh hoạt Đây là một trong những chức năng tối ưu nhất đối với các coder, đặc biệt là những ai đang sử dụng các dòng máy trạm. o Sử dụng với vai trò đặc quyền
Nếu bạn thắc mắc lợi ích hàng đầu của ngôn ngữ Assembly là g th có lẽ đó chính là cung cấp cho người sử dụng toàn bộ các đặc quyền sẵn có Với nhiều ngôn ngữ cấp cao khác, bạn sẽ bị hạn chế ở một số chức năng hay tập lệnh, nhưng với Assembly th không Người dùng có thể sử dụng tất cả các câu lệnh và chức năng, ngoài ra còn có thể thực hiện cài đặt một số thay đổi theo ý muốn. o Dễ dàng tương tác và sửa đổi
Từ việc sở hữu tất cả những đặc quyền phía trên, ngôn ngữ Assembly cho phép người dùng tương tác trực tiếp với các tập lệnh Bạn có thể dễ dàng theo dõi sự hiển thị các lệnh trên màn hnh nhờ chế độ View, hoặc thực hiện bất cứ thay đổi nào nếu phát hiện những sai sót.
2.1.3 Tính ứng dụng của ngôn ngữ Assembly o Sử dụng trong xử lý các vi mạch
Assembly là một loại ngôn ngữ khá gần g•i, không quá trừu tượng, và c•ng là loại ngôn ngữ gần với máy tính nhất Do đó, nó có thể được sử dụng để tối ưu hóa việc lập trnh trên các vi mạch điện tử Với những ưu điểm như chính xác, nhanh chóng và tốc độ đọc hiểu nhanh, ngôn ngữ Assembly giúp người dùng dễ dàng tiếp cận các chi tiết nhỏ o Sử dụng trong biên dịch mã nguồn Ứng dụng lớn nhất của ngôn ngữ Assembly là g? Chắc chắn là trong việc biên dịch các mã nguồn từ ngôn ngữ cấp cao về đến ngôn ngữ mà máy tính có thể hiểu được Trong trường hợp này, Assembly có thể được coi như một hệ thống dịch tự động, với khả năng biên dịch vô cùng nhanh chóng và chính xác, tốc độ tăng lên gấp nhiều lần so với dịch thủ công o Sử dụng trong kỹ thuật đảo ngược
Kỹ thuật đảo ngược là một kỹ thuật thường được sử dụng khi tiếp cận với máy tính Assembly là loại ngôn ngữ lập trnh gần với ngôn ngữ máy nhất Do đó, để thực hiện được kỹ thuật này th cần sự hiểu biết nhất định về Assembly. o Sử dụng để truy tìm mã nguồn độc hại
Assembly thể hiện ưu thế của mnh trong việc tm kiếm các mã nguồn độc hại, c•ng như ngăn chặn sự xâm nhập của virus, hacker vào hệ thống máy tính tổng Đồng thời, để lập ra hệ thống tường lửa, bảo vệ máy th c•ng cần đến ngôn ngữ Assembly.
2.1.4 Ưu nhược điểm ngôn ngữ Assembly
*Ưu điểm: o Tốc độ xử lý nhanh và mạnh mẽ, giúp tăng năng suất và hiệu quả lập trnh Chương trnh Assembly có dung lượng nhỏ, do đó sẽ phù hợp với hầu hết các bộ nhớ tiêu chuẩn hiện nay. o Chỉ cần sử dụng đến các tài nguyên cần thiết, hạn chế tối đa sử dụng các tài nguyên rác dẫn đến nặng máy. o Phù hợp trong việc xử lý các vi mạch điện tử, đồng thời giúp kiểm soát phần cứng của máy tính tốt hơn. o Nhanh chóng sửa chữa các lỗ hồng của chương trnh, đồng thời thể hiện ưu thế vượt trội trong việc tm ra các mã nguồn độc hại. o Có thể biên dịch tự động mà không bị ảnh hưởng bởi sự biên dịch từ bên ngoài như dịch thủ công. o Dễ dàng truy cập được vào bộ nhớ của phần cứng để điều khiển hoặc thực hiện một số tác vụ nhất định.
*Nhược điểm: o Thuật toán của Assembly hiện nay vẫn còn một số hạn chế, đòi hỏi lập trnh viên phải có nhiều kiến thức về vi xử lý và mạch điện tử. o Assembly là ngôn ngữ gần nhất với máy tính, do đó c•ng sẽ khó lập trnh hơn, đồng thời tiêu tốn nhiều công sức và thời gian trong việc duy tr mã. o So với các ngôn ngữ lập trnh cấp cao th Assembly được nhận định là khó học và tốn nhiều thời gian khi lập trnh. o Để đảm bảo tính chính xác cao, Assembly c•ng yêu cầu sự khác biệt trong từng bộ vi xử lý Ngh€a là, bạn không thể sử dụng một chương trnh duy nhất để xử lý nhiều vi mạch khác nhau, mà mỗi vi xử lý sẽ cần phải có một chương trnh riêng biệt.
HỢP NGỮ
Hợp ngữ (Assembler) là chương trnh dịch ra mã máy một chương trnh gốc viết bằng từ gợi nhớ (mnemonic) của các lệnh mã máy Lúc đầu, các chương trnh hợp ngữ chỉ làm việc đơn thuần từ những từ gợi nhớ sang mã máy, nhưng dần dần các chương trnh hợp ngữ cho phép dùng các nhãn, các ký hiệu biến đổi dạng lệnh, phân phối bộ nhớ, viết các macro nhằm giúp cho người lập trnh viết các chương trnh hợp ngữ dễ dàng hơn Sau đây, chúng ta sẽ đề cập đến các đặc tính tổng quát của hợp ngữ trước khi nghiên cứu hợp ngữ MASM dùng cho mã máy
2.2.1 Đặc tính tổng quát của hợp ngữ
2.2.1.1 Cấu trúc tổng quát của một lệnh hợp ngữ
Một lệnh của hợp ngữ thường có các vùng sau:
Tên Từ gợi nhớ mã lệnh Toán hạng Chú thích
Bảng 1 Cấu trúc tổng quát của một lệnh hợp ngữ
BATDAU: MOV DX, 3F8H ;3F8H là cổng vào ra nối tiếp. Các vùng được sắp xếp trên một hàng lệnh và phân cách nhau bằng dấu chấm (:) hoặc dấu phẩy (,) hoặc chấm phẩy (;)… tuỳ theo lệnh của hợp ngữ a Cấu trúc tổng quát vùng tên (name)
Vùng tên cho phép gán tên cho một địa chỉ hay một dữ liệu, lúc đó ta có thể dùng tên này để thay thế cho địa chỉ hay dữ liệu trên Mỗi tên chỉ xuất hiện một lần trong chương trnh. b Cấu trúc tổng quát từ gợi nhớ mã lệnh Đây là vùng duy nhất không thể thiếu của hàng lệnh Vùng này có thể chứa một từ gợi nhớ mã lệnh hoặc một lệnh giả.
Khi gặp một từ gợi nhớ mã lệnh, hợp ngữ sẽ dịch nó sang mã máy
Khi gặp một lệnh giả (còn gọi là hướng dẫn: directives) th hợp ngữ không dịch thành mã nhị phân v các lệnh giả chỉ giúp cho hợp ngữ định ngh€a ký hiệu, phân phối bộ nhớ, tạo bảng dữ liệu… Thông thường, các chương trnh hợp ngữ thường có các lệnh giả chủ yếu sau:
- ORG (origin: điểm gốc): Cho biết điểm bắt đầu của một đoạn chương trnh hay một đoạn dữ liệu nào đó.
- EQU (equate: bằng nhau) hay DEFINE (define: định ngh€a): Cho phép đặt tên một dữ liệu nào đó
- DS (define storage: định ngh€a vùng lưu trữ số liệu) hay RM (reserve memory: để dành vùng ô nhớ): Cho phép để dành vùng ô nhớ, để lưu trữ số liệu Các lệnh giả DATA, DB (define byte), DW (define word) c•ng cho phép để dành vùng ô nhớ
- END : Cho biết chấm dứt chương trnh. c Cấu trúc tổng quát vùng toán hạng
Chứa các toán hạng mà lệnh mã máy cần d Cấu trúc tổng quát vùng chú thích
Có thể có hoặc không, vùng này để dành cho người lập trnh ghi các ghi chú, giải thích về câu lệnh.
1.2 Cấu trúc tổng quát của Macro
Macro là một nhóm lệnh nào đó được dùng nhiều lần nên ta gán cho nó một tên Nhiều chương trnh hợp ngữ cho phép dùng Macro. Đối với Macro, mỗi lần chương trnh chính gọi nó th đoạn mã lệnh trong Macro được xen vào ngay mã lệnh gọi, không cần dùng lệnh CALL hay JUMP nên chương trnh chính thực hiện nhanh hơn
Tuy nhiên, mỗi lần gọi Macro th mã lệnh trong Macro được xen vào trong chương trnh chính làm cho chương trnh ngày càng dài và chiếm nhiều ô nhớ trong bộ nhớ trong
2.2.1.2 Cấu trúc tổng quát của chương trình con
Hợp ngữ thường cho phép dịch các chương trnh con Nó sẽ đánh dấu tham khảo chương trnh con trong chương trnh chính và chính chương trnh liên kết (linker) sẽ gán địa chỉ của các chương trnh con
Một số loại hợp ngữ còn cho phép tạo một thư viện chương trnh con Muốn gọi chương trnh con th chương trnh chính phải dùng lênh CALL hay JUMP, do đó phải lưu địa chỉ trở về của chương trnh chính ở ngăn xếp và làm chậm đi việc thực hiện chương trnh chính
Chương trnh con chỉ chiếm một lượng ô nhớ nhất định Khi chương trnh chính chính gọi nó th chương trnh chính phải lưu địa chỉ trở về, sau đó nhảy đến địa chỉ của chương trnh con và thực thi chương trnh con, khi thực hiện xong th lấy địa chỉ trở về để tiếp tục thực hiện chương trnh chính.
2.2.1.3 Cấu trúc tổng quát của biến toàn cục (global), biến địa phương (local)
Các biến định ngh€a trong chương trnh chính gọi là biến toàn cục Các biến này có thể dùng trong chương trnh chính, trong macro và trong các chương trnh con
Các biến được định ngh€a trong macro hay trong chương trnh con gọi là các biến địa phương, chỉ được dùng trong nội bộ macro hay chương trnh con khai báo nó
2.2.1.4 Cấu trúc tổng quát của các bảng, thông báo mà hợp ngữ cung cấp cho người sử dụng Đa số các hợp ngữ có thể cung cấp các bảng và thông báo cho người sử dụng các nội dung sau: o Bảng liệt kê chương trnh hợp ngữ và mã máy tương ứng o Bảng liệt kê các lỗi trong chương trnh gốc o Bảng các tên được dùng trong chương trnh gốc o Danh sách các tham khảo bên ngoài (các chương trnh con, các biến dùng ở ngoài) o Danh sách các macro, chương trnh con và độ dài của chúng.
2.2.1.5 Cấu trúc tổng quát của hợp ngữ chéo (cross assembler)
Một hợp ngữ chạy trên một máy nào đó để dịch ra mã máy cho CPU khác với CPU trên máy mà hợp ngữ đó đang chạy, th gọi là hợp ngữ chéo
Ví dụ, hiện nay rất khó tm 1 máy tính dùng CPU Z80 Muốn dịch một chương trnh hợp ngữ thành mã máy của CPU Z80, người ta phải dùng chương trnh hợp ngữ chéo chạy trên các máy IBM chẳn hạn để biên dịch ra mã máy cho CPU Z80 (d€ nhiên chương trnh mã máy sau khi dịch phải chạy trên máy tính hoặc vi mạch do CPU Z80 điều khiển)
2.2.2 Hợp ngữ MASM – Dùng cho CPU 8086
2.2.2.1 Giới thiệu hợp ngữ MASM
Bài tập ứng dụng
Yêu cầu: Viết chương trnh thiết lập 1 màn hnh giới thiệu (mode 40*25), màn hnh các chức năng và màn hnh từng chức năng (mode 80*25) thực hiện 4 chức năng:
1……Hiện một số nguyên ra dạng binary
2……Tính giai thừa của 1 số nguyên từ 0 đến 9
3……Máy tính có kRAM nào trên mainboard không ?
4……Trở về màn hnh giới thiệu Để giải quyết bài tập với yêu cầu trên ta sử dụng MARCO, các chương trnh con, các mô-đin liên kết, các biến nhơ,…
2.3.2 Mô tả phần thiết kế
Chương trnh khi chạy gồm:
*Màn hnh giới thiệu: gồm 3 xâu
+ Xâu 1: Chữ trắng, kết thúc bằng “$”
“Truong Dai Hoc Viet Han
Khoa khoa hoc may tinh
+ Xâu 2: Chữ trắng, kết thúc bằng “$”
An phim bat ky de tiep tuc
Con an ESC de thoat chuong trinh$”
Chỉ chứ 1 xâu: Chữ màu trắng, kết thúc bằng “$” Hien so nguyen dang BINARY
Tinh giai thua mot so nguyen tu 0 den 9 Kiem tra co bao nhieu kRAM tren Mainboard -* - 1.Hien mot so nguyen ra dang BINARY 2.Tinh giai thua
3.Kiem tra co bao nhieu kRAM tren Mainboard 4.Tro ve man hinh gioi thieu
Dùng cmp để vào các chức năng
Dùng HienString để hiện chương trnh con Lập trnh các mô – đun include "Lib1.asm" include "Lib2.asm"
GT1 db 13,10,'Truong Dai Hoc Viet-Han' db 13,10,'Khoa khoa hoc may tinh' db 13,10,' -o0o -$'
GT3 db 13,10,13,10,13,10,' sinh vien thuc hien:' db 13,10,'1 Nguyen Thi Ngoc' db 13,10,' -' db 13,10,'An phim bat ki de tiep tuc' db 10,13,'An ESC de thoat chuong trinh$' mode_cu db ?
;Khai bao bien cho man hin chuc nang cn db 13,10,'Hien so nguyen dang binary' db 13,10,'Tinh giai thua' db 13,10,'Kiem tra co bao nhieu kRAM tren Mainboard' db 13,10,' -** -' db 13,10,'1.Hien mot so nguyen ra dang BINARY' db 13,10,'2.Tinh giai thua cua mot so nguyen tu 0 den 9' db 13,10,'3.Kiem tra co bao nhieu kRAM tren Mainboard' db 13,10,'4.Tro ve man hinh gioi thieu' db 13,10,13,10,'HAY CHON: $'
;Khai bao bien cho chuc nang binary hb1 db 13,10,'Chuc nang hien dang binary' db 13,10,' -' db 13,10,13,10,'Vao so nguyen: $' hb2 db 13,10,13,10,'Dang binary la: $' x dw ? y dw ?
;Khai bao bien tinh giai thua str1 db 'Moi nhap x: $' str2 db 'x! = $'
Er db 'Sai dinh dang so!$'
;Khai bao bien cho chuc nang May tinh co bao nhieu kRAM kR1 db 13,10,'May tinh co kRAM tren Mainboard khong ?' db 13,10,' -' db 13,10,'So luong kRAM co them tren Mainboard la:$' kR2 db '0 k$' kR3 db '16 k$' kR4 db '32 k$' kR5 db '64 k$' kR6 db 13,10, 'An phim bat ki de ve man hinh chinh$' code
HienString macro xau push ax push dx mov dx, offset xau mov ah,9 int 21h pop dx pop ax endm mov ax,@data mov ds,ax mov ah,0fh int 10h mov mode_cu,al mov al,0 mov ah,0 int 10h
HienString GT3 mov ah,1 int 21h cmp al,27 jne continue mov al,mode_cu mov ah,0 int 10h mov ah,4ch int 21h continue: mov al,mode_cu mov ah,0 int 10h
HienString cn mov ah,1 int 21h cmp al,'1' jne Test_2 call HIENBNR jmp continue
Test_2: cmp al,'2' jne Test_3 call GT jmp continue
Test_3: cmp al,'3' jne Test_4 call KRAM jmp continue
Test_4: cmp al,'4' jne Test_5 call PS
;Chuong trinh con hien 1 so ra dang binary HIENBNR proc mov ax, @data mov ds, ax mov ah, 9 lea dx, hb1 int 21h call VAO_SO_N mov ah, 9 lea dx, hb2 int 21h call HIEN_THI mov ah,1 int 21h cmp al,'c' ret
VAO_SO_N proc mov x,0 mov y,0 mov bx,10 mov ax,10 nhap: mov ah,1 int 21h cmp al,13 je thoat_1 ; neu al la phim enter thi thoat (nhap xong) sub al,30h xor ah,ah ; xoa thanh ghi ah de chuyen ax vao y mov y,ax mov ax,x mul bx add ax, y mov x, ax jmp nhap thoat_1: ret
HIEN_THI proc mov bx,2 mov ax,x mov cx,0 chia: mov dx,0 div bx inc cx push dx ; chuyen phan du (dx) vao ngan xep cmp al,0 je print jmp chia print: pop dx ; gan dinh cua ngan xep = dx add dl, 30h ; ep kieu ve ascii mov ah, 2 ; in ra 1 ky tu (dl) int 21h dec cx cmp cx, 0 jne print ret
;Chuong trinh con tinh giai thua so nguyen tu 0 den 9
GT proc mov ax, @data mov ds, ax call endline lea dx, str1 call printString call nhap_x call endline lea dx, str2 call printString call calculate call printNumber mov ah,1 int 21h cmp al,'c'
GT endp nhap_x proc push bx push dx xor bx, bx tieptuc: mov ah,1 int 21h cmp al,13 je thoat_2 cmp al,'0' jb error cmp al,'9' ja error and ax, 000fh push ax mov ax, 10 mul bl mov bx, ax pop ax add bx, ax jmp tieptuc error: call endline mov ah, 9 lea dx, Er int 21h thoat_2: mov ax, bx pop dx pop bx ret nhap_x endp calculate proc push cx push dx xor dx, dx mov cx, ax mov ax, 1 tinhtiep: mul cx loop tinhtiep pop dx pop cx ret calculate endp endline proc push ax push dx mov ah, 9 lea dx, CRLF int 21h pop dx pop ax ret endline endp printNumber proc push bx push cx push dx mov bx, 10 mov cx, 0 xor dx, dx xuly: div bx inc cx push dx xor dx, dx cmp ax, 0 jz inra jmp xuly inra: mov ah,2 pop dx add dx, '0' int 21h loop inra pop dx pop cx pop bx ret printNumber endp printString proc push ax mov ah, 9 int 21h pop ax ret printString endp
;Dem so kRAM tren Mainboard
HienString kR1 int 11h and al,0ch shr al,1 shr al,1 jnz L_kRAM2
HienString kR2 jmp Exit_kRAM
L_kRAM2: cmp al,1 jne L_kRAM3
HienString kR3 jmp Exit_kRAM
L_kRAM3: cmp al,2 jne L_kRAM4
HienString kR4 jmp Exit_kRAM
HienString kR6 mov ah,1 int 21h pop ax ret
2.3.3.1 Màn hình giới thiệu Ở màn hnh giới thiệu được đặt mode 40*25, và bao gồm 3 xâu kí tự Các xâu được kết thúc bằng “$” và sử dụng MACRO ‘Hienstring” để hiện xâu kí tự ra màn hnh.
Sau đó, màn hnh dừng để chờ 1 kí tự được nhập vào từ bàn phím
Hình 3 Màn hình giới thiệu
Sau khi nhập 1 kí tự bất k từ bàn phím khác ESC (nếu nhấn ESC th thoát ra màn hnh Emulator Screen ) th màn hnh 40*25 trở thành màn hnh 80*25 và hiển thị các chức năng.
Màn hnh chức năng chỉ có một xâu kết thúc băng “$”, sử dụng lệnh MẢCO
‘HienString” để hiện xâu đó ra màn hnh.
Sau đó chờ một khí tự được nhập từ bàn phím, sử dụng lệnh “cmp” để so sánh phím nhập vào với các số 1,2,3,4 và theo thứ tự đó để nhảy đến các chương trnh con tương ứng.
Hình 4 Màn hình chức năng
2.3.3.3 MH thực hiện chức năng hiện 1 số ra dạng binary 16 bit
Nếu phím nhập vào bằng một th gọi chương trnh con “HIENBNR” để thực hiện. Ở chương trnh con “HIENBNR” ta thực hiện nhập một số nguyên bất k thông qua chương trnh con “VAO_SO_N” và MẢCO “HienString” để hiện kết quả in ra màn hnh.
Hình 5 Chức năng hiện một số ra dạng Binary
2.3.3.4 MH thực hiện chức năng tính giai thừa một số nguyên (từ 0 đến 9)
Khi cmp al bằng số 2 th chương trnh con “GT” được gọi để thực hiện Ban đầu sử dụng chương trnh con “nhap_x” để nhập giá trị của x
“printNumber” để hiện ra kết quả
Hình 6 Chức năng tính giai thừa một số nguyên ( từ 0 đến 9)
2.3.3.5 MH thực hiện chức năng máy tính có kRAM trên Mainboard không?
Nếu cmp al bằng 3 th chương trnh con”kRAM” được gọi để thực hiện Bit thứ ba và thứ tự của byte có địa chỉ 40h:10h của vùng nhớ biến BIOS cho biết số lượng kRAM trên mainboard máy tính chúng ta đang dùng Để biết được số lượng