Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Nhập môn ASM

ppt 38 trang hapham 150
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Nhập môn ASM", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cau_truc_may_tinh_lap_trinh_hop_ngu_nhap_mon_asm.ppt

Nội dung text: Bài giảng Cấu trúc máy tính lập trình hợp ngữ - Nhập môn ASM

  1. Chương 5 : Nhập mơn Assembly Mục tiêu Hiểu ngơn ngữ máy và ngơn ngữ Assembly. Trình hợp dịch Assembler. Lý do nghiên cứu Assembly. Hiểu các thành phần cơ bản của Assembly Nắm được cấu trúc của 1 CT Assembly. Biết viết 1 chương trình Assembly. Biết cách dịch, liên kết và thực thi 1 chương trình Assembly. 6/25/2021 Chuong 5 Nhap mon ASM 1
  2. Giới thiệu ngơn ngữ Assembly ▪ Giúp khám phá bí mật phần cứng cũng như phần mềm máy tính. ▪ Nắm được cách phần cứng MT làm việc với hệ điều hành và hiểu được bằng cách nào 1 trình ứng dụng giao tiếp với hệ điều hành. ▪ Một MT hay một họ MT sử dụng 1 tập lệnh mã máy riêng cũng như 1 ngơn ngữ Assembly riêng. 6/25/2021 Chuong 5 Nhap mon ASM 2
  3. Assembler ▪ Một chương trình viết bằng ngơn ngữ Assembly muốn MT thực hiện được ta phải chuyển thành ngơn ngữ máy. ▪ Chương trình dùng để dịch 1 file viết bằng Assembly ➔ ngơn ngữ máy , gọi là Assembler. Cĩ 2 chương trình dịch: MASM và TASM 6/25/2021 Chuong 5 Nhap mon ASM 3
  4. Lý do nghiên cứu Assembly ▪ Đĩ là cách tốt nhất để học phần cứng MT và hệ điều hành. ▪ Vì các tiện ích của nĩ . ▪ Cĩ thể nhúng các chương trình con viết bằng ASM vào trong cácchương trình viết bằng ngơn ngữ cấp cao . 6/25/2021 Chuong 5 Nhap mon ASM 4
  5. Lệnh máy ▪ Là 1 chuổi nhị phân cĩ ý nghĩa đặc biệt – nĩ ra lệnh cho CPU thực hiện tác vụ. ▪ Tác vụ đĩ cĩ thể là : di chuyển 1 số từ vị trí nhớ này sang vị trí nhớ khác. Cộng 2 số hay so sánh 2 số. 0 0 0 0 0 1 0 0 Add a number to the AL register 1 0 0 0 0 1 0 1 Add a number to a variable 1 0 1 0 0 0 1 1 Move the AX reg to another reg 6/25/2021 Chuong 5 Nhap mon ASM 5
  6. Lệnh máy (cont) ▪ Tập lệnh máy được định nghĩa trước, khi CPU được sản xuất và nĩ đặc trưng cho kiểu CPU . ▪ Ex : B5 05 là 1 lệnh máy viết dạng số hex, dài 2 byte. ▪ Byte đầu B5 gọi là Opcode ▪ Byte sau 05 gọi là tốn hạng Operand Ýù nghĩa của lệnh B5 05 : chép giá trị 5 vào reg AL 6/25/2021 Chuong 5 Nhap mon ASM 6
  7. Cách viết 1 chương trình Assembly Soạn CT Dùng 1 phần mềm soạn thảo VB bất kỳ để soan TenCT.ASM CT Assembly như : NotePad, NC, màn hình C, Pascal CT cĩ phần mở rộng là .ASM Dịch CT dùng MASM để dịch chương trình nguồn .ASM ➔ File Object. Liên kết CT dùng LINK để liên kết Object tạo tập tin thực hiện .EXE Chạy CT Gỏ tên tập tin thực hiện .EXE từ dấu nhắc DOS để chạy 6/25/2021 Chuong 5 Nhap mon ASM 7
  8. Dịch và nối kết chương trình MASM.EXE TenCT .ASM TenCT .OBJ LINK.EXE TenCT .MAP TenCT .LIST TenCT .CRF TenCT .EXE 6/25/2021 Chuong 5 Nhap mon ASM 8
  9. Một chương trình minh hoạ DOSSEG MOV DX, OFFSET MES .MODEL SMALL MOV AH, 9 .STACK 100h .DATA INT 21 MES DB “HELLO WORD”,’$’ MOV AH,4CH .CODE INT 21 MAIN PROC MOV AX, @DATA MAIN ENDP MOV DS, AX END MAIN 6/25/2021 Chuong 5 Nhap mon ASM 9
  10. Các file được tạo ▪ Sau khi dịch thành cơng file nguồn.ASM, ta cĩ các file : ▪ File listing : file VB , các dịng cĩ đánh số thứ tự mã. ▪ File Cross reference ▪ File Map ▪ File Obj ▪ File EXE 6/25/2021 Chuong 5 Nhap mon ASM 10
  11. File Listing ▪ Microsoft (R) Macro Assembler Version 5.10 10/11/4 ▪ Page 1-1 ▪ 1 DOSSEG ▪ 2 .MODEL SMALL ▪ 3 .STACK 100H ▪ 4 .DATA ▪ 5 0000 48 45 4C 4C 4F 20 MES DB "HELLO WORD$" ▪ 6 57 4F 52 44 24 ▪ 7 .CODE ▪ 8 0000 MAIN PROC ▪ 9 0000 B8 R MOV AX,@DATA ▪ 10 0003 8E D8 MOV DS, AX ▪ 11 0005 B4 09 MOV AH,9 ▪ 12 0007 BA 0000 R MOV DX, OFFSET MES ▪ 13 000A CD 21 INT 21H ▪ 14 000C B4 4C MOV AH,4CH ▪ 15 000E CD 21 INT 21H ▪ 16 0010 MAIN ENDP ▪ 17 END MAIN ▪ ♀◘Microsoft (R) Macro Assembler Version 5.10 10/11/4 6/25/2021 Chuong 5 Nhap mon ASM 11
  12. Map File ▪ Start Stop Length Name Class ▪ 00000H 0001FH 00020H _TEXT CODE ▪ 00020H 0002AH 0000BH _DATA DATA ▪ 00030H 0012FH 00100H STACK STACK ▪ Origin Group ▪ 0002:0 DGROUP ▪ Program entry point at 0000:0010 6/25/2021 Chuong 5 Nhap mon ASM 12
  13. Giải thích ▪ .model small : dùng kiểu cấu trúc <= 64 K bộ nhớ cho mã , 64K cho dữ liệu. ▪ .Stack 100h : dành 256 bytes cho stack của chương trình . ▪ .Data : đánh dấu phân đoạn dữ liệu ở đĩ các biến được lưu trữ. ▪ .Code : đánh dấu phân đoạn mã chứa các lệnh phải thi hành. ▪ Proc : khai báo đầu 1 thủ tục, trong Ex này ta chỉ cĩ 1 thủ tục Main. 6/25/2021 Chuong 5 Nhap mon ASM 13
  14. Giải thích (cont) ▪ Chép địa chỉ đoạn dữ liệu vào thanh ghi AX. ▪ Sau đĩ chép vào thanh ghi DS ▪ Gọi hàm số 9 của Int 21h của Dos để xuất chuổi ký tự ra màn hình. ▪ Thốt khỏi CT . ▪ Main endp : đánh dấu kết thúc thủ tục ▪ End main : chấm dứt chương trình 6/25/2021 Chuong 5 Nhap mon ASM 14
  15. Cấu trúc của 1 CT ASM DOSSEG .MODEL kiểu bộ nhớ .STACK kích thước .DATA khai báo biến, hằng .CODE MAIN PROC MOV AX, @DATA MOV DS,AX các lệnh của chương trình chính MOV AH,4CH ; Thoát khỏi chương trình INT 21H MAIN ENDP các chương trình con khác nếu có END MAIN 6/25/2021 Chuong 5 Nhap mon ASM 15
  16. Các chế độ bộ nhớ Kiểu Mô tả SMALL Mã lệnh trong 1 đoạn.Dữ liệu trong 1 đoạn MEDIUM Mã lệnh nhiều hơn 1 đoạn.Dữ liệu trong 1 đoạn COMPACT Mã lệnh trong 1 đoạn. Dữ liệu nhiều hơn 1 đoạn LARGE Mã lệnh nhiều hơn 1 đoạn Dữ liệu nhiều hơn 1 đoạn,không có mảng nào > 64K HUGE Mã lệnh nhiều hơn 1 đoạn Dữ liệu nhiều hơn 1 đoạn, mảng có thể > 64K 6/25/2021 Chuong 5 Nhap mon ASM 16
  17. Dạng lệnh Chú thích ▪ [name] [operator] [ operand] [comment] Mã lệnh dạng Nhãn, tên biến Register, ơ nhớ gợi nhớ Tên thủ tục Trị, hằng Ex : MOV CX , 0 Mỗi dịng chỉ chứa 1 lệnh và mỗi lệnh phải LAP : MOV CX, 4 nằm trên 1 dịng LIST DB 1,2,3,4 6/25/2021 Chuong 5 Nhap mon ASM 17
  18. INT 21H ▪ Lệnh INT số hiệu ngắt được dùng để gọi chương trình ngắt của DOS và BIOS. Ngắt 21h Muốn sử dụng hàm nào của INT 21h ta đặt function_number vào thanh ghi AH, sau đĩ gọi INT 21h Function_number chức năng 1 nhập 1 ký tự từ bàn phím 2 Xuất 1 ký tự ra mà hình. 9 Xuất 1 chuổi ký tự ra màn hình 6/25/2021 Chuong 5 Nhap mon ASM 18
  19. INT 21h (cont) Hàm 1 : Nhập 1 ký tự Input : AH =1 Output : AL = mã ASCCI của phím ấn = 0 nếu 1 phím điều khiểân được ấn Hàm 2 : Hiển thị 1 ký tự ra màn hình Input : AH =2 DL = Mã ASCII của ký tự hiển thị hay ký tự điều khiển 6/25/2021 Chuong 5 Nhap mon ASM 19
  20. Thí dụ minh họa DOSSEG MOV AH,2 .MODEL SMALL MOV DL, 0DH .STACK 100H INT 21H .CODE MOV DL , 0AH MAIN PROC INT 21H MOV AH , 2 MOV DL , BL MOV DL , ‘?’ INT 21H INT 21H MOV AX , 4C00H MOV AH ,1 INT 21H INT 21H MAIN ENDP MOV BL,AL END MAIN ? N KẾT QUẢ N 6/25/2021 Chuong 5 Nhap mon ASM 20
  21. Thí dụ minh họa các hàm của INT 21 ▪ In dấu ? ra màn hình : MOV AH, 2 MOV DL, ‘?’ INT 21H ▪ Nhập 1 ký tự từ bàn phím : MOV AH, 1 INT 21H 6/25/2021 Chuong 5 Nhap mon ASM 21
  22. Biến ▪ Cú pháp : [tên biến] DB | DW | [trị khởi tạo] ▪ Là một tên ký hiệu dành riêng cho 1 vị trí trong bộ nhớ nơi lưu trữ dữ liệu. ▪ Offset của biến là khoảng cách từ đầu phân đoạn đến biến đĩ. ▪ Ex : khai báo 1 danh sách aList ở địa chỉ 100 với nội dung sau : .data aList db “ABCD” 6/25/2021 Chuong 5 Nhap mon ASM 22
  23. Biến (cont) Lúc đĩ : Offset Biến 0000 A 0001 B 0002 C 0003 D 6/25/2021 Chuong 5 Nhap mon ASM 23
  24. Khai báo biến Từ gợi nhớ Mô tả Số byte Thuộc tính DB Định nghĩa 1 Byte byte DW Từ 2 Word DD Từ kép 4 Doubleword DQ Từ tứ 8 Quardword DT 10 bytes 10 tenbyte 6/25/2021 Chuong 5 Nhap mon ASM 24
  25. Minh họa khai báo biến KIỂU BYTE ▪ Char db ‘A’ ▪ Num db 41h ▪ Mes db “Hello Word”,’$’ ▪ Array_1 db 10, 32, 41h, 00100101b ▪ Array_2 db 2,3,4,6,9 ▪ Myvar db ? ; biến khơng khởi tạo ▪ Btable db 1,2,3,4,5 db 6,7,8,9,10 6/25/2021 Chuong 5 Nhap mon ASM 25
  26. Minh họa khai báo biến KIỂU WORD DW 3 DUP (?) DW 1000h, ‘AB’, 1024 DW ? DW 5 DUP (1000h) DW 256*2 DẠNG LƯU TRỮ DỮ LIỆU KIỂU WORD : Trình hợp dịch đảo ngược các byte trong 1 giá trị kiểu WORD khi lưu trữ trong bộ nhớ : Byte thấp lưu ở địa chỉ thấp Byte cao lưu ở địa chỉ cao 6/25/2021 Chuong 5 Nhap mon ASM 26
  27. Minh họa khai báo biến KIỂU WORD Ex : 1234h được lưu trữ trong bộ nhớ như sau : ĐỊA CHỈ 1000h 1001h BỘ NHỚ 34 12 DỮ LIỆU 1234H 6/25/2021 Chuong 5 Nhap mon ASM 27
  28. Tốn tử DUP ▪ Lặp lại 1 hay nhiều giá trị khởi tạo. ▪ Ex : Bmem DB 50 Dup(?) ; khai báo vùng nhớ gồm 50 bytes. db 4 dup (“ABC”) ;12 bytes “ABCABCABCABC” db 4096 dup (0) ; Vùng đệm 4096 bytes tất cả bằng 0 6/25/2021 Chuong 5 Nhap mon ASM 28
  29. Khởi tạo biến ▪ Lưu ý : Khi khởi tạo trị là 1 số hex thì giá trị số luơn luơn bắt đầu bằng 1 ký số từ 0 đến 9. Nếu ký số bắt đầu là A F thì phải thêm số 0 ở đầu. ▪ Ex : Db A6H ; sai Db 0A6h ; đúng 6/25/2021 Chuong 5 Nhap mon ASM 29
  30. Tốn tử DUP (cont) Amtrix dw 3 dup (4 dup (0) ) Tạo 1 ma trận 3x4 Atable db 4 dup (3 dup (0), 2 dup (‘X’)) 6/25/2021 Chuong 5 Nhap mon ASM 30
  31. Tốn tử DUP ▪ Chỉ xuất hiện sau 1 chỉ thị DB hay DW ▪ Với DUP ta cĩ thể lặp lại 1 hay nhiều trị cho vùng nhớ. ▪ Rất cĩ ích khi làm việc với mảng hay chuổi. 6/25/2021 Chuong 5 Nhap mon ASM 31
  32. Tốn tử ? ▪ Muốn khai báo 1 biến hay 1 mảng mà khơng cần khởi tạo trị ta dùng tốn tử ? Ex : MEM8 DB ? ; khai báo 1 byte trống trong bộ nhớ MEM16 DW ? ; khai báo 2 byte trống trong bộ nhớ BMEM DB 50 DUP(?) ; khai báo 50 byte trống trong bộ nhớ 6/25/2021 Chuong 5 Nhap mon ASM 32
  33. Chương trình dạng .COM CODE SEGMENT ASSUME CS:CODE , DS:CODE, SS:CODE ; tồn bộ chương trình chỉ nằm trong 1 segment Org 100h ;; chỉ thị nạp thanh ghi lệnh IP=100h khi CT được nạp Main proc mov ax,bx . Main endp Count db 10 Code ends End main 6/25/2021 Chuong 5 Nhap mon ASM 33
  34. SUMMARY ▪ chương trình Assembly gồm nhiều dịng lệnh. ▪ Mỗi lệnh phải viết trên 1 dịng ▪ Lệnh cĩ thể gồm [tên] [tốn tử] [tốn hạng] ▪ Các ký tự phải đặt trong dấu ‘ ‘ hay “ “ ▪ DB dùng để định nghĩa biến kiểu BYTE ▪ DW dùng để định nghĩa biến kiểu WORD. ▪ Cĩ 2 cách xuất nhập dữ liệu : liên lạc trực tiếp qua cổng hay dùng các phục vụ ngắt của DOS và BIOS. 6/25/2021 Chuong 5 Nhap mon ASM 34
  35. Câu hỏi ơn tập ▪ Trong mã máy dưới đây được lấy từ tập tin liệt kê, hãy nêu ý nghĩa của R 5B 0021 R ADD BX, VAL1 ▪ Nêu ý nghĩa của ký hiệu địa chỉ của biến dưới đây trong 1 tập tin liệt kê. 5B 0021 R ADD BX, VAL1 6/25/2021 Chuong 5 Nhap mon ASM 35
  36. Câu hỏi ơn tập ▪ Chương trình sau cĩ lỗi. Hãy tìm câu lệnh nào gây ra lỗi, giải thích và sửa lại cho đúng. .MODEL SMALL .STACK 100H .DATA MOV AX, VALUE1 MOV BX, VALUE2 INC BX, 1 INT 21H MOV 4C00H, AX MAIN ENDP VALUE1 0AH VALUE2 1000H END MAIN 6/25/2021 Chuong 5 Nhap mon ASM 36
  37. ▪ Chương trình sau cĩ lỗi. Hãy tìm câu lệnh nào gây ra lỗi, giải thích và sửa lại cho đúng. .MODEL SMALL Câu hỏi ơn tập .STACK 100H .CODE MAIN PROC MOV AX, @DATA MOV DS , AX MOV AX, VALUE1 MOV AX, VALUE2 MOV AX, 4C00H INT 21H MAIN ENDP VALUE1 DB 0AH VALUE2 DB 1000H 6/25/2021END MAIN Chuong 5 Nhap mon ASM 37
  38. Bài tập lập trình Bài 1 : Viết chương trình nhập 1 ký tự thường , in ra ký tự hoa tương ứng. Bài 2 : Viết chương trình hốn vị 2 biến kiểu byte được gán sẵn trị. Bài 3 : Viết chương trình tạo 1 array cĩ các phần tử 31h,32h,33h,34h. Nạp từng phần tử vào thanh ghi DL và xuất nĩ ra màn hình. Giải thích tại sao kết xuất trên màn hình là 1234. 6/25/2021 Chuong 5 Nhap mon ASM 38