Ktl-icon-tai-lieu

LẬP TRÌNH HỢP NGỮ X86

Được đăng lên bởi quang-nghia-le
Số trang: 10 trang   |   Lượt xem: 6251 lần   |   Lượt tải: 7 lần
HDTH Kiến trúc máy tính & Hợp Ngữ

Bộ môn MMTVT - HCMUS

LẬP TRÌNH HỢP NGỮ X86
Mục đích

 Làm quen với ngôn ngữ lập trình Assembly trên kiến trúc x86
 Biết cách viết, dịch, chạy và chẩn lỗi (debug) một vài chương trình đơn giản

Tóm tắt lý thuyết
Hợp ngữ (assembly) là ngôn ngữ bậc thấp, giúp cho người lập trình không phải ghi nhớ mã
máy (opcode) mà sử dụng các từ ngữ gợi nhớ (pseudo-code) gần với ngôn ngữ tự nhiên để miêu
tả công việc cần thực hiện. Tuy vậy, assembly rất gần với ngôn ngữ máy, đòi hỏi người lập trình
phải hiểu biết tương đối đầy đủ về cấu trúc phần cứng máy tính.
Với mỗi kiểu kiến trúc của bộ vi xử lý, có một bộ lệnh riêng, do đó, có một ngôn ngữ
assembly riêng cho nó. Ở đây, chúng ta nghiên cứu assembly cho các bộ vi xử lý Intel thuộc họ
x86. Các chương trình sẽ được viết cho chế độ thực (real mode) trong DOS và được biên dịch
bằng Netwide Assembler.

Cấu trúc của một chương trình hợp ngữ
section

.data
<Khai báo dữ liệu (kiểu tĩnh)>
section .bss
<Khai báo dữ liệu (kiểu động)>
section .code
_mainCRTStartup:
; Nhãn bắt đầu chương trình, có thể thay đổi
; tùy thuộc vào loại project tạo trên Visual C
<Các lệnh thực thi>

Ví dụ: Chương trình sau in ra màn hình dòng chữ “Hello World”
global
extern
extern
extern
section
hello_world
bytes_written
output_handle

_mainCRTStartup
_ExitProcess@4
_GetStdHandle@4
_WriteFile@20
.data
db
dd
dd

section .code
_mainCRTStartup:
push
call
mov
push
push
push
push
push
call

; Hàm chính của chương trình
; Gọi hàm thoát của Windows API
; Gọi hàm xử lý của Windows API
; Gọi hàm xuất của Windows API

'Hello World', 10, 0
0
0

-11
_GetStdHandle@4
[output_handle], eax

0
dword bytes_written
13
dword hello_world
dword [output_handle]
_WriteFile@20

; Khai báo chuỗi hello_world
; Trả về chuỗi word 32-bit từ WriteFile
; The standard output handle

; Mã thực hiện xuất
; Gọi Hàm GetStdHandle của Windows API
; Lưu handle để xuất màn hình

; Chiều dài của chuỗi
; Lấy địa chỉ của chuỗi
; Gọi Handle để xuất màn hình
; Xuất chuỗi ra màn hình

Bộ môn Mạng máy tính & Viễn thông – Khoa CNTT – Trường ĐH KHTN TPHCM

-1-

HDTH Kiến trúc máy tính & Hợp Ngữ
push
call

Bộ môn MMTVT - HCMUS

0
_ExitProcess@4

; Gọi hàm ExitProcess thoát chương trình

Lưu ý:
- Mọi chương trình đều phải có đoạn code thoát khỏi chương trình, nếu không chương
trình sẽ không dừng khi hết chương trình của mình.

Khai báo biến trong hợp ngữ
Cú pháp trong .data:
<tên biến>

d<Kiểu DL>

<giá trị khởi tạo>

Cú pháp trong .bss:
<tên biến>

res<Kiểu DL> <giá t...
HDTH Kiến trúc máy tính & Hợp Ngữ Bộ môn MMTVT - HCMUS
LẬP TRÌNH HỢP NGỮ X86
Mục đích
Làm quen với ngôn ngữ lập trình Assembly trên kiến trúc x86
Biết cách viết, dịch, chạy và chẩn lỗi (debug) một vài chương trình đơn giản
Tóm tắt lý thuyết
Hợp ngữ (assembly) ngôn ngữ bậc thấp, giúp cho người lập trình không phải ghi nhớ
máy (opcode) sử dụng các từ ngữ gợi nhớ (pseudo-code) gần với ngôn ngữ tự nhiên để miêu
tả công việc cần thực hiện. Tuy vậy, assembly rất gần với ngôn ngữ máy, đòi hỏi người lập trình
phải hiểu biết tương đối đầy đủ về cấu trúc phần cứng máy tính.
Với mỗi kiểu kiến trúc của bộ vi xử lý, một bộ lệnh riêng, do đó, một ngôn ngữ
assembly riêng cho nó. đây, chúng ta nghiên cứu assembl y cho các bộ vi x l ý Intel thuộc họ
x86. Các chương trình sẽ được viết cho chế độ thực (real mode) trong DOS được biên dịch
bằng Netwide Assembler.
Cấu trúc của một chương trình hợp ngữ
section .data
<Khai báo dữ liệu (kiểu tĩnh)>
section .bss
<Khai báo dữ liệu (kiểu động)>
section .code
_mainCRTStartup: ; Nhãn bắt đầu chương trình, có thể thay đổi
; tùy thuộc vào loại project tạo trên Visual C
<Các lệnh thực thi>
Ví dụ: Chương trình sau in ra màn hình dòng chữ “Hello World”
global _mainCRTStartup ; Hàm chính của chương trình
extern _ExitProcess@4 ; Gọi hàm thoát của Windows API
extern _GetStdHandle@4 ; Gọi hàm xử lý của Windows API
extern _WriteFile@20 ; Gọi hàm xuất của Windows API
section .data
hello_world db 'Hello World', 10, 0 ; Khai báo chuỗi hello_world
bytes_written dd 0 ; Trả về chuỗi word 32-bit từ WriteFile
output_handle dd 0 ; The standard output handle
section .code
_mainCRTStartup:
push -11 ; Mã thực hiện xuất
call _GetStdHandle@4 ; Gọi Hàm GetStdHandle của Windows API
mov [output_handle], eax ; Lưu handle để xuất màn hình
push 0
push dword bytes_written
push 13 ; Chiều dài của chuỗi
push dword hello_world ; Lấy địa chỉ của chuỗi
push dword [output_handle] ; Gọi Handle để xuất màn hình
call _WriteFile@20 ; Xuất chuỗi ra màn hình
Bộ môn Mạng máy tính & Viễn thông – Khoa CNTT – Trường ĐH KHTN TPHCM -1-
LẬP TRÌNH HỢP NGỮ X86 - Trang 2
Để xem tài liệu đầy đủ. Xin vui lòng
LẬP TRÌNH HỢP NGỮ X86 - Người đăng: quang-nghia-le
5 Tài liệu rất hay! Được đăng lên bởi - 1 giờ trước Đúng là cái mình đang tìm. Rất hay và bổ ích. Cảm ơn bạn!
10 Vietnamese
LẬP TRÌNH HỢP NGỮ X86 9 10 168