Giáo trình Lập trình Assembly 8086

MỤC LỤC

ASSEMBLER 86

    Thí dụ : một vị trí thuộc SEGMENT-B sẽ được tính offset theo cự ly từ đầu SEGMENT-A cho đến vị trí của nó trong toàn bộ đoạn mã chương trình được tạo ra .Khai báo về Segment sẽ lưu ý trình biên dịch về phạm vi của các segment cùng các phần tử thuộc về chúng.Theo đó trình biên dịch sẽ xác định đúng các offset tương ứng theo nguyên tắc : phần tử được xét thuộc segment nào sẽ được xác định cự ly theo điểm khởi đầu của segment ấy. Dữ liệu lưu chứa trong RAM có một số điểm khác với cách biểu diễn thông thường của chúng ta : những số biểu diễn bằng nhiều byte như loại word, double word được ghi nhớ trong RAM theo quy tắc byte thấp đứng trước, byte cao đứng sau.

    STACK - PROCEDURE - INTERRUPT

    Khái niệm về STACK

      Khi một thiết bị ngoại vi cần thông báo một đôi điều gì đó với CPU thông thường một interrupt sẽ được phát động.Chương trình đang được thực hiện bởi CPU sẽ tạm dừng lại, chỉ thị INT Int-no được thực hiện ngay tức khắc với Int-no là số hiệu của interrupt được phát động.Các interrupt được phát động theo kiểu này được gọi là các interrupt cứng. Để tránh trường hợp interrupt cứng bị lồng vào nhau ( một interrupt cứng được phát động trở lại trong khi đoạn chương trình của nó chưa kết thúc) Interrupt controller sẽ không cho phép phát động thêm bất cứ interrupt cứng nào khác sau khi một interrupt cứng được gọi.

      MỘT SỐ CẤU TRÚC VÀ GIẢI THUẬT CĂN BẢN

        Để kiểm tra CX có bằng 0 hay không, ta có thể dùng chỉ thị JCXZ <nhãn> .Đây là một lệnh chuyển điều khiển có điều kiện.Chuyển điều khiển được thực hiện nếu CX=0. Do đó các chương trình assembler thường cố gắng chuyển các tác vụ nhân chia thành những đoạn chương trình chỉ gồm các tác vụ cộng trừ và shift, rol.

        CÁC TÁC VỤ VỀ CHUỖI

        LODSB/LODSW

          Chú ý : Việc CX bị trừ 1 sau mỗi lần lặp khi sử dụng tiền tố REP không ảnh hưởng đến thanh ghi cờ hiệu như các tác vụ số học và logic. Tiền tố REPE (repeat while equal) : giống REP nhưng sẽ kết thúc quá trình lặp bất cứ khi nào phép so sánh có kết quả không bằng xảy ra. Tiền tố REPNE (repeat while not equal) : giống REP nhưng sẽ kết thúc quá trình lặp bất cứ khi nào phép so sánh có kết quả bằng xảy ra.

          Đối với PASCAL,chuỗi là một đoạn dữ liệu gồm nhiều byte liên tiếp nhau, và thường có ý nghĩa là một dãy các ký tự hơn là một dãy các byte.

          KEYBOARD

            Trường hợp phớm gừ vào là một phớm đặc biệt như cỏc phớm F1 đến F10 cỏc phớm mũi tờn (cursor key), các phím Home,End,PgUp,PgDn,Delete, Insert thì byte thấp sẽ bằng 0, byte cao chứa scan code. Cặp giá trị trên được interrupt 09h đặt vào một “hàng đợi” tại địa chỉ040:01Eh.Hàng đợi này là một buffer có kích thước 020h byte được đánh dấu bằng hai vị trí : đầu (KBD-head) và cuối (KBD-tail). Tóm lại bàn phím được khai thác theo nguyên lý : giá trị của các phím được gởi đến từ bàn phím được interrupt 09h ghi nhớ và sắp xếp theo thứ tự trước sau trong một buffer riêng,khi các chương trình ứng dụng “đọc bàn phím”, giá trị cũ nhất trong buffer sẽ được chuyển giao.

            Đọc một phím từ keyboard buffer,nếu chưa có phím trong keyboard buffer sẽ chờ cho đến khi có phớm gừ vào ( do interrupt 09h cập nhật ).Khi đọc sẽ “xúa” luụn mó phớm trong keyboard buffer ( Chỉ cập nhật KBD-head chứ không thay đổi thông tin trong keyboard buffer).

            Bảng B.8.2 : Scan code của các phím mở rộng trên bàn phím 101/102  ---------------------------------------------UÙ----------------------------
            Bảng B.8.2 : Scan code của các phím mở rộng trên bàn phím 101/102 ---------------------------------------------UÙ----------------------------

            CLOCK - TIMER - SOUND

            TIMER

              Dao động này được tạo ra bằng cách chia dao động gốc cho một giá trị thích hợp ( 12 trên PC/XT ). Để thiết lập trạng thái làm việc cho mỗi kênh ta cần phải gán giá trị cho SCR của mỗi bộ đếm cùng các tham số bằng cách gởi một byte điều khiển ra control port của 8253-5 để chỉ định kênh và mode làm việc,kế tiếp là các tham số ra data port tương ứng.

              Square Wave Rate generator

              Khi bộ đếm giảm đến 0, tớn hiệu ngừ ra sẽ chuyển sang mức thấp trong khoảng thời gian bằng 1 chu kỳ của tín hiệu xung vào,sau đó trở lại mức cao. Nếu SCR được nạp lại trong lúc bộ đếm đang hoạt động, giá trị này sẽ được nạp vào bộ đếm cho chu kyứ keỏ tieỏp.

              Hardware Triggered Strobe

              Thảo chương cho Chanel-2 Đọc SCR của Channel-2 vào CX

              Nếu cả hai bit thấp của port 061h đều bị xóa thành 0 thì mạch khuếch đại không làm việc : loa sẽ im. Nếu cả hai bit thấp của port 061h đều được dựng lên thì mạch khuếch đại sẽ làm việc : loa sẽ dao động với tớn hiệu của ngừ ra Channel-2. Để máy tính chơi được một đoạn nhạc, chúng ta cần phải tạo ra các note nhạc và duy trì chúng theo từng trường độ riêng.

              Như vậy, điều cần thiết là chúng ta xác định được tần số của từng note nhạc trong các cung bậc (octave) quen thuộc.

              VIDEO

                Theo nguyên lý nêu trên, để tạo ra bất cứ hình ảnh nào, chương trình của chúng ta phải mô tả từng điểm với đầy đủ các thuộc tính của chúng: màu sắc, dộ sáng. Thực sự,trong text mode video adapter đã chia màn hình thành nhiều ô hình chữ nhật bằng nhau.Số lượng các điểm trong một ô được xác định bằng tích số các điểm trên một hàng ngang với các điểm trên một hàng dọc.Tích số này gọi là kích cỡ của ký tự (character size). Con trỏ được tạo thành bằng cách cho tất cả các điểm trên một số dòng liên tiếp của một ô chữ nhật (tương ứng với một ký tự) thuộc tính foregound trong từng khoảng thời gian xen kẽ.

                ROM BIOS của các máy vi tính IBM PC cung cấp cho chúng ta một số chức năng tiện dụng để điều khiển display adapter như thay đổi mode, định vị trí con trỏ, in các ký tự.

                Bảng 1  Bảng 2
                Bảng 1 Bảng 2

                VIDEO CONTROLLER

                  Horizontal Sync : xung đồng bộ cho tín hiệu quét dòng của màn hình Vertical Sync : xung đồng bộ cho tín hiệu quét mành của màn hình Trong 1 giây có khoảng 50-70 (tùy loại màn hình) mành được thể hiện. Thí dụ : Tăng giá trị của start address lên 80 thì màn hình sẽ có vẻ như trôi lên một dòng, giảm giá trị của start address 80 thì màn hình có vẻ như trôi xuống một dòng. Hearcule Graphics Adapter cho phép thể hiện text mode hoàn toàn tương thích với MDA, đồng thời cung cấp khả năng hiển thị graphics trên màn hình monochrome.

                  Bit thứ 7 ( bit cao nhất ) của byte đầu dãy biểu diễn cho điểm sáng thứ nhất của dòng Bit thứ 6 của byte đầu dãy biểu diễn cho điểm sáng thứ hai của dòng.

                  CÁC KÊNH GIAO TIẾP CHUẨN

                  Asynchronous Adapter

                  Read interrupt identification register.When an interrupt occurs, read this register to find what caused it. Hai word cuối (tương ứng với COM3 và COM4) dành riờng cho cỏc cấu hỡnh khỏc của ngừ ra nối tiếp, người sử dụng phải tự xác định các giá trị cho hai word này. BIOS cung cấp cho người sử dụng cỏc phương tiện truy nhập đến cỏc ngừ ra nối tiếp một cỏch đơn giản và dễ dàng thông qua các chức năng của interrupt 14.

                  Thông tin được chuyển đến máy in theo 8 đường data song song,mỗi lần chuyển được 1 byte.

                  Parallel Printer Adapters

                  Dành riêng cho các máy in song song, còn được gọi là các printer port. Đặt tín hiệu Strobe lên mức cao báo hiệu các đường data đã sẵn sàng. Có tối đa 4 word tương ứng với 4 base port được BIOS liên hệ dưới tên gọi LPT1-LPT4.

                  BIOS cung cấp cho người sử dụng các phương tiện truy nhập đến các cổng máy in song song một cách đơn giản và dễ dàng thông qua các chức năng của interrupt 17.

                  DISK I/O

                    Trong khai thác thông tin trên đĩa, người ta thường khái quát hóa cấu trúc đĩa thành một vật thể ký tin với đơn vị lưu chứa cơ bản là các sector được đánh số liên tục từ 0. Theo ý niệm trên, ta có đối chiếu giữa các physical sector và relative sector như sau : (Giả sử đĩa có 975 cylinders, 5 heads, 17 sectors/track). Relative sector không phụ thuộc vào các thông số vật lý của đĩa, do đó cho phép tổ chức lưu giữ thông tin trên đĩa theo một số quy tắc tổng quát.

                    Khi computer được khởi động, sau quá trình POST (Power On Self Test), master boot được đọc vào địa chỉ 0:7C00 và quyền điều khiển được chuyển đến vị trí ấy.

                    TỔ CHỨC ĐĨA CỦA HỆ ĐIỀU HÀNH MSDOS

                    (một dấu chấm) mang thông tin về vị trí, ngày giờ tạo lập, cluster bắt đầu của chính thư mục con đó. (hai dấu chấm) mang thông tin về vị trí, ngày giờ tạo lập, cluster bắt đầu của thư mục chứa thư mục con đó. Về phương diện tính toán, relative sector bằng với logical sector cộng thêm vị trí bắt đầu của volume.

                    Logical sector bắt đầu của một cluster tính bằng công thức sau : root—sects = (RootSize * 32) / SecSize.

                    CÁC CHỨC NĂNG VỀ FILE VÀ THƯ MỤC CỦA HỆ ĐIỀU HÀNH DOS

                    • TỔ CHỨC BỘ NHỚ CỦA DOS

                      Khác với file dạng COM, các file dạng EXE có một cấu trúc đầu file (Exe header) dùng để lưu giữ các mô tả về cách sắp xếp, vị trí bắt đầu của chương trình. Thực hiện định vị lại các giá trị segment trong load module ( Xem thí dụ ) Gán các giá trị khởi đầu cho các thanh ghi. hoặc PUSH CS—value ; PUSH IP—value ; RETF ) Đặc điểm của file chương trình dạng Exe là : Kích thước file chương trình không có giới hạn Số segment trong chương trình không giới hạn. File chương trình và chương trình khi thực hiện không hoàn toàn giống nhau : quá trình load đã sửa đổi các giá trị segment trong chương trình cho phù hợp với vị trí được nạp.

                      08h DWORD địa chỉ của CLOCK$ device’s header hiện hành (device được load lên sau cùng có CLOCK bit được set) 0Ch DWORD địa chỉ của CON device’s header hiện hành (device được load lên sau cùng có STDIN bit được set) ---DOS 2.x---.