Ngôn ngữ lập trình Assembly - Nguyễn Tiến Duy

124 12 0
Ngôn ngữ lập trình Assembly - Nguyễn Tiến Duy

Đ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

Với kết cấu nội dung gồm 7 chương, tài liệu Ngôn ngữ lập trình Assembly giới thiệu đến các bạn những nội dung cơ bản về kiến trúc phần cứng và phần mềm của bộ vi xử lý x86 Fmaily. Ngôn ngữ lập trình Assembly để giải quyết các bài toán mức thấp của hệ thống: Vào, ra dữ liệu, điều khiển hệ thống. Với các bạn đang học chuyên ngành Kỹ thuật lập trình máy tính thì đây là tài liệu tham khảo hữu ích.

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP KHOA ĐIỆN TỬ Bộ mơn: Kỹ thuật máy tính ASSEMBLY Thái Ngun 2002 TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP MỤC LỤC GIỚI THIỆU MÔN HỌC BÀI GIẢNG MÔN: ASSEMBLY I MỤC ĐÍCH MƠN HỌC II NỘI DUNG CHÍNH III NỘI DUNG CHI TIẾT CHƯƠNG CƠ BẢN VỀ HỢP NGỮ .7 1.1 Cú pháp lệnh hợp ngữ 1.1.1 Trường tên (Name field) 1.1.2 Trường toán tử (Operator field) 1.1.3 Trường toán hạng (Operand(s) code) .8 1.1.4 Trường thích (Comment field) 1.2 Các kiểu số liệu chương trình hợp ngữ 1.2.1 Các số .9 1.2.2 Các ký tự 1.2.3 Các biến (Variables) .9 1.2.3.1 Biến byte 1.2.3.2 Biến từ (word) 1.2.3.3 Biến mảng (array) 10 1.2.3.4 Byte thấp byte cao từ 10 1.2.4 Chuỗi ký tự (Character string) .10 1.2.5 Các (Constnts) .11 1.3 Các lệnh 11 1.3.1 Lệnh MOV lệnh XCHG 11 1.3.2 Lệnh ADD, SUB, INC, DEC 12 1.3.3 Lệnh NEG (NEGative) 13 1.4 Chuyển ngôn ngữ cấp cao thành ngôn ngữ ASM 13 1.4.1 Mệnh đề A=B: 13 1.4.2 Mệnh đề A=5-A: 13 1.4.3 Mệnh đề A=B-2*A: 13 1.5 Cấu trúc chương trình hợp ngữ .13 1.5.1 Các kiểu nhớ 13 1.5.2 Đoạn số liệu 14 1.5.3 Đoạn ngăn xếp 14 1.5.4 Đoạn mã .14 1.6 Các lệnh vào, 15 1.7 Chương trình 16 1.8 Tạo chạy chương trình hợp ngữ .16 1.8.1 Xuất chuỗi ký tự 18 1.8.2 Chương trình đổi chữ thường sang chữ hoa 19 CHƯƠNG TRẠNG THÁI CỦA VI XỬ LÝ VÀ CÁC THANH GHI CỜ 20 2.1 Thanh ghi cờ (Flag register) 20 2.2 Tràn (Overflow) 21 2.3 Các lệnh ảnh hưởng đến cờ 22 2.4 Chương trình Debug .24 CHƯƠNG CÁC LỆNH ĐIỀU KHIỂN 28 3.1 Ví dụ lệnh nhảy 28 3.2 Nhảy có điều kiện 28 3.3 Lệnh JMP .31 3.4 Cấu trúc ngôn ngữ cấp cao 31 3.4.1 Cấu trúc rẽ nhánh 31 Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP 3.4.1.1 Cấu trúc If - Then 31 3.4.1.2 Cấu trúc If - Then - Else .32 3.4.1.3 Cấu trúc If - Then - Else .32 3.4.2 Cấu trúc lặp 34 3.4.2.1 Vòng For .34 3.4.2.2 Vòng WHILE .35 3.4.2.3 Vòng REPEAT .35 3.5 Lập trình với cấu trúc cấp cao 36 CHƯƠNG CÁC LỆNH LOGIC, DỊCH VÀ QUAY .41 4.1 Các lệnh logic .41 4.1.1 Lệnh And, Or Xor 41 4.1.2 Lệnh NOT .43 4.1.3 Lệnh TEST 43 4.2 Lệnh SHIFT 44 4.2.1 Lệnh dịch trái (Left Shift) 44 4.2.2 Lệnh dịch phải (Right Shift) 45 4.3 Lệnh quay (Rotate) .46 4.4 Nhập/xuất số nhị phân số Hexa .47 4.4.1 Nhập số nhị phân 47 4.4.2 Xuất số nhị phân 48 4.4.3 Nhập số Hexa .48 CHƯƠNG NGĂN XẾP VÀ THỦ TỤC 50 5.1 Ngăn xếp .50 5.1.1 Lệnh PUSH PUSHF 50 5.1.2 Lệnh POP POPF 50 5.2 Ứng dụng stack 51 5.3 Thủ tục (procedure) 52 5.4 Call Return .53 5.5 Ví dụ thủ tục 54 CHƯƠNG LỆNH NHÂN VÀ CHIA 56 6.1 Lệnh MUL IMUL 56 6.2 Ứng dụng đơn giản lệnh MUL IMUL .57 6.3 Lệnh DIV IDIV 58 6.4 Mở rộng dấu số bị chia 59 6.5 Thủ tục nhập/xuất số thập phân 59 CHƯƠNG MẢNG VÀ CÁC CHẾ ĐỘ ĐỊA CHỈ 66 7.1 Mảng chiều 66 7.2 Các chế độ địa (Addressing modes) .67 7.2.1 Chế độ địa gián tiếp qua ghi 67 7.2.2 Chế độ địa chỉ số sở 69 7.2.3 Toán tử PTR toán tử giả LABEL .71 7.2.4 Chiếm đoạn (segment override) 73 7.2.5 Truy xuất đoạn ngăn xếp (stack) 73 7.3 Sắp xếp số liệu mảng .73 7.4 Mảng hai chiều .75 7.5 Chế độ địa chỉ số sở 76 7.6 Ứng dụng để tính trung bình 77 7.7 Lệnh XLAT 79 PHỤ LỤC 1: INTEL 80X86 INSTRUCTION SET 82 PHỤ LỤC 2: CÁC DỊCH VỤ CỦA BIOS VÀ DOS .126 PHỤ LỤC 3: CÁC CHƯƠNG TRÌNH VÍ DỤ 127 Communication 127 Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP Compression 127 CPU 127 Date & Time 127 Disk & File access 127 Keyboard & Mouse 127 Math routines 127 Memory 127 Protected mode .127 TSR (Terminal and Stay Presidented) 127 Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP GIỚI THIỆU MƠN HỌC Tên mơn học: Ngơn ngữ lập trình Assembly Phân bố thời gian: 45 LT + 15 BT Môn tiên quyết:  Ngơn ngữ lập trình Pascal, C (Tin học đại cương)  Cấu trúc máy tính (hoặc Kiến trúc máy tính)  Vi xử lý Môn song hành: Kỹ thuật ghép nối máy tính thiết bị ngoại vi, Đo lường điều khiển máy tính Mơ tả môn học: Môn học cung cấp cho sinh viên kiến thức kiến trúc phần cứng phần mềm vi xử lý x86 Fmaily Ngôn ngữ lập trình Assembly (hợp ngữ) để giải toán mức thấp hệ thống: vào/ra liệu, điều khiển hệ thống, Giáo trình chính: Lập trình hợp ngữ cho IBM PC máy tính tương thích Tài liệu tham khảo: [1] Ytha Yu & Charles Marut, Lập trình hợp ngữ (Assembly) máy vi tính IBM-PC, NXB Giáo Dục, 1996 [2] PTS Nguyễn Quang Tấn, Vũ Thanh Hiền, Lập trình với Hợp Ngữ, NXB Thống Kê, 1997 [3] Văn Thế Minh, Kỹ thuật vi xử lý, NXB Giáo Dục, 1997 [4] Trần Bá Thái, Điều khiển ghép nối thiết bị ngoại vi, NXB thống kê, 1987 [5] Trần Quang Vinh, Cấu trúc máy vi tính, NXB Giáo Dục, 1998 [6] Computer Organization and Assembly Language Programming For IBM PC and Compatibles Michael Thorne - The Benjamin-Cummings Publishing Company, Inc 1991 [7] Microprocessors and microcomputer-based system design Mohamed Rafiquzzaman CRC Press, 1995 [8] Interfacing to the IBM Personal Computer Lewis C Eggebrecht - SAMS, 1991 [9] Microprocessors and interfacing: Programming and Hardware Douglas V Hall Macmillan/McGraw-Hill, 1992 Đối tượng học: Sinh viên ngành Kỹ thuật máy tính, Điều khiển tự động, Điện tử viễn thông, Kỹ thuật điện tử Giáo viên phụ trách: Nguyễn Tiến Duy 10 Đơn vị phụ trách: Bộ mơn Kỹ thuật máy tính, Khoa Điện tử Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP BÀI GIẢNG MÔN: ASSEMBLY I MỤC ĐÍCH MƠN HỌC II NỘI DUNG CHÍNH Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP III NỘI DUNG CHI TIẾT CHƯƠNG CƠ BẢN VỀ HỢP NGỮ Trong chương giới thiệu nguyên tắc chung để tạo ra, 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/88 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 đề (statements) viết liên tiếp nhau, mệnh đề viết dịng Một mệnh đề là: o Một thị (instruction): biên dịch (Assembler = ASM) thành mã máy o Một 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 Operator Operand(s) Comment Các trường cách dấu cách ký tự TAB Ví dụ: Start: Mov Main Proc cx, ; Khởi tạo biến đếm vòng lặp, (chỉ thị dịch mã máy) ; Tạo thủ tục có tên Main (chỉ dẫn không dịch mã máy) 1.1.1 Trường tên (Name field) Trường 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 bao gồm ký tự: A - z, chữ số số ký tự đặc biệt: ?, @, _, $  Tên không chứa dấu cách  Độ dài từ đến 31 ký tự  Nếu tên có ký tự ‘.’ phải ký tự  Tên không bắt đầu chữ số  ASM không phân biệt ký tự hoa ký tự thường Ví dụ: 1.1.2 COUNTER1 TWO WORDS ; Tên không hợp lệ (chứa dấu cách) @CHARACTER2ABC ; Tên hợp lệ SUM_OF_DIGITS A45.28 ; Tên không hợp lệ (chứa dấu cách) DONE?YOU&ME ; Tên hợp lệ TEST ADD-REPEAT ; Tên khơng hợp lệ (chứa dấu cách) Trường tốn tử (Operator field) Đối với lệnh, trường toán tử chứa ký hiệu (symbol) dạng gợi nhớ (mnemonic) mã phép toán (operator code = Opcode) ASM chuyển ký hiệu mã phép toán thành mã Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP máy Thơng thường ký hiệu mã phép tốn mơ tả chức phép tốn (phép tốn thực cơng việc gì) Ví dụ: ADD, SUB, INC, DEC, INT, IN, OUT, Đối với dẫn chương trình dịch, trường toán tử chứa opcode giả (Pseudo operator code = Pseudo-op) ASM không chuyển Pseudo-op thành mã máy mà hướng ASM thực cơng việc đó, ví dụ tạo thủ tục, định nghĩa biến, 1.1.3 Trường tốn hạng (Operand(s) code) Operand(s) = Đích, nguồn Trong thị, trường toán hạng số liệu tham gia thị Tuỳ thị khác mà trường có 2, khơng có tốn hạng Ví dụ: Add Inc Nop ax, word cx ; Hai tốn hạng ; Một tốn hạng ; Khơng tốn hạng Trong thị có hai tốn hạng, tốn hạng đầu tốn hạng đích (destination operand), tốn hạng đích thường ghi ô nhớ dùng để lưu trữ kết Cịn tốn hạng thứ hai tốn hạng nguồn (source operand), tố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 thường chứa nhiều thông tin mà ASM dùng để thực dẫn 1.1.4 Trường thích (Comment field) Trường thích tuỳ chọn mệnh đề ngơn ngữ ASM Người lập trình thường 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 lệnh chương trình, kể lệnh mà ý nghĩa rõ ràng như: Nop ; Khơng làm Trường thích bắt đầu dấu chấm phảy ASM cho phép dùng tồn dịng cho thích để tạo khoảng trống ngăn cách phần khác chương trình, ví dụ: ; ; Khởi tạo ghi ; Mov ax, Mov bx, 1.2 Các kiểu số liệu chương trình hợp ngữ CPU làm việc với số nhị phân, 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 (Binary), thập phân (Decimal) thập lục phân (Hexa) chí ký tự Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP 1.2.1 Các số Một số nhị phân dãy bit 1, phải kết thúc B (hoặc b) Một số thập phân dãy chữ số thập phân, kết thúc D (hoặc d) không cần Một số hexa dãy chữ số hexa, kết thúc H (hoặc h) Sau biểu diễn số hợp lệ không hợp lệ ASM: 1.2.2 Số 10111 10111b 64223 -2183D 1B4DH 1B4D FFFFH 0FFFFH Loại Số thập phân Số nhị phân Số thập phân Số thập phân Số Hexa Số Hexa không hợp lệ Số Hexa không hợp lệ Số Hexa Các ký tự Ký tự xâu ký tự phải đặt cặp dấu ngoặc đơn (hoặc cặp ngoặc kép) Ví dụ: ‘A’ “Hello” Các ký tự chuyển thành mã ASCII ASM chương trình ASM xem ‘A’ 41h (mã ASCII cảu ‘A’) 1.2.3 Các biến (Variables) Trong ASM, biến đóng vai trị ngơn ngữ bậc 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 1.2.3.1.Biến byte Chỉ dẫn ASM để định nghĩa biến byte có dạng sau: NAMEDB PSEUDO-OP DB DW DD DQ DT STANDS FOR Define Byte Define Word (doublebyte) Define Doubeword (2 từ liên tiếp) Define Quadword (4 từ liên tiếp) Define Tenbytes (10 bytes liên tiếp) 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ụ: Byte DB ? Đối biến byte, phạm vi giá trị mà lưu trữ từ -128 đến 127 số có dấu từ đến 255 số không dấu 1.2.3.2.Biến từ (word) Chỉ dẫn ASM để định nghĩa biến từ sau: NAMEDW initial_value Ví dụ: WRD DW -2 Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP Tương tự biến byte, dùng dấu ? để định nghĩa biến từ có giá trị khơng xác định phạm vi giá trị mà lưu trữ từ -32768 đến 32767 số có dấu từ đến 65535 số không dấu 1.2.3.3.Biến mảng (array) Trong ASM, mảng nhớ 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 Khi đó: B_array tên gán cho byte B_array+1 tên gán cho byte thứ hai B_array+2 tên gán cho byte thứ hai Nếu ASM gán địa offset 0200h cho mảng B_array nội dung nhớ sau (bảng bên): Chỉ dẫn sau định nghĩa mảng gồm phần tử có tên W_array: W_array DW 1000, 40, 2997, 230 Giả sử mảng bắt đầu địa offset 0300h nội dung nhớ bên: 1.2.3.4 Symbol B_array B_array+1 B_array+2 Address 0200h 0201h 0202h Contents 10h 20h 30h Symbol W_array W_array+2 W_array+4 W_array+4 Address 0300h 0302h 0304h 0306h Contents 1000d 40d 2997d 230d Byte thấp byte cao từ Đôi ta cần truy xuất đến byte (byte thấp byte cao) 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 (là địa biến Word1) ký hiệu địa byer cao Word1+1 1.2.4 Chuỗi ký tự (Character string) Một mảng mã ASCII định nghĩa chuỗi ký tự Ví dụ: Letters db 41h, 42h, 43h tương đương với: Letters db ‘ABC’ Bên chuỗi, ASM phân biệt chữ hoa chữ thường Vì chuỗi ‘abc’ chuyển thành byte: 61h, 62h, 63h Trong ASM tổ hợp ký tự số định nghĩa Ví dụ: MSG db ‘HELLO’, 0AH, 0DH, ‘$’ tương đương với: Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính 10 TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP Rotates the bits in the destination to the right "count" times with all data pushed out the right side re-entering on the left The Carry Flag holds the last bit rotated out Clocks Size Bytes Operands 808x 286 386 486 reg, 2 mem, 15+EA 10 2-4 (W88=23+EA) reg, CL 8+4n 5+n 8-30 mem, CL 20+EA+4n 8+n 10 9-31 2-4 (W88=28+EA+4n) reg, immed8 5+n 8-30 mem, immed8 8+n 10 9-31 3-5 REP - Repeat String Operation Usage: REP Modifies flags: None Repeats execution of string instructions while CX != After each string operation, CX is decremented and the Zero Flag is tested The combination of a repeat prefix and a segment override on CPU's before the 386 may result in errors if an interrupt occurs before CX=0 The following code shows code that is susceptible to this and how to avoid it: again: rep movs byte ptr ES:[DI],ES:[SI] ; vulnerable instr jcxz next ; continue if REP successful loop again ; interrupt goofed count next: Clocks Size Bytes Operands 808x 286 386 486 none 2 REPE/REPZ - Repeat Equal / Repeat Zero Usage: REPE REPZ Modifies flags: None Repeats execution of string instructions while CX != and the Zero Flag is set CX is decremented and the Zero Flag tested after each string operation The combination of a repeat prefix and a segment override on processors other than the 386 may result in errors if an interrupt occurs before CX=0 Clocks Size Bytes Operands 808x 286 386 486 none 2 REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero Usage: REPNE REPNZ Modifies flags: None Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính 110 ... phần mềm vi xử lý x86 Fmaily Ngôn ngữ lập trình Assembly (hợp ngữ) để giải toán mức thấp hệ thống: vào/ra liệu, điều khiển hệ thống, Giáo trình chính: Lập trình hợp ngữ cho IBM PC máy tính tương... 127 Nguyễn Tiến Duy - Trung tâm Kỹ thuật máy tính - Bộ mơn Kỹ thuật máy tính TRƯỜNG ĐẠI HỌC KỸ THUẬT CƠNG NGHIỆP GIỚI THIỆU MƠN HỌC Tên mơn học: Ngơn ngữ lập trình Assembly Phân bố... khảo: [1] Ytha Yu & Charles Marut, Lập trình hợp ngữ (Assembly) máy vi tính IBM-PC, NXB Giáo Dục, 1996 [2] PTS Nguyễn Quang Tấn, Vũ Thanh Hiền, Lập trình với Hợp Ngữ, NXB Thống Kê, 1997 [3] Văn

