[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 1 ppsx

11 604 2
[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 1 ppsx

Đ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

Đề cương giảng HP NGỮ Chương : CƠ BẢN VỀ HP NGỮ Trong chương giới thiệu nguyên tắc chung để tạo , dịch chạy chương trình hợp ngữ máy tính Cấu trúc ngữ pháp lệnh hợp ngữ giáo trình trình bày theo Macro Assembler ( MASM) dựa CPU 8086 1.1 Cú pháp lệnh hợp ngữ Một chương trình hợp ngữ bao gồm loạt mệnh đề ( statement) viết liên tiếp , mệnh đề viết dòng Một mệnh đề : • lệnh ( instruction) : trình biên dịch ( Assembler =ASM) chuyển thành mã máy • dẫn Assembler ( Assembler directive) : ASM không chuyển thành mã máy Các mệnh đề ASM gồm trường : Name Operation Operand(s) Comment trường cách ký tự trống ký tự TAB ví dụ lệnh đề sau : START : MOV CX,5 ; khơỉ tạo ghi CX Sau dẫn ASM : MAIN PROC ; tạo thủ tục có tên MAIN 1.1.1 Trường Tên ( Name Field) Trường tên dùng cho nhãn lệnh , tên thủ tục tên biến ASM chuyển tên thành địa nhớ Tên dài từ đến 31 ký tự Trong tên chứa ký tự từ a-z , số ký tự đặc biệt sau : ? ,@ , _ , $ dấu Không phép có ký tự trống phần tên Nếu tên có ký tự phải ký tự Tên không bắt đầu số ASM không phân biệt ký tự viết thường viết hoa Sau ví dụ tên hợp lệ không hợp lệ ASM Tên hộp lệ COUNTER1 @CHARACTER SUM_OF_DIGITS DONE? TEST Tên không hợp lệ TWO WORDS 2ABC A45.28 YOU&ME ADD-REPEAT Đề cương giảng HP NGỮ 1.1.2 Trường toán tử ( operation field) Đối với lệnh trường toán tử chưá ký hiệu ( sumbol) mã phép toán ( operation code = OPCODE) ASM chuyển ký hiệu mã phép toán thành mã máy Thông thường ký hiệu mã phép toán mô tả chức phép toán , ví dụ ADD , SUB , INC , DEC , INT Đối với dẫn ASM , trường toán tử chưá opcode giả (pseudo operation code = pseudo-op) ASM không chuyển pseudo-op thành mã máy mà hướng dẫn ASM thực việc ví dụ tạo thủ tục , định nghóa biến 1.1.3 Trường toán hạng ( operand(s) field) Trong lệnh trường toán hạng số liệu tham gia lệnh Một lệnh toán hạng , có toán hạng Ví dụ : NOP ; toán hạng INC AX ; toán hạng ADD WORD1,2 ; toán hạng cộng với nội dung từ nhớ WORD1 Trong lệnh toán hạng toán hạng đầu toán hạng đích ( destination operand) Toán hạng đích thường làthanh ghi vị trí nhớ dùng để lưu trữ kết Toán hạng thứ hai toán hạng nguồn Toán hạng nguồn thường không bị thay đổi sau thực lệnh Đối với dẫn ASM , trường toán hạng chứa nhiều thông tin mà ASM dùng để thực thi dẫn 1.1.4 Trường thích ( comment field) Trường thích tuỳ chọn mệnh đề ngôn ngữ ASM Lập trình viên dùng trường thích để thuyết minh câu lệnh Điều cần thiết ngôn ngữ ASM ngôn ngữ cấp thấp ( low level) khó hiểu chương trình không thích cách đầy đủ rỏ ràng Tuy nhiên không nên có thích dòng chương trình , kể nnhững lệnh mà ý nghóa rỏ ràng : NOP ; không làm chi Người ta dùng dấu chấm phẩy (;) để bắt đầu trường thích ASM cho phép dùng toàn dòng cho thích để tạo khoảng trống ngăn cách phần khác cuả chương trình ,ví dụ : ; ; khởi tạo ghi ; MOV AX,0 MOV BX,0 1.2 Các kiểu số liệu chương trình hợp ngữ Đề cương giảng HP NGỮ CPU làm việc với số nhị phân Vì ASM phải chuyển tất loại số liệu thành số nhị phân Trong chương trình hợp ngữ cho phép biểu diễn số liệu dạng nhị phân , thập phân thập lục phân chí ký tự nửa 1.2.1 Các số Một số nhị phân dãy bit va 2phải kết thúc h H Một số thập phân dãy chữ só thập phân kết thúc d D ( không cần) Một số hex phải bắt đầu chữ số thập phân phải kết thúc h H Sau biểu diễn số hợp lệ không hợp lệ ASM : Số Loại 10111 thập phân 10111b nhị phân 64223 thập phân -2183D thập phân 1B4DH hex 1B4D số hex không hợp lệ FFFFH số hex không hợp lệ 0FFFFH số hex 1.2.2 Các ký tự Ký tự chuỗi ký tự phải đóng hai dấu ngoặc đơn hai dấu ngoặc kép Ví dụ ‘A’ “HELLO” Các ký tự chuyển thành mã ASCII ASM Do chương trình ASM xem khai báo ‘A’ 41h ( mã ASCII A) giống 1.3 Các biến ( variables) Trong ASM biến đóng vai trò ngôn ngữ cấp cao Mỗi biến có loại liệu gán địa nhớ sau dịch chương trình Bảng sau liệt kê toán tử giả dùng để định nghóa loại số liệu PSEUDO-OP STANDS FOR DB define byte DW define word ( doublebyte) DD define doubeword ( từ liên tiếp) DQ define quadword ( từ liên tiếp ) DT define tenbytes ( 10 bytes liên tiếp) 1.3.1 Biến byte Đề cương giảng HP NGỮ Chỉ dẫn ASM để định nghóa biến byte có dạng sau : NAME DB initial_value Ví dụ : ALPHA DB Chỉ dẫn gán tên ALPHA cho byte nhớ nhớ mà giá trị ban đầu Nếu giá trị byte không xác định đặt dấu chấm hỏi ( ?) vào giá trị ban đầu Ví dụ : BYT DB ? Đối với biến byte vùng giá trị khả dó mà lưu trữ -128 đến 127 số có dấu đến 255 số không dấu 1.3.2 Biến từ Chỉ dẫn ASM để định nghóa biến từ sau : NAME DW initial_value Ví dụ : WRD DW -2 Cũng dùng dấu ? để thay cho biến từ có giá trị không xác định Vùng giá trị biến từ -32768 đến 32767 số có dấu đến 56535 số không dấu 1.3.3 Mảng ( arrays) Trong ASM mảng loạt byte nhớ từ nhớ liên tiếp Ví dụ để định nghóa mảng byte gọi B_ARRAY mà giá trị ban đầu 10h,20h 30h viết : B_ARRAY DB 10h,20h,30h B_ARRAY tên gán cho byte B_ARRAY+1 tên byte thứ hai B_ARRAY+2 tên byte thứ ba Nếu ASM gán địa offset 0200h cho mảng B_ARRAY nội dung nhớ sau : SYMBOL B_ARRAY B_ARRAY+1 B_ARRAY+2 ADDRESS 200h 201h 202h CONTENTS 10h 20h 30h Chỉ dẫn sau định nghóa mảng phần tử có tên W_ARRAY: W_ARRAY DW 1000,40,29887,329 Đề cương giảng HP NGỮ Giả sử mảng bắt đầu 0300h nhớ sau: SYMBOL ADDRESS CONTENTS W_ARRAY 300h 1000d W_ARRAY+2 302h 40d W_ARRAY+4 304h 29887d W_ARRAY+6 306h 329d Byte thấp byte cao từ Đôi cần truy xuất tới byte thấp byte cao biến từ Giả sử định nghóa : WORD1 DW 1234h Byte thấp WORD1 chứa 34h , byte cao WORD1 chứa 12h Ký hiệu địa byte thấp WORD1 ký hiệu địa byte cao WORD1+1 Chuỗi ký tự ( character strings) Một mảng mã ASCII định nghóa chuỗi ký tự Ví dụ : LETTERS DW 41h,42h,43h tương đương với LETTERS DW ‘ABC ’ Bên chuỗi , ASM phân biệt chữ hoa chữ thường Vì chuỗi ‘abc’ chuyển thaønh bytes : 61h ,62h vaø 63h Trong ASM tổ hợp ký tự số định nghóa Ví dụ : MSG DB ‘HELLO’, 0AH, 0DH, ‘$’ tương đương với MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H 1.4 Các ( constants) Trong chương trình đặt tên nhờ dẫn EQU (equates) Cú pháp EQU : NAME EQU constant ví dụ : LF EQU 0AH sau có khai báo LF dùng thay cho 0Ah chương trình Vì ASM chuyễn lệnh : MOV DL,0Ah MOV DL,LF thành mã máy Đề cương giảng HP NGỮ Cũng dùng EQU để định nghóa chuỗi , ví dụ: PROMPT EQU ‘TYPE YOUR NAME ’ Sau có khai báo , thay cho MSG DB ‘TYPE YOUR NAME ’ viết MSG DB PROMPT 1.5 Các lệnh CPU 8086 có hàng trăm lệnh , chương ,chúng ta xem xét lệnh đơn giản 8086 mà chúng thường dùng với thao tác di chuyển số liệu thực phép toán số học Trong phần sau , WORD1 WORD2 biến từ , BYTE1 BYTE2 biến byte 1.5.1 Lệnh MOV XCHG Lệnh MOV dùng để chuyển số liệu ghi , ghi vị trí nhớ để di chuyển trực tiếp số đến ghi vị trí nhớ Cú pháp lệnh MOV : MOV Destination , Source Sau vài ví dụ : MOV AX,WORD1 ; lấy nội dung từ nhớ WORD1 đưa vào ghi AX MOV AX,BX ; AX lấy nội dung BX , BX không thay đổi MOV AH,’A’ ; AX lấy giá trị 41h Bảng sau cho thấy trường hợp cho phép cấm lệnh MOV source operand General Reg Segment Reg MemoryLocation Constant General Reg Y Y Y Y Destination operand Segment Reg Memory Location Y Y NO Y Y NO NO Y Constant NO NO NO NO Leänh XCHG ( Exchange) dùng để trao đổi nội dung ghi ghi vị trí nhớ Ví dụ : XCHG AH,BL XCHG AX,WORD1 ; trao đổi nội dung ghi AX từ nhớ WORD1 Cũng lệnh MOV có số hạn chế lệnh XCHG bảng sau : Đề cương giảng HP NGỮ Source operand General Memory Memory Location Destination operand General Memory Locatin Register Y Y Y No 1.5.2 Leänh ADD, SUB, INC , DEC Lệnh ADD SUB dùng để cộng trừ nội dung ghi , ghi vị trí nhớ , cộng ( trừ) số với (khỏi) ghi vị trí nhớ Cú pháp : ADD Destination , Source SUB Destination , Source Ví dụ : ADD WORD1, AX ADD BL , SUB AX,DX ; AX=AX-DX Vì lý kỹ thuật , lệnh ADD SUB bị số hạn chế bảng sau: Source operand Gen Memory Memory Location Constant Destination operand General Reg Memory Loacation Y Y Y NO Y Y Việc cộng trừ trực tiếp vị trí nhớ không phép Để giải vấn đề người ta phải di chuyển byte ( từ ) nhớ đến ghi sau cộng trừ ghi với byte ( từ ) nhớ khác Ví dụ: MOV AL, BYTE2 ADD BYTE1, AL Lệnh INC ( incremrent) để cộng thêm vào nội dung ghi vị trí nhớ Lệnh DEC ( decrement) để giảm bớt khỏi ghi vị trí nhớ Cú pháp chúng : INC Destination DEC Destination Ví dụ : INC WORD1 INC AX DEC BL Đề cương giảng HP NGỮ 1.5.3 Lệnh NEG ( negative) Lệnh NEG để đổi dấu ( lấy bù ) ghi vị trí nhớ Cú pháp : NEG destination Ví dụ : NEG AX ; Giả sử AX=0002h sau thực lệnh NEG AX AX=FFFEh LƯU Ý : toán hạng lệnh phải loại ( byte từ ) 1.6 Chuyển ngôn ngữ cấp cao thành ngôn ngữ ASM Giả sử A B biến từ Chúng ta chuyển mệnh đề sau ngôn ngữ cấp cao ngôn ngữ ASM 1.6.1 Mệnh đề B=A MOV AX,A MOV B,AX 1.6.2 Mệnh đề A=5-A MOV AX,5 SUB AX,A MOV A,AX cách khác : NEG A ADD A,5 1.6.3 Mệnh đề A=B-2*A MOV AX,B SUB AX,A SUB AX,A MOV A,AX ; đưa A vào AX ; đưa AX vào B ; đưa vào AX ; AX=5-A ; A=5-A ;A=-A ;A=5-A ;Ax=B ;AX=B-A ;AX=B-2*A ;A=B-2*A 1.7 Cấu trúc chương trình hợp ngữ Một chương trình ngôn ngữ máy bao gồm mã ( code) , số liệu ( data) ngăn xếp (stack ) Mỗi phần chiếm đoạn nhớ Mỗi đoạn chương trình chuyển thành đoạn nhớ ASM 1.7.1 Các kiểu nhớ ( memory models) Độ lớn mã số liệu chương trình quy định dẫn MODEL nhằm xác định kiểu nhớ dùng với chương trình Cú pháp dẫn MODEL sau : MODEL memory_model Bảng sau cho thấy kiểu nhớ : Đề cương giảng HP NGỮ MODEL SMALL MEDIUM COMPACT LARGE HUGE DESCRITION code data nằm đoạn code nhiều đoạn , data đoạn data nhiều đọan , code đoạn code dayta lớn đoạn , array không qúa 64KB code ,data lớn hớn đoạn , array lớn 64KB 1.7.2 Đoạn số liệu Đoạn số liệu chương trình chưá khai báo biến , khai báo Để bắt đầu đoạn số liệu dùng dẫn DATA với cú pháp sau : DATA ;khai báo tên biến , mãng ví dụ : DATA WORD1 DW WORD2 DW MSG DB ‘THIS IS A MESSAGE ’ MASK EQU 10010010B 1.7.3 Đoạn ngăn xếp Mục đích việc khai báo đoạn ngăn xếp dành vùng nhớ ( vùng satck) để lưu trữ cho stack Cú pháp lệnh sau : STACK size không khai báo size 1KB dành cho vùng stack STACK 100h ; dành 256 bytes cho vùng stack 1.7.4 Đọan mã Đoạn mã chưá lệnh chương trình Bắt đầu đoạn mã dẫn CODE sau : CODE Bên đoạn mã lệnh thường tổ chức thành thủ tục (procedure) mà cấu trúc thủ tục sau : name PROC ; body of the procedure name ENDP Sau câú trúc chương trình hợp ngữ mà phần CODE thủ tục có tên MAIN Đề cương giảng HP NGỮ 10 MODEL SMALL STACK 100h DATA ; định nghóa số liệu CODE MAIN PROC ;thân thủ tục MAIN MAIN ENDP ; thủ tục khác có END MAIN 1.8 Các lệnh vào CPU thông tin với ngoại vi thông qua cổng IO Lệnh IN OUT CPU cho phép truy xuất đến cổng Tuy nhiên hầu hết ứng dụng không dùng lệnh IN OUT lý do: • địa cổng thay đổi tuỳ theo loại máy tính • lập trình cho IO dễ dàng nhờ chương trình ( routine) cung cấp hãng chế tạo máy tính Có loại chương trình phục vụ IO : routine BIOS ( Basic Input Output System) routine DOS Lệnh INT ( interrupt) Để gọi chương trình BIOS DOS dùng lệnh INT với cú pháp sau : INT interrupt_number interrupt_number số mà định routine Ví dụ INT 16h gọi routine thực việc nhập số liệu từ Keyboard 1.8.1 Lệnh INT 21h INT 21h dùng để gọi số lớn các hàm ( function) DOS Tuỳ theo giá trị mà đặt vào ghi AH , INT 21h gọi chạy routine tương ứng Trong phần quan tâm đến hàm sau : Đề cương giảng HP NGỮ FUNCTION NUMBER 11 ROUTINE Single key input Single character output FUNTION : Single key input Input : AH=1 Output:AL= ASCII code if character key is pressed AL=0 if non character key is pressed Để gọi routine thực leänh sau : MOV AH,1 ; input key function INT 21h ; ASCII code in AL and display character on the screen FUNTION : Display a character or execute a control function Input : AH=2 DL=ASCII code of the the display character or control character Output:AL= ASCII code of the the display character or control character Các lệnh sau in lên hình dấu ? MOV AH,2 MOV DL,’?’ ; character is ‘?’ INT 21H ; display character Hàm dùng để thực chức điều khiển Nếu DL chưá ký tự điều khiển gọi INT 21h , ký tự điều khiển thực Các ký tự điều khiển thường dùng : ASCII code (Hex) A D SYMBOL BEL BS HT LF CR FUNCTION beep backspace tab line feed carriage return 1.9 Chương trình Chúng ta viết chương trình hợp ngữ nhằm đọc ký tự từ bàn phím in đầu dòng TITLE PGM1: ECHO PROGRAM ... không hợp lệ ASM : Số Loại 10 111 thập phân 10 111 b nhị phân 64223 thập phân - 218 3D thập phân 1B4DH hex 1B4D số hex không hợp lệ FFFFH số hex không hợp lệ 0FFFFH số hex 1. 2.2 Các ký tự Ký tự chuỗi... cao biến từ Giả sử định nghóa : WORD1 DW 12 34h Byte thấp WORD1 chứa 34h , byte cao WORD1 chứa 12 h Ký hiệu địa byte thấp WORD1 ký hiệu địa byte cao WORD1 +1 Chuỗi ký tự ( character strings) Một... routine Ví dụ INT 16 h gọi routine thực việc nhập số liệu từ Keyboard 1. 8 .1 Lệnh INT 21h INT 21h dùng để gọi số lớn các hàm ( function) DOS Tuỳ theo giá trị mà đặt vào ghi AH , INT 21h gọi chạy routine

Ngày đăng: 14/07/2014, 01:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan