Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
413,16 KB
Nội dung
ASMTàiliệu thu thập copy từ diễn đàn.(hungvu11) Bài đầu tiên: Cài đặt ASM Đầu tiên, tải file cài đặt bên Sử dụng chương trình giải nén để giải nén Khi giải nén khuyến cáo bạn giải nén vào thư mục gốc C D… (để cài đặt việc đơn giản) Sau giải nén, bạn vào thư mục vừa giải nén (ví dụ C:\TASM) Click đúp chuột vào file INSTALL.EXE Windows cửa sổ cài đặt Bài đầu tiên: Cài đặt ASM Đầu tiên, tải file cài đặt bên Sử dụng chương trình giải nén để giải nén (tải chương trình giải nén đây) Khi giải nén khuyến cáo bạn giải nén vào thư mục gốc C D… (để cài đặt việc đơn giản) Sau giải nén, bạn vào thư mục vừa giải nén (ví dụ C:\TASM) Click đúp chuột vào file INSTALL.EXE Windows cửa sổ cài đặt Bạn làm theo hình vẽ(gõ C D hay ổ đĩa bạn muốn cài đặt TASM) ấn Enter Tiếp tục ấn Enter Ấn Enter đến lúc hoàn thành :-) Link download: http://www.mediafire.com/?tjw322pbbwr Bài 2: Hợp ngữ - Assembly Nội dung môn học: Phần I: Ngôn ngữ ASM cách lập trình Phần II: Liên kết ngôn ngữ bậc cao với ASM Phần III: Lập trình hệ thống Phần I Mở đầu - ASM ngôn ngữ lập trình bậc thấp - Ưu điểm: * Viết chương trình chạy nhanh * Chiếm vùng nhớ - Nhược điểm: * Khó viết * Khó Debug * Non Portability (không có khả chạy nhiều hệ điều hành khác nhau) - Ứng dụng: * Viết lõi (Kernel) HĐH * Viết Virus * Viết trò chơi * Các chương trình đo, điều khiển hệ thống máy móc công nghiệp Cài đặt chương trình Các bước thực chương trình ASM PC * Sử dụng chương trình soạn thảo (NC, C, NotePad…) lưu lại dạng tệp tin ASM * Dịch từ tệp tin ASM sang tên tin OBJ * Chuyển từ tệp tin OBJ sang tệp tin thực thi EXE COM * Chạy chương trình Hỗ trợ hệ thống cho lập trình ASM *Nói qua thành phần hệ thống vi tính: Một hệ thống máy vi tính điển hình bao gồm: khối hệ thống (System unit), bàn phím (Keyboard), hình (Display Screen) ổ đĩa (Disk drives) Khối hệ thống xem “máy tính” tập trung bảng vi mạch máy vi tính Bàn phím, hình, ổ đĩa gọi thiết bị vào (I/O devices) hay thiết bị ngoại vi (Peripheral devices) Về mặt chức năng, vi mạch máy tính gồm phần: + Đơn vị xử lý trung tâm (CPU) + Bộ nhớ + Các mạch vào - Bộ nhớ: thông tin xử lý máy tính lưu trữ nhớ nó, phần tử vi mạch nhớ chứa bit liệu Các vi mạch tổ chức thành nhóm chứa bit liệu Mỗi chuỗi bit gọi byte Mỗi byte xác định số gọi địa (address) - Vị trí bit: Các vị trí đánh số từ phải qua trái, Trong từ (word) byte, bit từ đến tạo thành byte thấp bit từ đến 15 tạo nên byte cao Để chứa từ nhớ, byte thấp ghi vào byte nhớ với địa thấp, byte cao ghi vào byte nhớ với địa cao Vị trí bit byte: Vị trí bit từ byte: Thao tác với nhớ: Đọc nội dung ô nhớ ghi liệu vào ô nhớ Khi đọc, VXL lấy liệu nội dung nguyên thủy không thay đổi Khi ghi liệu, liệu viết vào trở thành nội dung ô nhớ liệu nguyên thủy 4.1 Các ghi Là vùng nhớ đặc biệt (dạng RAM) nằm CPU Mỗi ghi có tên húy (kí hiệu) việc thâm nhập vào chúng thông qua tên húy Phân loại Máy tính 16 bits: 14 ghi Máy tính 32 bits: 16 ghi Máy tính 16 bits: Thanh ghi cờ 16 bits C: Carry P: Parity A: Auxiliary Z: Zero S: Sign T: Trap I: Interrupt D: Direction O: Overflow Lập trình ASM hay lấy trạng thái bit cờ làm điều kiện cho lệnh nhảy có điều kiện Thanh ghi đa 16 bits Thanh ghi AX (accumulator register): ghi sử dụng nhiều lệnh số học, logic chuyển liệu chúng tạo mã máy ngắn Thanh ghi BX (Base register): đồng thời đóng vai trò ghi địa Thanh ghi CX (Count register): Việc xây dựng chương trình lặp thực dễ dàng cách sử dụng ghi CX, CX đóng vai trò đếm số vòng lặp Thanh ghi DX (Data register): sử dụng thao tác nhân chia, sử dụng thao tác vào Thanh ghi SP (Stack pointer): sử dụng kết hợp với ghi SS để truy cập đoạn ngăn xếp Thanh ghi DI (Destination Index): thực chức tương tự ghi SI Có số lệnh gọi thao tác chuỗi sử dụng DI để truy cập đến ô nhớ định địa đoạn SS Thanh ghi BP (Base pointer): sử dụng để truy cập liệu ngăn xếp Khác với SP, BP sử dụng để truy cập liệu đoạn khác Thanh ghi SP (Source Index): sử dụng để trỏ tới ô nhớ đoạn liệu định địa ghi DS Bằng cách tăng SI dễ dàng truy cập đến ô nhớ liên tiếp Thanh ghi trỏ lệnh IP|PC: Cho biết phần địa offset vùng nhớ RAM chứa mã máy chương trình Thanh ghi phân đoạn 16 bits Cho biết phần địa segment vùng nhớ RAM CS: chứa mã máy DS, ES: chứa liệu SS: chứa ngăn xếp Với máy tính 32 bits: có 16 ghi Trong ghi cờ, đa năng, trỏ lệnh ghi 32 bits với kí hiệu thêm chữ R phía trước Các ghi segment 16 bits, có thêm ghi FS, GS để hỗ trợ cho liệu Bài 3: Chương trình Chương trình đơn giản, lên xâu ký tự quen thuộc cho người lập trình “Hello World!” Dưới đoạn code chương trình: Code: .model small stack data message db “Hello world!!!”, “$” code main proc mov ax,seg message mov ds,ax lea dx,message mov ah,09 int 21h mov ax,4c00h int 21h main endp end main Sử dụng trình soạn thảo văn bạncó gõ đoạn code chương trình vào lưu thành tệp tin FirstApp.asm Tải tệp tin source: FirstApp.ASM Sử dụng tệp tin TASM.EXE TLINK.EXE Turbo Assembly để biên dịch chương trình thành FirstApp.exe Nào, sâu vào nghiên cứu đoạn code .model small(Chú ý có dấu chấm ” ” đầu dòng): lệnh điều khiển xác định mô hình nhớ cho chương trình ASM Ở ta sử dụng small có nghĩa chương trình không cần nhiều nhớ .stack: lệnh thông báo cho Assembly biết bắt đầu sử dụng “stack” segment Stack dùng để lưu trữ liệu tạm thời, không sử dụng chương trình biên dịch chương trình cần phải dùng đến cấu trúc stack lời khuyên bạn nên khai báo Stack trường hợp .data : đánh dấu điểm khởi đầu vùng nhớ chứa số liệu (data segment) Chúng ta phải đặt việc khai báo biến nhớ sử dụng .code : đánh dấu điểm khởi đầu vùng nhớ chứa mã lệnh (code segment) main proc : Các mã lệnh phải đặt thủ tục giống ngôn ngữ C hay ngôn ngữ lập trình khác Dòng lệnh cho biết thủ tục proc gọi main endp cho biết thủ tục kết thúc Một thủ tục BẮT BUỘC phải có khởi đầu kết thúc end main : cho biết chương trình kết thúc message db “xxxx” : DB (Define Byte) khai báo biến có độ dài Byte Byte chứa thông tin dấu nháy kép (”") “Message” tên biến mov ax, seg message : đưa giá trị biến message vào ghi AX mov ds,ax : đưa địa (phần segment) biến nhớ vào ghi DS lea dx, message : đưa địa (phần Offset) biến nhớ message vào ghi DX Như có địa biến message DS X mov ah, 09 int 21h : ngắt 21h, đưa chuỗi ký tự hình mov ax, 4c00h : int 21h : Trở DOS Hi vọng bạn hiểu qua cấu trúc chương trình ASM Assembly Fundemental ! Cơ assembly Bài viết có tham khảo tàiliệu Intel Khi tìm hiểu Assemly, hẳn mệt nhọc Tạicó nhiều người nói asm khó.Thực không khó mà đơn giản.vì đơn giản mà ta suy nghĩ cao siêu nên ta không hiểu nó.Cách đơn giản học asm suy nghĩ đơn giản -Keep your mind simple ! -Muốn tìm hiểu asm trước hết cần phải tìm hiểu 80386 -Bắt đầu từ CPU 386 CPU thiết bị thực hàng loạt chuỗi lệnh.Những lệnh mà CPU thực đơn giản.Những lệnh cần ghi làm toán hạngcủa 386 có ghi đa dụng: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP Tất ghi đa dụng dài 32 bit EAX,EBX,ECX,EDX chia đoạn 16,và bit chẳng hạn : 31 + + EAX + | AH | AL + + + AX Trong ghi EAX chia thành hai đoạn : Thanh ghi đoạn: CS,SS,DS,ES,FS,GS dài 16 bit Thanh ghi floatting point: ghi từ ST0->ST7 dài 80 bit Ngoài CPU sau có thêm ghi mm0->mm7 dài 64 bit MMX ghi xmm0 >xmm7 dài 128 bit SSE Những ghi chủ yếu dùng để move liệu vòng quanh vi xử lí Là toán hạng cho instruction Các ghi đa dụng giống biến C lưu số nguyên Nó có thề lưu địa giống trỏ Các ghi floating point dùng để thực phép toán dấu chấm động Thanh ghi EFLAGS EIP.Tác dụng ghi bàn đến sau -Chế độ thực (real mode ) TRong chế độ ,bộ nhớ bị giới hạn MB nhớ (2^20 bytes) địa nhớ từ 00000 ->FFFFF.Địa nhớ cần 20 bit mà 8086 ghi dài đến 20 bit giải cách sử dụng hai ghi để diễn đạt 20 bit.Thanh ghi thứ gọi selector,thanh ghi thứ gọi offset.Nên địa vật lý xác định : selector*16+offset Nhân 16 số hex dễ thêm số bên phải selector Giá trị selector thường nằm ghi CS Một selector đánh địa cho 64KB nhớ.Diều xảy chương trình cần 64KB nhớ.Giá trị CS sử suốt chương trình.Chương trình nhớ bị cắt nhiều đoạn (segment) nhỏ 64KB.Khi chương trình chạy giá trị CS thay đổi.Điều gây khó chịu Mỗ i byte nhớ thực địa nhất.Ví dụ địa vật lý 04808 có ba cách diễn đạt 047C:0048 ,047E:0028,047B:0058.Diều gây phức tạp so sánh địa Chế độ bảo vệ 16bit 286(protect mode) Trong chế độ bảo vệ 286 ,những ghi đoạn không dùng để định địa real mode nữa.Trong real mode dùng làm định địa vật lý theo đoạn.Trong protect mode,nó trỏ trỏ đến desciptor table.Ở hai chế độ,chương trình bị chia thành nhiều đoạn.Tuy nhiên protect mode đoạn không cố định nhớ vật lý Thực tế lúc nhớ Nó có chế nhớ ảo.Nghĩa giữ phần nhớ chương trình lưu đĩa cứng ,phần lại nhớ RAM để chạy chương trình protect mode,mỗi đoạn có descriptor chứa thông tin nó.Những thông tin gồm :nó diện nhớ không,access permission,địa vật lý nó.Điều làm cho chương trình ghi đè lên nhớ bảo vệ vùng nhớ hđh.Điều khác so với CPU đời trước Nhưng nhược điểm lớn.Offset 16 bit -32 bit protect mode -Có hai điểm khác biệt lớn 386 32bit protect mode 286 16 bit protect mode: 1.Offset mở rộng 32 bit.Vì đoạn mở rộng lên 4GB Đoạn chia thành 4K đơn vị gọi page.Bộ nhớ ảo hoạt động với trang thay đoạn.Điềy có nghĩa phần đoạn nhớ nằm ổ cứng.TRong 286 ,toàn đoạn phải nằm nhớ ổ cứng paging.Mà điều vô lý 386 protect mode Hiện đa số hệ điều hành điều hành chạy protect mode Linux Window chạy protect mode Ngôn ngữ Assembly -Chương trình Assembly(Asm) lưu dạng text cao ngôn ngữ máy.Mỗi lệnh (instruction) lệnh máy(machine instruction) Ví dụ : add eax,ebx lệnh có opcode 03 ,clocks = Từ "add" mnemonic cho lệnh máy Câu lệnh asmcó cú pháp chung chung sau: mnemonic toán_hạn_1,toán_hạn_2 có lệnh 1-2-3 toán hạn toán hạn hết Trình biên dịch convert mã text asm > mã máy (machine code).Những ngôn ngữ lập trình bậc cao phức tạp biên dịch lệnh không tương đương với lệnh mã máy Toán hạn ghi (register) , địa ô nhớ(memory), giá trị trực tiếp(immediate) giá trị bao hàm lệnh Ví dụ : inc eax Toán hạng ghi eax,giá trị bao hàm lệnh lệnh cộng vào eax Đối với Intel syntax : câu lệnh mov có cú pháp : mov dest , src liệu src copy vào dest Sơ đồ : src >dest - Chương trình ASM đơn giản Chương trình asm thực việc cộng hai số -simple.asm -%include "asm_io.inc" segment data l1 db "So thu nhat : ",0 l2 db "So thu hai : ",0 l3 db "Tong hai so la :",0 segment bss temp resd 10 segment text global _asm_main asm_main: enter 0,0 pusha mov eax, l1 call print_string call read_int mov [temp], eax mov eax, l2 call print_string call read_int add eax,[temp] mov ebx,eax mov eax, l3 call print_string mov eax,ebx call print_int popa leave ret end -biên dịch nasm -f coff simple.asm 11 ... với nhớ: Đọc nội dung ô nhớ ghi liệu vào ô nhớ Khi đọc, VXL lấy liệu nội dung nguyên thủy không thay đổi Khi ghi liệu, liệu viết vào trở thành nội dung ô nhớ liệu nguyên thủy 4.1 Các ghi Là vùng... hiểu qua cấu trúc chương trình ASM Assembly Fundemental ! Cơ assembly Bài viết có tham khảo tài liệu Intel Khi tìm hiểu Assemly, hẳn mệt nhọc Tại có nhiều người nói asm khó.Thực không khó mà đơn... : mov dest , src liệu src copy vào dest Sơ đồ : src >dest - Chương trình ASM đơn giản Chương trình asm thực việc cộng hai số -simple .asm -%include "asm_ io.inc" segment