Ngày đăng: 11/05/2021, 19:52

Từ khóa liên quan

Mục lục

  • GIỚI THIỆU MÔN HỌC

  • BÀI GIẢNG MÔN: ASSEMBLY

  • I. MỤC ĐÍCH MÔN HỌC

  • II. NỘI DUNG CHÍNH

  • III. NỘI DUNG CHI TIẾT

  • CHƯƠNG 1 CƠ BẢN VỀ HỢP NGỮ

  • 1.1. Cú pháp lệnh hợp ngữ

    • 1.1.1. Trường tên (Name field)

    • 1.1.2. Trường toán tử (Operator field)

    • 1.1.3. Trường các toán hạng (Operand(s) code)

    • 1.1.4. Trường chú thích (Comment field)

    • 1.2. Các kiểu số liệu trong chương trình hợp ngữ

      • 1.2.1. Các số

      • 1.2.2. Các ký tự

      • 1.2.3. Các biến (Variables)

        • 1.2.3.1. Biến byte

        • 1.2.3.2. Biến từ (word)

        • 1.2.3.3. Biến mảng (array)

        • 1.2.3.4. Byte thấp và byte cao của một từ

        • 1.2.4. Chuỗi các ký tự (Character string)

        • 1.2.5. Các hằng (Constnts)

        • 1.3. Các lệnh cơ bản

          • 1.3.1. Lệnh MOV và lệnh XCHG

          • 1.3.2. Lệnh ADD, SUB, INC, DEC

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

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

Tài liệu liên quan