1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly

43 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Về BIOS Cho Mainboard Gigabyte Và Lập Trình Assembly
Tác giả Nguyễn Thị Ngọc, Nguyễn Quang Thuận, Nguyễn Thị Bích Loan, Nguyễn Thị Bích Thùy, Phan Văn Tiến
Người hướng dẫn TS. Dương Hữu Ái
Trường học Trường Đại Học Công Nghệ Thông Tin Và Truyền Thông Việt – Hàn
Chuyên ngành Kiến Trúc Máy Tính
Thể loại Báo cáo môn học
Năm xuất bản 2023
Thành phố Đà Nẵng
Định dạng
Số trang 43
Dung lượng 3,58 MB

Cấu trúc

  • CHƯƠNG 1. NGHIÊN CỨU BIOS CHO MAINBOARD GIGABYTE (0)
    • 1.1. Các khái niệm (7)
      • 1.1.1. BIOS máy tính là gì? (7)
      • 1.1.2. Mainboard Gigabyte là gì? (7)
      • 1.2.1. Cách up trong dos >> QFLASH (9)
      • 1.2.2. Update BIOS trực tiếp trên Windowns (10)
  • CHƯƠNG II: LẬP TRÌNH ASSEMBLY (11)
    • 2.1. Ngôn ngữ assembly (11)
      • 2.1.1. Tổng quan (12)
      • 2.1.2. Lợi ích (12)
      • 2.1.3. Tính ứng dụng của ngôn ngữ Assembly (13)
      • 2.1.4. Ưu nhược điểm ngôn ngữ Assembly (14)
    • 2.2. HỢP NGỮ (15)
      • 2.2.1. Đặc tính tổng quát của hợp ngữ (15)
        • 2.2.1.1. Cấu trúc tổng quát của một lệnh hợp ngữ (15)
        • 2.2.1.2. Cấu trúc tổng quát của chương trình con (17)
        • 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). .11 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 (17)
        • 2.2.1.5. Cấu trúc tổng quát của hợp ngữ chéo (cross assembler) (18)
      • 2.2.2. Hợp ngữ MASM – Dùng cho CPU 8086 (18)
        • 2.2.2.1. Giới thiệu hợp ngữ MASM (18)
        • 2.2.2.2. Cấu trúc của một hàng lệnh hợp ngữ MASM (18)
        • 2.2.2.3. Tên trong hợp ngữ MASM (19)
        • 2.2.2.4. Từ gợi nhớ mã lệnh (19)
    • 2.3. Bài tập ứng dụng (27)
      • 2.3.1. Mô tả (27)
      • 2.3.2. Mô tả phần thiết kế (27)
      • 2.3.3. Kết quả chạy (40)
        • 2.3.3.1. Màn hình giới thiệu (40)
        • 2.3.3.2. Màn hình chức năng (41)
        • 2.3.3.3. MH thực hiện chức năng hiện 1 số ra dạng binary 16 bit (42)
        • 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) (42)
        • 2.3.3.5. MH thực hiện chức năng máy tính có kRAM trên Mainboard không? (42)

