Danh mục

Căn bản về lập trình ASM trên Windows

Số trang: 4      Loại file: pdf      Dung lượng: 232.96 KB      Lượt xem: 16      Lượt tải: 0    
Jamona

Phí lưu trữ: miễn phí Tải xuống file đầy đủ (4 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các ứng dụng chạy trên nền tảng hệ điều hành Windows 32-bit, nó được chạy dướichế độ bảo vệ mà chế độ này được sử dụng từ thế hệ bộ vi xử lý 80286. Nhưng bây giờ80286 không còn được sử dụng nữa. Vì vậy, chúng ta chỉ quan tâm đến các thế hệ từ bộvi xử lý 80386 trở về sau. Hệ điều hành thực thi mỗi ứng dụng trong một vùng nhớ ảođược định sẵn.
Nội dung trích xuất từ tài liệu:
Căn bản về lập trình ASM trên WindowsIczelion’s Tutorial Win32 ASM Tutorial 1 : The Basic Căn bản về lập trình ASM trên WindowsTổng quan về hệ thống Các ứng dụng chạy trên nền tảng hệ điều hành Windows 32-bit, nó được chạy dướichế độ bảo vệ mà chế độ này được sử dụng từ thế hệ bộ vi xử lý 80286. Nhưng bây giờ80286 không còn được sử dụng nữa. Vì vậy, chúng ta chỉ quan tâm đến các thế hệ từ bộvi xử lý 80386 trở về sau. Hệ điều hành thực thi mỗi ứng dụng trong một vùng nhớ ảođược định sẵn. Điều này có nghĩa là mỗi chương trình Win32 sẽ có riêng cho mình mộtvùng nhớ địa chỉ đến 4GB. Tuy nhiên điều này không có nghĩa là mỗi một chương trìnhđều được cấp 4GB vùng nhớ vật lý, mà chỉ có nghĩa là chương trình có thể định địa chỉtrên bộ nhớ trong vùng 4GB này thôi mà thôi. Hệ điều hành sẽ làm điều gì đó để chươngtrình có thể tham chiếu đến các giá trị trong vùng nhớ trên. Dĩ nhiên là chương trình sẽphải bám vào các qui tắc mà hệ điều hành đã qui định, nếu khác nó sẽ gây ra lỗiprotection. Mỗi chương trình là “độc quyền” trong vùng địa chỉ của nó. Điều này tráingược với các chương trình chạy trên nền tảng Windows 16-bit. Tất cả các chương trìnhtrong Windows 16-bit có thể “nhìn” thấy nhau. Nhưng dưới chế độ 32-bit. Điều này sẽgiảm bớt việc thay đổi một chương trình viết đè lên CODE hay DATA của một chươngtrình khác. Mô hình bộ nhớ cũng khác xa 16-bit. Dưới chế độ 32-bit chúng ta không cần quantâm đến mô hình bộ nhớ hay khái niệm đoạn (segment) trong 16-bit. Chỉ có một kiểu bộnhớ là kiểu bộ nhớ phẳng (Flat memory). Không có khái niệm “mỗi segment chứakhông quá 64KB” trong 16-bit. Bộ nhớ trong chế độ 32-bit là một vùng liên tục 4GB.Điều đó cũng có nghĩa là bạn không phải quan tâm đến những thanh ghi đoạn. Bạn có thểdùng bất kỳ thanh ghi đoạn nào để định một địa chỉ bất kỳ trên vùng nhớ. Điều này giúpích cho các lập trình viên rất nhiều. Đây cũng là những gì giúp cho việc lập trình trên hợpngữ 32-bit dễ dàng hơn lập trình trong C. Khi bạn lập trình hợp ngữ trong chế độ 32-bit, bạn phải biết vài quy tắc quantrọng. Một trong những quy tắc đó là : Hệ điều hành dùng các thanh ghi ESI, EDI, EBP, và EBX khi đang xử lý một tácvụ nào đó và nó sẽ không cho phép thay đổi giá trị của các thanh ghi đó. Vì vậy hãy nhớquy tắc đầu tiên như sau : Nếu bạn dùng một trong 4 thanh ghi đó trong các hàm có thuộctính callback, thì đừng quên phục hồi lại giá trị trước đó của các thanh ghi đó trước khitrả lại điều kiển cho hệ điều hành xử lý. Một hàm có thuộc tính callback thì cũng đồngnghĩa rằng hàm đó được gọi bởi hệ điều hành. Hiển nhiên đó là một thủ tục của Windows,gọi là Windows Procedure. Điều này không có nghĩa là bạn không được dùng một trong4 thanh ghi trên, bạn vẫn có thể sử dụng nhưng chắc rằng bạn sẽ phục hồi lại giá trị chonó trước khi bạn chuyển quyền điều khiển chương trình cho hệ điều hành.Người dịch: Benina (REA TEAM) Trang 1Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)Iczelion’s Tutorial Win32 ASM Tutorial 1 : The BasicLập trình ASM 32-bit Đây là phát họa của một chương trình hợp ngữ trên nền 32-bit. Nếu bạn khônghiểu những gì sau đây bạn đừng quá bối rối. Tôi sẽ giải thích cặn kẽ ở các bài viết sau.Chúng ta hãy cùng nhau phân tích ý nghĩa của các dòng lệnh trên!.386  Đây là một chỉ thị nhằm nói cho MASM biết rằng chương trình của bạn đang sửdụng cấu trúc bộ lệnh 80386. Bạn có thể dùng .486 hay .586 nhưng an tòan nhất hãy bámvào cấu trúc .386. Trong thực tế có hai cấu trúc gần giống nhau về hình thức cho mỗi kiểuCPU. .386/.386p, .486/.486p. Chữ “p”(viết tắc của từ privileged : có nghĩa là được ưutiên), có nghĩa là chỉ khi nào cần thiết thì chương trình của bạn được ưu tiên sử dụng mộtsố chỉ thị của bộ lệnh này. Những chỉ thị đó là những chỉ thị được dịch ngược lại bởi CPUkhi nó đang họat động chế độ bảo vệ. Phần lớn các chương trình của bạn làm việc trongchế độ Non-p vì vậy để an tòan hãy dùng phiên bản Non-p..MODEL FLAT, STDCALL.MODEL chỉ rõ kiểu bộ nhớ đang sử dụng cho chương trình. Lưu ý rằng chỉ có duy nhấtmột kiểu bộ nhớ trên nền Win32 đó là flat memory, kiểu bộ nhớ này nó không phụ thuộcvào loại ứng dụng mà bạn đang phát triển (Standard EXE, DLL, static library, console, ..).Điều này cũng nói cho chúng ta biết rằng, bạn không cần quan tâm đến kiểu bộ nhớ hoặcphân đoạn giống như chúng ta đã từng làm ngày trước trên nền 16bit.STDCALL sẽ thông báo cho MASM biết cách truyền các tham số cho các hàm là như thếnào. Quy ước truyền tham số chỉ ra thứ tự của tham số được truyền là từ trái qua phải haytừ phải qua trái và cũng chính nó cân bằng trạng thái (thứ tự) ngăn xếp khi hàm được gọi.Người dịch: Benina (REA TEAM) Trang 2Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)Iczel ...

Tài liệu được xem nhiều: