1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Lập trình hợp ngữ

280 8 0

Đ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

Định dạng
Số trang 280
Dung lượng 8,32 MB

Nội dung

Giáo trình Lập trình hợp ngữ Chương 1. KIẾN THỨC CƠ SỞ CHO LẬP TRÌNH HỢP NGỮ...................................3 1.1. Tổ chức và thực thi trong máy tính .........................................................................3 1.1.1. Chức năng và các mức kiến trúc của hệ thống máy tính .................................4 1.1.2. Kiến trúc mức hệ thống....................................................................................8 1.1.3. Quá trình thực thi chương trình .....................................................................12 1.1.4. Kiến trúc mức vi xử lý ...................................................................................13 1.1.5. Quá trình thực hiện lệnh trong vi xử lý..........................................................15 1.1.6. Kiến trúc tập lệnh và tập lệnh máy ................................................................18 1.1.7. Tổ chức và truy xuất bộ nhớ ..........................................................................21 1.2. Ngôn ngữ máy, hợp ngữ và ngôn ngữ bậc cao .....................................................22 1.3. Phương pháp và quy trình xây dựng chương trình hợp ngữ.................................26 1.4. Chương trình dịch và trình hợp dịch.....................................................................28 1.5. Môi trường và công cụ phát triển .........................................................................29 1.5.1. Môi trường Linux...........................................................................................30 1.5.2. Môi trường Windows.....................................................................................31 1.6. Tổng kết chương....................................................................................................33 Câu hỏi và bài tập ............................................................................................................34 Chương 2. KIẾN TRÚC VI XỬ LÝ ARM ......................................................................35 2.1. Kiến trúc và các chế độ xử lý ................................................................................35 2.1.1. Kiến trúc vi điều khiển lõi ARM ...................................................................35 ii 2.1.2. Kiến trúc vi xử lý ARM.................................................................................37 2.1.3. Các chế độ hoạt động của vi xử lý lõi ARM..................................................40 2.1.4. Mô hình bộ nhớ..............................................................................................42 2.1.5. Dải bit.............................................................................................................49 2.1.6. Cơ chế giao tiếp ngoại vi ...............................................................................52

1 MỤC LỤC MỤC LỤC i THUẬT NGỮ VÀ TỪ VIẾT TẮT v BẢNG CÁC KÝ HIỆU vii DANH MỤC BẢNG viii DANH MỤC HÌNH xi MỞ ĐẦU Chương KIẾN THỨC CƠ SỞ CHO LẬP TRÌNH HỢP NGỮ 1.1 Tổ chức thực thi máy tính 1.1.1 Chức mức kiến trúc hệ thống máy tính 1.1.2 Kiến trúc mức hệ thống 1.1.3 Quá trình thực thi chương trình 12 1.1.4 Kiến trúc mức vi xử lý 13 1.1.5 Quá trình thực lệnh vi xử lý 15 1.1.6 Kiến trúc tập lệnh tập lệnh máy 18 1.1.7 Tổ chức truy xuất nhớ 21 1.2 Ngôn ngữ máy, hợp ngữ ngôn ngữ bậc cao 22 1.3 Phương pháp quy trình xây dựng chương trình hợp ngữ 26 1.4 Chương trình dịch trình hợp dịch 28 1.5 Môi trường công cụ phát triển 29 1.5.1 Môi trường Linux 30 1.5.2 Môi trường Windows 31 1.6 Tổng kết chương 33 Câu hỏi tập 34 Chương KIẾN TRÚC VI XỬ LÝ ARM 35 2.1 Kiến trúc chế độ xử lý 35 2.1.1 Kiến trúc vi điều khiển lõi ARM 35 i 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 Kiến trúc vi xử lý ARM 37 Các chế độ hoạt động vi xử lý lõi ARM 40 Mơ hình nhớ 42 Dải bit 49 Cơ chế giao tiếp ngoại vi 52 2.2 Tập ghi 53 2.2.1 Con trỏ ngăn xếp 54 2.2.2 Thanh ghi liên kết 55 2.2.3 Con trỏ chương trình 56 2.2.4 Các ghi đặc biệt 56 2.3 Các cờ 58 2.4 Các ngoại lệ 59 2.5 Khối điều khiển 61 2.6 Tổng kết chương 62 Câu hỏi tập 62 Chương TẬP LỆNH ARM 63 3.1 Kiến trúc tập lệnh ARM 63 3.2 Mã hóa tập lệnh tập lệnh 65 3.2.1 Mã hóa tập lệnh 65 3.2.2 Các tập lệnh 72 3.3 Hợp ngữ thống 74 3.4 Nhóm lệnh truyền liệu thành phần bên vi xử lý 76 3.5 Nhóm lệnh truy cập nhớ 81 3.5.1 Các lệnh 81 3.5.2 Các chế độ địa 81 3.5.3 Di chuyển liệu đa ghi 86 3.5.4 Di chuyển liệu với ngăn xếp 89 3.6 Nhóm lệnh xử lý liệu 92 3.6.1 Các lệnh số học 92 3.6.2 Các lệnh lôgic 94 3.6.3 Các lệnh dịch quay 95 3.6.4 Các lệnh chuyển kiểu liệu 96 3.6.5 Các lệnh xử lý trường bit 97 3.7 Nhóm lệnh điều khiển 98 3.7.1 Các lệnh so sánh 98 3.7.2 Lệnh rẽ nhánh 99 3.8 Nhóm lệnh hệ thống 109 ii 3.8.1 3.8.2 3.8.3 3.9 Ngắt mềm 109 Lệnh cờ hiệu 109 Thao tác với đồng xử lý 110 Tổng kết chương 111 Câu hỏi tập 111 Chương LẬP TRÌNH HỢP NGỮ ARM CƠ BẢN 112 4.1 Cấu trúc chương trình 112 4.1.1 Đoạn mã lệnh 114 4.1.2 Đoạn liệu 119 4.2 Thao tác chuyển liệu 120 4.2.1 Chuyển liệu 16 bit nhỏ 122 4.2.2 Chuyển liệu 32 bit 125 4.2.3 Chuyển liệu đoạn 16 – 32 bit 127 4.2.4 Chuyển liệu 64 bit 129 4.2.5 Chuyển liệu đoạn 16 – 64 bit 130 4.3 Cấu trúc rẽ nhánh lặp 132 4.3.1 Cấu trúc if 134 4.3.2 Cấu trúc switch 137 4.3.3 Cấu trúc for 140 4.3.4 Cấu trúc while 144 4.3.5 Cấu trúc do-while 148 4.3.6 Điều khiển vòng lặp với break continue 152 4.3.7 Thực thi có điều kiện 155 4.3.8 Phá vỡ vòng lặp để tối ưu hiệu 157 4.4 Chuyển đổi mã 158 4.4.1 Hệ thống số bảng mã 158 4.4.2 Số hệ 16 sang ASCII 168 4.4.3 ASCII sang thập phân 170 4.4.4 BCD nhị phân 170 4.4.5 Xâu ASCII sang nhị phân 172 4.5 Thao tác số học 173 4.5.1 Phép cộng, trừ 173 4.5.2 Phép nhân 176 4.5.3 Phép chia 178 4.6 Tổng kết chương 179 Câu hỏi tập 180 Chương LẬP TRÌNH HỢP NGỮ ARM NÂNG CAO 182 5.1 Tổ chức cấu trúc liệu 182 iii 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.2 Cấu trúc mảng 183 Xử lý xâu 184 Bản ghi 191 Danh sách 192 Hàng đợi 196 Ngăn xếp 199 Macro 206 5.3 Chương trình 207 5.3.1 Khái niệm, phân loại 207 5.3.2 Truyền tham số 208 5.3.4 Dữ liệu cục 217 5.3.5 Một số ví dụ minh họa 226 5.4 Xử lý ngoại lệ 239 5.4.1 Quá trình khởi động lại 240 5.4.2 Các loại ngoại lệ 243 5.4.3 Quản lý ưu tiên 249 5.5 Liên kết mơ-đun ngồi 251 5.6 Tổng kết chương 252 Câu hỏi tập 253 TÀI LIỆU THAM KHẢO 255 PHỤ LỤC 256 P.1 Tạo sử dụng công cụ phát triển chéo cho ARM Ubuntu 256 P.2 Cấu trúc đĩa CD mã nguồn 261 CHỈ MỤC 262 iv THUẬT NGỮ VÀ TỪ VIẾT TẮT Viết tắt AHB-PPB ALU Tiếng Anh Tiếng Việt Advanced High – Performance Bus ngoại vi riêng, hiệu cao Bus PPB cải tiến Arithmetic and Logic Unit Bộ lôgic số học APB-PPB Advanced Peripheral Bus PPB ARM Bus ngoại vi riêng cải tiến Advanced RISC Machine Máy RISC tiên tiến AVR Alf and Vegard's RISC Tên loại vi điều khiển tập đoàn Atmel, dựa theo tên hai nhà thiết kế chip CISC Complex Computer CPU Center Processing Unit DRAM IC IDE IR Dynamic Memory Instruction Random Set Bộ xử lý trung tâm Access Intergrated Circuit Intergrated Environment Máy tính với tập lệnh phức tạp RAM động Mạch tích hợp Development Mơi trường phát triển tích hợp Instruction Register Thanh ghi lệnh ISA Instruction Set Architecture Kiến trúc tập lệnh LSB Least Significant Bit Bit có trọng số thấp MSB Most Significant Bit Bit có trọng số cao MSP Main Stack Pointer Con trỏ ngăn xếp NMI Non Maskable Interrupt Ngắt không che NVIC Nested Vectored Controller Interrupt Bộ điều khiển ngắt vectơ lồng PC Program Counter Thanh ghi trỏ lệnh PPB Private Peripheral Bus Bus ngoại vi riêng v Process Stack Pointer Con trỏ ngăn xếp xử lý RAM Random Access Memory Bộ nhớ truy xuất ngẫu nhiên RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên PSP RISC Reduced Instruction Set Computer Máy tính với tập lệnh rút gọn ROM Read Only Memory Bộ nhớ đọc ROM Read Only Memory Bộ nhớ đọc SIMD SLA SRAM VIC Single Instruction – Multiple Data Đơn lệnh đa luồng liệu System Level Architecture Kiến trúc mức hệ thống Static Random Access Memory RAM tĩnh Vectored Interrupt Controller Bộ điều khiển ngắt vectơ vi BẢNG CÁC KÝ HIỆU Ký hiệu A Mô tả Danh sách Ad Địa vectơ ngắt Phần tử thứ i danh sách B Cơ số Bs Địa sở BT Địa tái định vị C Chương trình dịch i Chỉ số dịng phần tử mảng IN Số hiệu ngắt IS Tập lệnh máy ảo j Chỉ số cột phần tử mảng L Mức máy ảo maxM N Kích thước tối đa nhớ vật lý Số chân vào giải mã NbCol Số cột mảng NbRow Số dòng mảng NI Nmax Số câu lệnh chương trình Số hiệu ngắt lớn Ns Số giai đoạn kiến trúc đường ống lệnh Q Hàng đợi qi Phần tử thứ i hàng đợi S Độ rộng bus địa ta Thời gian thực lệnh Ts Khoảng thời gian giai đoạn đường ống v Vị trí phần tử mảng VO Số thứ tự chân kích hoạt giải mã vii DANH MỤC BẢNG Bảng 1.1 So sánh kiến trúc Von Neumann Harvard - 11 Bảng 1.2 So sánh kiến trúc RISC CISC - 20 Bảng 2.1 Các chế độ hoạt động vi xử lý lõi ARM - 40 Bảng 2.2 Trình biên dịch xử lý để ghi bit khơng/có sử dụng bit- band 50 Bảng 2.3 Trình biên dịch xử lý để đọc bit khơng/có sử dụng bit- band 51 Bảng 2.4 Ánh xạ địa bit – band vùng SRAM 51 Bảng 2.5 Ánh xạ địa bit – band vùng nhớ ngoại vi 51 Bảng 2.6 Tổng hợp bảng vector ngắt 60 Bảng 3.1 Các dẫn khai báo biến trình biên dịch hợp ngữ - 69 Bảng 3.2 Một số dẫn trình biên dịch ARM - 70 Bảng 3.3 So sánh tập lệnh Thumb ARM 32 bit 74 Bảng 3.4 Các câu lệnh truyền liệu bên vi xử lý - 77 Bảng 3.5 Các lệnh dịch bit 79 Bảng 3.6 Tổng hợp cú pháp lệnh dịch 80 Bảng 3.7 Các lệnh truy xuất nhớ với kiểu liệu khác - 81 Bảng 3.8 Các chế độ địa 82 Bảng 3.9 Các lệnh truy cập nhớ với giá trị tức thời - 82 Bảng 3.10 Các lệnh truy cập nhớ với giá trị trực tiếp ghi ngược 83 Bảng 3.11 Các lệnh truy cập nhớ với địa liên quan ghi PC 84 Bảng 3.12 Các lệnh truy cập nhớ với giá trị dịch ghi 84 viii Bảng 3.13 Các lệnh truy cập nhớ chế độ số sau - 85 Bảng 3.14 Cú pháp câu lệnh truyền đa liệu 86 Bảng 3.15 Các chế độ địa với câu lệnh nạp – lưu trữ đa liệu - 87 Bảng 3.16 Các lệnh nạp/lưu trữ đa giá trị 87 Bảng 3.17 Các lệnh nạp/ lưu giá trị vào nhớ với ghi ngược - 88 Bảng 3.18 Các lệnh PUSH POP cho ngăn xếp - 90 Bảng 3.19 Các chế độ địa cho thao tác ngăn xếp - 91 Bảng 3.20 Các lệnh thao tác số học - 93 Bảng 3.21 Các lệnh nhân nhân cộng dồn - 93 Bảng 3.22 Các lệnh lôgic - 94 Bảng 3.23 Tổng hợp lệnh dịch quay 95 Bảng 3.24 Các lệnh mở rộng kiểu liệu 96 Bảng 3.25 Các lệnh mở rộng kiểu liệu với thao tác quay 96 Bảng 3.26 Các câu lệnh đảo liệu - 97 Bảng 3.27 Các lệnh thao tác với bit ghi 98 Bảng 3.28 Các câu lệnh so sánh kiểm tra - 99 Bảng 3.29 Các câu lệnh rẽ nhánh -100 Bảng 3.30 Các cờ ghi PSR, dùng để kiểm tra điều kiện rẽ nhánh -101 Bảng 3.31 Các hậu tố điều kiện -102 Bảng 3.32 Khối lệnh IT với số lượng điều kiện khác -106 Bảng 3.33 Ví dụ với câu lệnh SSAT -108 Bảng 3.34 Ví dụ với câu lệnh USAT -108 Bảng 3.35 Câu lệnh ngắt -109 Bảng 3.36 Các lệnh cờ hiệu -110 Bảng 3.37 Ví dụ câu lệnh thao tác với đồng xử lý -111 ix Hình 5.25: Tổng hợp mức ưu tiên ngoại lệ Hình 5.26: Thanh ghi ưu tiên cho chương trình hệ thống (NVIC_SHPR) 250 Hình 5.27: Thanh ghi ưu tiên cho ngắt 5.5 Liên kết mơ-đun ngồi Một kỹ quan trọng phát triển phần mềm hệ thống khả mơ-đun hóa Lập trình viên cần phân tích, tổ chức chương trình thành mơ-đun để dễ quản lý, bảo trì, kiểm thử gỡ lỗi Điều đặc biệt quan trọng phát triển hệ thống lớn, phức tạp với tham gia nhiều thành viên nhóm phát triển Nội dung phần trình bày vấn đề phân hoạch, tổ chức nhiều tệp chương trình, nhiều chương trình dự án Một dự án tổ chức thành nhiều mô-đun, mô-đun chứa tệp mã nguồn riêng; tệp mã nguồn biên dịch thành tệp tin đối tượng; tệp tin đối tượng liên kết thành tệp tin thực thi Kiến trúc chung dự án Keil uVision gồm thành phần sau [2]:  Startup_STM32F10x.S: Đây tệp tin khởi động, gồm khai báo khởi tạo ngăn xếp hệ thống, khai báo vec-tơ ngắt nội dung tối giản số ngắt, ngoại lệ phổ biến Tệp tin thực thực thi chương trình thường Keil uVision sinh tự động  Resource.lib: Đây tệp tin thư viện, chứa số chương trình vào/ra  Project.sct: Là tệp tin mô tả nhớ  Các tệp tin mã nguồn: Dự án gồm nhiều tệp tin mã nguồn; tệp tin tương ứng với mô-đun; khai báo sử dụng tồn dự án thơng qua dẫn IMPORT EXPORT 251 Ví dụ 5.28 – Dự án nhiều mô-đun mẫu Dự án đươc tổ chức gồm ba tệp tin chính: Startup_STM32F10x.S tệp khởi động, tệp main.S chứa chương trình tệp thuVien.S chứa hàm thư viện Chương trình main định nghĩa tệp tin main.s, EXPORT tồn dự án; chương trình TinhTong định nghĩa tệp tin thuVien.S EXPORT toàn dự án Trong tệp tin Startup_STM32F10x.S, để sử dụng chương trình chính, cần IMPORT main Tương tự, tệp tin main.S, để sử dụng chương trình TinhTong, cần IMPORT TinhTong Kết minh họa Hình 5.28 Hình 5.28: Tổ chức dự án thành nhiều mơ-đun 5.6 Tổng kết chương Để giúp lập trình viên hồn thiện rèn luyện kỹ lập trình hợp ngữ, nội dung chương cung cấp kiến thức nâng cao, mở rộng hợp ngữ ARM theo cách tiếp cận gắn với nội dung ngơn ngữ lập trình bậc cao Về cấu trúc liệu, phần đầu chương trình bày chất việc tổ chức nhớ cho cấu trúc mảng, xâu, ghi, danh sách, hàng đợi, ngăn xếp cài đặt cấu trúc liệu hợp ngữ Kỹ thuật cài đặt cấu trúc minh họa số ví dụ cụ thể 252 Vấn đề tổ chức, cài đặt chương trình đơn giản ngôn ngữ bậc cao việc cấp phát nhớ cho chương trình con, cấp phát tham số, biến cục bộ, tổ chức xếp trình thực thi chương trình lại phức tạp, địi hỏi lập trình viên phải có kiến thức hệ thống Các phần chương cung cấp kiến thức phân loại, tổ chức hoạt động chương trình cài đặt kỹ thuật truyền tham số, tổ chức ngăn xếp, liệu cục Các kỹ thuật minh họa số ví dụ cụ thể chương Trên sở chương trình con, kiến thức trình thực hiện, tổ chức quản lý ngắt, ngoại lệ việc mơ-đun hóa chương trình, việc liên kết chương trình với mơ-đun ngồi cung cấp phần cuối chương Câu hỏi tập 10 11 Viết chương trình tính tổng phần tử chuỗi số Viết chương trình tìm giá trị lớn nhỏ chuỗi số Viết chương trình tính trung bình cộng chuỗi số Viết chương trình tính tổng phần tử ma trận Viết chương trình đếm số phần tử dương, âm ma trận Viết chương trình tìm giá trị lớn nhất, nhỏ đường chéo chính, chéo phụ Viết chương trình tính tổng số chẵn, lẻ ma trận Viết chương trình tính tổng số chia hết cho ma trận Viết chương trình sau dạng chương trình Sử dụng ghi chung để truyền tham số chương trình chương trình Viết chương trình sau dạng chương trình Sử dụng ngăn xếp để truyền tham số chương trình chương trình a Viết chương trình tính tổng số

Ngày đăng: 29/09/2022, 12:31