Nội dung

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 mnh, 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 mnh, 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 trnh đ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 hnh 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 hnh đượ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 mnh một cách dễ dàng mà không sợ mainboard hỏng do quá trnh 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 hnh 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 hnh 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 tm đế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á trnh 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 trnh 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 trnh 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 trnh 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 trnh viết bằng ngôn ngữ assembly được dịch thành mã máy bằng một chương trnh tiện ích được gọi là assembler (Một chương trnh assembler khác với một trnh biên dịch ở chỗ nó chuyển đổi mỗi lệnh của chương trnh assembly thành một lệnh Các chương trnh 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 trnh 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 trnh đ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 trnh trên máy tính Vậy, những lợi ích của ngôn ngữ Assembly là g, cùng tm 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 hnh thông qua lệnh View Ngh€a là, bạn chỉ cần duy nhất một màn hnh 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 hnh 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 trnh 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 trnh 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 mnh trong việc tm 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 trnh Chương trnh 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 trnh, đồng thời thể hiện ưu thế vượt trội trong việc tm 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 trnh 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 trnh 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 trnh cấp cao th Assembly được nhận định là khó học và tốn nhiều thời gian khi lập trnh. 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 trnh 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 trnh riêng biệt.

HỢP NGỮ

Hợp ngữ (Assembler) là chương trnh dịch ra mã máy một chương trnh 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 trnh 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 trnh 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 trnh viết các chương trnh 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 trnh. 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 trnh 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 trnh 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 trnh. 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 trnh 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 trnh hợp ngữ cho phép dùng Macro. Đối với Macro, mỗi lần chương trnh 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 trnh 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 trnh chính làm cho chương trnh 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 trnh con Nó sẽ đánh dấu tham khảo chương trnh con trong chương trnh chính và chính chương trnh liên kết (linker) sẽ gán địa chỉ của các chương trnh con

Một số loại hợp ngữ còn cho phép tạo một thư viện chương trnh con Muốn gọi chương trnh con th chương trnh chính phải dùng lênh CALL hay JUMP, do đó phải lưu địa chỉ trở về của chương trnh chính ở ngăn xếp và làm chậm đi việc thực hiện chương trnh chính

Chương trnh con chỉ chiếm một lượng ô nhớ nhất định Khi chương trnh chính chính gọi nó th chương trnh chính phải lưu địa chỉ trở về, sau đó nhảy đến địa chỉ của chương trnh con và thực thi chương trnh con, khi thực hiện xong th lấy địa chỉ trở về để tiếp tục thực hiện chương trnh 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 trnh chính gọi là biến toàn cục Các biến này có thể dùng trong chương trnh chính, trong macro và trong các chương trnh con

Các biến được định ngh€a trong macro hay trong chương trnh con gọi là các biến địa phương, chỉ được dùng trong nội bộ macro hay chương trnh 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 trnh hợp ngữ và mã máy tương ứng o Bảng liệt kê các lỗi trong chương trnh gốc o Bảng các tên được dùng trong chương trnh gốc o Danh sách các tham khảo bên ngoài (các chương trnh con, các biến dùng ở ngoài) o Danh sách các macro, chương trnh 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ó tm 1 máy tính dùng CPU Z80 Muốn dịch một chương trnh hợp ngữ thành mã máy của CPU Z80, người ta phải dùng chương trnh 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 trnh 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 trnh thiết lập 1 màn hnh giới thiệu (mode 40*25), màn hnh các chức năng và màn hnh 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 hnh 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 trnh 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 trnh khi chạy gồm:

*Màn hnh 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 trnh con Lập trnh 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 hnh 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 hnh.

Sau đó, màn hnh 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 hnh Emulator Screen ) th màn hnh 40*25 trở thành màn hnh 80*25 và hiển thị các chức năng.

Màn hnh 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 hnh.

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 trnh 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 trnh con “HIENBNR” để thực hiện. Ở chương trnh con “HIENBNR” ta thực hiện nhập một số nguyên bất k thông qua chương trnh con “VAO_SO_N” và MẢCO “HienString” để hiện kết quả in ra màn hnh.

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 trnh con “GT” được gọi để thực hiện Ban đầu sử dụng chương trnh 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 trnh 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

Ngày đăng: 17/10/2024, 15:58

HÌNH ẢNH LIÊN QUAN

Hình 1. BIOS máy tính 1.1.2. Mainboard Gigabyte là gì? - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 1. BIOS máy tính 1.1.2. Mainboard Gigabyte là gì? (Trang 7)
Hình 2. Mainboard Gigabyte - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 2. Mainboard Gigabyte (Trang 9)
Hình 3. Màn hình giới thiệu - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 3. Màn hình giới thiệu (Trang 41)
Hình 4. Màn hình chức năng - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 4. Màn hình chức năng (Trang 41)
Hình 5. Chức năng hiện một số ra dạng Binary - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 5. Chức năng hiện một số ra dạng Binary (Trang 42)
Hình 6. Chức năng tính giai thừa một số nguyên ( từ 0 đến 9) - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 6. Chức năng tính giai thừa một số nguyên ( từ 0 đến 9) (Trang 42)
Hình 7. Chức năng kiểm tra có bao nhiêu kRAM trên Mainboard - Báo cáo môn học kiến trúc máy tính nghiên cứu về bios cho mainboard gigabyte và lập trình assembly
Hình 7. Chức năng kiểm tra có bao nhiêu kRAM trên Mainboard (Trang 43)
w