1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI tập lớn môn tổ CHỨC máy TÍNH kiến trúc tập lệnh intel và một số câu lệnh cơ bản

20 197 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 20
Dung lượng 256,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thanh ghi này không thể bị tác động trực tiếp nên nó không được xem như một toán hạng như các thanh ghi khác.. - Kiểu bộ nhớ phân đoạn Segmented Memory Model : bộ nhớ được thể hiện như

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN MÔN TỔ CHỨC MÁY TÍNH

Kiến trúc tập lệnh Intel

Và một số câu lệnh cơ bản

Người hướng dẫn: TS MAI NGỌC THẮNG

Người thực hiện: ĐẶNG QUỐC KHANH - 51503183

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2016

Trang 2

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG

KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN MÔN TỔ CHỨC MÁY TÍNH

Kiến trúc tập lệnh Intel

Và một số câu lệnh cơ bản

Người hướng dẫn: TS MAI NGỌC THẮNG

Người thực hiện: ĐẶNG QUỐC KHANH - 51503183

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2016

Trang 3

LỜI CẢM ƠN

Để hoàn thành bài tập này em đã nhận nhiều sự giúp đỡ của nhiều người trong thời gian qua Trước hết em xin cảm ơn thầy Mai Ngoc Thắng, giảng viên môn tổ chức máy tính đã hộ trợ em trong viêc tìm kiếm thông tin Em cũng cám ơn các tác giả đã chỉa sẽ kiến thức quý báo của mình trên internet để em tham khảo

Trang 4

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Phần xác nhận của GV hướng dẫn

_

Tp Hồ Chí Minh, ngày tháng năm

(kí và ghi họ tên)

Phần đánh giá của GV chấm bài

_

Tp Hồ Chí Minh, ngày tháng năm

(kí và ghi họ tên)

Trang 5

TÓM TẮT

Kiến trúc tập lệnh là giao diện chính giữa phần cứng và phần mềm là cái nhìn trừu tượng của phần cứng dựa trên quan điểm phần mềm Có nhiều loại kiến trúc đã được sử dụng nhưng phổ biến hơn cả là kiến trúc tập lệnh của intel Kiến trúc này có các thanh ghi và

có các lệnh assembly dùng để thực hiện các phép toán

Trang 6

MỤC LỤC

LỜI CẢM ƠN ……….……… ……… …….… 2

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN ……….… ….…… … 3

TÓM TẮT … ……….…….………… ………… 4

MỤC LỤC … ……… ……… …….5

DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT 6

CÁC BẢNG BIỂU, HÌNH VẼ, ĐÒ THỊ 7

CHƯƠNG 1 - SƠ LƯỢC VỀ CÁC THẾ HỆ KIẾN TRÚC TẬP LỆNH INTEL ……… 8

CHƯƠNG 2 -THIẾT KẾ CƠ BẢN CỦA KIẾN TRÚC TẬP LỆNH IA-32 ………… ……….….….…… ….8

CHƯƠNG 3 - THANH GHI VÀ ĐỊNH ĐỊA CHỈ 9

3.1 - Thanh ghi 9

3.1.1 Thanh ghi đa năng 9

3.1.2 Thanh ghi đoạn 10

3.1.3 Thanh ghi EFLAGS 10

3.2 Định địa chỉ 10

CHƯƠNG 4 - MỘT SỐ CÂU LỆNH CƠ BẢN CỦA IA-32 11

4.1 Lệnh của IA - 32 11

4.2 Các kiểu lệnh 11

4.3 Một số câu lệnh cơ bản 11

4.3.1 Một số câu lệnh kiểu di chuyển dữ liệu 11

4.3.2 Một số câu lệnh kiểu tính toán số học 12

4.3.3 Các câu lệnh phép toán luận lý 15

4.3.4 Nhóm lệnh điều khiển tuần tự 17

TÀI LIỆU THAM KHẢO 19

Trang 7

DANH MỤC KÍ HIỆU VÀ CHŨ VIẾT TẮT

Chữ viết tắt :

reg : register

mem : memory

con :constant

Var : variable

Trang 8

CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ

Hình 2.1 Sơ đồ cơ bản về kiến trúc IA-32

Hình 3.1 Các thanh ghi của kiến trúc IA-32 ở vi xử lý 32 bit

Hình 4.1 Quy ước chung về cách gọi tên các loại thanh ghi

Trang 9

CHƯƠNG 1: SƠ LƯỢC VỀ CÁC THẾ HỆ VI XỦ LÝ INTEL

- IA-32(hay còn goi là x86 - 32 hay i386) là kiến trúc tập lệnh xuất hiện lần đầu tiên

ở vi xử lý Intel 80386 (vi xử lý 32 bit ) và được tiếp tục sử dụng cho các thế hệ vi xử lý sau này như học vi xử lý Pentium, Core Các vi xử lý của AMD cũng được áp dụng kiến trúc IA-32.IA-32 có khả năng tương thích ngược và mở rông xử lý 64 bit, Intel phát triển kiến trúc IA-32e (hay còn goi là x86-64) dành cho các vi xử lý 64 bit

- IA-64 (Itanium) là kiến trúc tập lệnh được Intel phát triển cho họ vi xử lý 64 bit dành cho thị trường máy chủ cao cấp

CHƯƠNG 2: THIẾT KẾ CƠ BẢN CỦA KIẾN TRÚC IA-32

Central Processer Unit

Registers

Memory Storage Unit

I/O device

control bus

adsress bus

Trang 10

CPU (central process unit ) bao gồm các thanh ghi ( registers ) , đơn vị điều khiển (control unit hay CU ) , đơn vị xử lý tính toán logic ( arithmetic logic unit hay ALU ) và clock là tín hiệu đồng bộ hóa các xử lý của cpu

CHƯƠNG 3 : THANH GHI VÀ ĐỊNH ĐỊA CHỈ

3.1 Thanh ghi

Trong IA - 32 có 16 thanh ghi gồm 3 loại: thanh ghi đa năng ( general-purpose data registers ) , thanh ghi đoạn (segment registers), thanh ghi trạng thái và điều khiển (status and control registers)

Hình 3.1 Các thanh ghi của kiến trúc IA-32 ở vi xử lý 32 bit

3.1.1 Thanh ghi đa năng : có 8 thanh lưu giữ toán tử cho tính toán logic và số học,

toán hạng để tính địa chỉ và con trỏ đến bộ nhớ :

- EAX : chứa toán hạng và dữ liệu kết quả

- EBX : thanh ghi địa chỉ, trỏ chỉ tới dữ liệu

- ECX : thanh ghi đếm Được sủ dụng như biến đếm trong các vòng lặp

- EDX : con trỏ tới hoạt đông nhập xuất hoặc sử dụng trong các phép tính số học

- ESI : con trỏ chỉ tới chuỗi phép toán Thanh ghi này thường làm việc vơi chuỗi và mảng

- ESP: là thanh ghi stack pointer lun chỉ đến đỉnh của ngăn xếp hiện tại

- EBP : thanh ghi dùng để truy cập đến dữ liệu của ngăn xếp Nhưng khác với ESP nó không chỉ tới đỉnh ngăn xếp

Trang 11

- EDI : con trỏ tới đích của chuỗi phép toán Thanh ghi này thường làm việc với chuổi và mảng

Các thanh ghi AX,BX,CX,DX có thẻ chia ra làm 2 phần thấp (low) và cao (high) để có thể ghi dữ liệu trong các bit thấp xong rồi ghi trên các bit cao

Các thanh ghi trên cũng có trong các vi xử lý 16 bit và 64 bit sử dụng IA-32

Ở vi xử lý 16 bit (sử dụng kiến trúc IA-32) các thanh ghi có tên tương tự như trên 32 bit nhưng bỏ E ở đầu Tương tự như vậy ở vi xử lý 64 bit (sử dụng kiến trúc IA-32e ) ta thay E bằng R

3.1.2 Thanh ghi đoạn : có 6 thanh ghi 16 bit

- Stack segment (SS) : lưu địa chỉ phân đoạn ngăn xếp

- Code segment (CS) : lưu địa chỉ phân đoạn mã

- Data segment (DS) : lưu địa chỉ phân đoạn dữ liệu

- Extra segment (ES) : lưu địa chỉ phân đoạn dữ liệu

- F segment (FS) : lưu địa chỉ phân đoạn dữ liệu

- G segment (GS) : lưu địa chỉ phân đoạn dữ liệu

3.1.4 Thanh ghi EFLAGS :

Thanh ghi EFLAGS là thanh ghi 32 bit chứa cờ dánh dấu một nhóm các trạng thái, cờ điều khiển và cờ hệ thống ( có thể truy cập thông qua một số lệnh đặc biệt ) Cờ có 1 bit giá trị là 0 hoặc 1 Cờ bật giá trị bằng 1

Có các cờ sau:

- CF ( Carry Flag) : Cờ này được bật khi có phép tính có sử dụng bit nhớ

- ZF (Zero Flag) : Cờ bật khi phép tính được bật là 0

- SF ( Sign Flag): Cờ bật khi kết quả phép tính có dấu

- OF ( Overflow Flag) : Bật khi phép tính gây tràn số

- PF ( Parity Flag) : Bật khi phép tính có chẵn bit 1

- AF ( Auxilary Flag) : Bật khi phép tính có sử dụng bộ nhớ phụ

- IF (Interrupt Flag) : Bật để cho phép xảy ra các ngắt

- DF (Direction Flag) : Bật để giảm chỉ số tự động khi làm việc với mảng hat chuổi ký tự

3.1.5 Thanh ghi EIP

Thanh ghi EIP là một thanh ghi được cập nhật mỗi khi có lệnh được thực hiện và luôn trỏ đến câu lệnh tiếp theo Thanh ghi này không thể bị tác động trực tiếp nên nó không được xem như một toán hạng như các thanh ghi khác

3.2 Định địa chỉ

Trật tự sắp xếp của bit và byte : IA-32 đánh địa chỉ theo “ little endian “ , Least

Significant bit (LSB) luôn được lưu ở ô nhớ có địa chỉ nhỏ nhất và Most Significant bit (MSB) luôn được lưu ở ô nhớ có địa chỉ nhỏ nhất

Kiểu dữ liệu : 1 byte bằng 8 bit, 1 word bằng 16 bit, 1 double word bằng 32 bit,

một quad word bằng 64 bit

Địa chỉ hóa bộ nhớ : có 2 cách

Trang 12

- Kiểu bộ nhớ phẳng ( Flat Memory Model) : bộ nhớ đơn lẻ , kết nối với

không gian địa chỉ Code, data, và procedure stack được chứa trong không gian địa chỉ nối tiếp nhau từ 0 đến 2^32-1

- Kiểu bộ nhớ phân đoạn ( Segmented Memory Model) : bộ nhớ được thể hiện như một nhóm độc lập các đoạn không gian địa chỉ Các code, dât và thử tuc ngăn xếp được lưu tách rời nhau

CHƯƠNG 4 : MỘT SỐ CÂU LỆNH CƠ BẢN CỦA IA-32

4.1 Lệnh của IA-32

Lệnh của IA -32 bao gồm

Opcode : xác định công việc cần làm Nguồn toán hạng ( Source Operands) : nằm trông các thanh ghi, từ bộ nhớ ,

và từ các thiết bị nhập xuất

Đích của toán hạng ( Destination Operand) : có thể được lưu trong thanh ghi,

bộ nhớ, các thiết bị nhâp xuất

Cú pháp cơ bản của lệnh ia-32 assembly :

Opcode,sourse1,[sourse2,]detination

4.2 Các kiểu lệnh :

- Di chuyển dữ liệu

- Tính toán số học

- Phép toán luận lý

- Điều khiển tuần tự

Để dễ xem xét về câu lệnh thông dụng của IA-32 assembly vơi cú pháp cảu intel Chúng ta tạm sử dụng các quy ước sau

Hình 4.1

4.3 Một số câu lệnh cơ bản :

4.3.1 Một số câu lệnh kiểu di chuyển dữ liệu :

 mov :

Là lệnh dich chuyển dữ liệu từ nguồn sang đích

Tổng quát : mov <toán hạng đích>,<toán hạng nguồn>

Cú pháp :

<reg32> Thanh ghi 32 bit (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP)

<reg16> Thanh ghi 16 bit (AX, BX, CX, or DX)

<reg8> Thanh ghi 8 bit (AH, BH, CH, DH, AL, BL, CL, or DL)

<reg> Bất kỳ thanh ghi nào

<mem> Địa chỉ nhớ (e.g., [eax], [var + 4], or dword ptr [eax+ebx])

<con32> Hằng 32 bit

<con16> Hằng 16 bit

<con8> Hằng 8 bit

<con> Bất kỳ hằng nào

Trang 13

mov <reg>,<reg>

mov <reg>,<mem>

mov <mem>,<reg>

mov <reg>,<const>

mov <mem>,<const>

Ví dụ : mov eax,ebx // di chuyển giá trị từ thanh ghi ebx sang eax

 push :

Là lệnh đặt dữ liệu từ nguồn vào ngăn xếp theo thứ tự từ dưới lên Tổng quát :

push <toán hạng nguồn>

Cú pháp :

push <reg32>

push <mem>

push <con32>

Ví dụ :

push eax // đặt dữ liệu trong thanh ghi eax vào đáy ngăn xếp

 pop :

Là lệnh lấy dữ liêu từ trên xuống trong ngăn xếp vào đích

Tổng quát :

push <toán hạng đích>

Cú pháp :

pop <reg32>

pop <mem>

Ví dụ :

pop edi // lấy dữ liệu trên đỉnh ngăn xếp rồi di chuyển vào thanh ghi edit

 lea :

Là lệnh lấy địa chỉ ở toán hạng 2 đặt vào toán hang 1

Tổng quát :

lea <toán hạng 1>,< toán hang 2>

Cú pháp :

lea <reg32>,<mem>

Ví dụ :

lea eax,[var] // địa chỉ của var ở memori được đặt vào thanh eax

4.3.2 Một số câu lệnh kiểu tính toán số học :

add :

Câu lệnh cộng hai toán hạng 1 va 2 sau đó lưu vào toán hạng 1 Toán hạng có thể được lưu trong thanh ghi hoặc bộ nhớ chính hoặc có thể là hằng số

Tổng quát :

add toán hạng 1, toán hạng 2

Cú pháp :

Trang 14

add <reg>,<reg>

add <reg>,<mem>

add <mem>,<reg>

add <reg>,<con>

add <mem>,<con>

Ví dụ :

add eax,10 // cộng 10 với dữ liệu trong eax rồi lưu vào eax

sub :

Câu lệnh trừ toán hạng 1 cho toán hạng 2 sau đó lưu vào nơi chưa toán hạng 1 Toán hạng có thể được lưu trong thanh ghi hoặc bộ nhớ chính hoặc có thể là hằng số

Tổng quát :

sub toán hạng 1 , toán hạng 2

Cú pháp :

sub <reg>,<reg>

sub <reg>,<mem>

sub <mem>,<reg>

sub <reg>,<con>

sub <mem>,<con>

Ví dụ :

sub eax,10 // trừ giá trị lưu trong thanh ghi eax cho 10 rồi lưu vào

thanh ghi eax

 inc,dec :

inc là lệnh tăng một vào toán hạng, dec thì ngược lại giảm môt giá trị của toán hạng

Cú pháp :

inc <reg>

inc <mem>

dec <reg>

Dec <mem>

Ví dụ :

inc eax //cộng 1 vào toán hạng ở thanh eax

dec eax //trừ 1 vào toán hạng ở thanh eax

 imul :

Lệnh nhân các số có dấu , kết quả là số có dấu

Tổng quát :

imul <toán hạng nguồn>

Cú pháp :

Trang 15

imul <mem>

imul <reg>

Nếu toán hạng nguồn là 8 bit thì thực hiện nhân EAL với toán

hạng nguồn rồi lưu trong EAX

Nếu toán hạng nguồn là 16 bit thì thực hiện nhân EAX với toán

hạng nguồn rồi lưu trong 2 thanh ghi EDX và EAX EDX giữ 16 bit

cao, EAX giữ 16 bit thấp

Ví dụ :

mov eax,16

mul 2

 mul :

Lệnh nhân các số nguyên, kết quả là số nguyên

Tổng quát :

Mul <toán hạng nguồn>

Cú pháp :

mul <mem>

mul <reg>

Nếu toán hạng nguồn là 8 bit thì thực hiện nhân EAL với toán hạng nguồn rồi lưu trong EAX

Nếu toán hạng nguồn là 16 bit thì thực hiện nhân EAX với toán hạng nguồn rồi lưu trong 2 thanh ghi EDX và EAX EDX giữ 16 bit cao, EAX giữ 16 bit thấp

Ví dụ :

mov eax,16

mul 2

 div :

Lệnh chia số nguyên, kết quả nguyên Số chia lưu ở thanh ghi eax số bị chia lưu ở toán hạng

Tổng quát :

div <toán hạng>

Số chia lưu ở thanh ghi EAXsố bị chia lưu ở toán hạng Thương số lưu

ở EAL , số dư lưu ở EAH

Cú pháp :

div <reg32>

div <mem>

Ví dụ :

mov eax,8

mov edx,2

div edx

Trang 16

 idiv

Lệnh chia số không dấu, kết quả là số không dấu Số chia lưu ở thanh ghi eax số bị chia lưu ở toán hạng

Tổng quát :

idiv <toán hạng>

Số chia lưu ở thanh ghi EAXsố bị chia lưu ở toán hạng Thương số lưu

ở EAL , số dư lưu ở EAH

Cú pháp :

idiv <reg32>

idiv <mem>

Ví dụ :

mov eax,8

mov edx,2

idiv edx

4.3.3 Các câu lệnh phép toán luận lý :

 Các lệnhand, or, xor:

Các câu lệnh luận lý thực hiên phép toán luận lý xác định trên toán hạng

và lưu chúng trên toán hạng thứ nhất

Tổng quát :

and <toán hạng 1>, <toán hạng 2>

or <toán hạng 1>, <toán hạng 2>

xor <toán hạng 1>, <toán hạng 2>

Cú pháp :

and <reg>,<reg>

and <reg>,<mem>

and <mem>,<reg>

and <reg>,<con>

and <mem>,<con>

or <reg>,<reg>

or <reg>,<mem>

or <mem>,<reg>

or <reg>,<con>

or <mem>,<con>

xor <reg>,<reg>

xor <reg>,<mem>

xor <mem>,<reg>

xor <reg>,<con>

xor <mem>,<con>

Ví dụ :

Trang 17

xor edx,edx // xóa giá trị lưu trên thanh edx.

 not :

Nghich đảo giá trị cửa toán hạng

Tổng quát :

not <toán hạng>

Cú pháp :

not <reg>

not <mem>

Ví dụ :

not <eax> // nghịch đảo từng bit trên thanh ghi eax

 neg :

Đổi dấu trong giá trị cửa toán hạng

Tổng quát :

neg <toán hạng>

Cú pháp :

neg <reg>

neg <mem>

Ví dụ :

neg eax // đổi dấu giá trị trong thanh ghi eax

 shl,shr :

Là lệnh dịch trái (shift left, shl) và lệnh dịch phải (shift right, shr) Ở lệnh này dãy bit sẻ dịch về bên trái ( hoặc phải) nếu bit tai đó trống thì sẽ được thay thế bằng 0

Tổng quát :

shl <toán hạng>, <hằng số>

shr <toán hạng>, <hằng số>

Cú pháp :

shl <reg>,<con8>

shl <mem>,<con8>

shr <reg>,<con8>

shr <mem>,<con8>

Ví dụ: dữ liệu trong thanh ghi eax là 00000000 00000000 01000000 11111111

shl eax,1 // dich trái dãy số trong eax 1 bit thì sẽ là

00000000 00000000 10000001 11111110 shr eax,1 // dich phải dãy số trong eax 2 bit thì sẽ là

00000000 00000000 00100000 01111111

Trang 18

4.3.4 Nhóm lệnh điều khiển tuần tự

 jmp :

Là lệnh nhảy không điều kiện đến vị trí đích Vị trí đích có thể lànhãn của một lệnh, tên của một thủ tục hoặc có thể là một thanh ghi, một ô nhớ (đã được định nghĩa) nào đó <Vị trí đích> cũng có thể là một biến nào đó, giá trị của nó thường là địa chỉ của một ô nhớ trong đoạn Code

Có 3 dạng : near, short, far Cơ chế của jmp dựa vào việc thay đổi nội dung của thanh ghi ip và thanh ghi đoạn cs Dạng near và short ko thay đổi

dữ liệu thanh cs nên vị trí đích phải nằm trên cùng đoạn nhớ còn dạng far thì ngược lại

Cú pháp:

jmp <label>

 Lệnh nhảy có điều kiện

Có nguyên lý hoạt động giống như jmp nhưng phải có điều kiện đó là

sự thay đổi cờ hiệu trong thanh ghi EFLAG bằng cách dung các lênh dịch bit, đảo bit, so sánh (cmp)

 cmp :

Cú pháp :

Cmp <toán hạng đích>,< toán hạng nguồn>

Trong đó ca 2 không thể là ô nhớ

Toán hạng đích không thể là hằng số

Lênh này so sánh giá trị hoặc nội dung của hay toán hạng, nó trừ toán hạng đích cho toán hạng nguồn nhung không làm hay đổi giá trị của toán hạn đích mà chỉ làm thay đổi trạng thái cờ hiệu trông thanh ghi EFLAG

 Các lệnh nhảy có điều kiện :

Các lệnh nhảy :

je <label> (nhảy khi bằng)

jne <label> ( nhảy khi không bằng)

jz <label> ( nhảy khi kết quả cuối cùng là 0)

jg <label> ( nhảy khi lớn hơn)

jge <label> ( nhảy khi lớn hơn hoặc bằng)

jl <label> ( nhảy khi nhỏ hơn )

jle <label> ( nhảy khi nhỏ hơn hoặc bằng)

Ví dụ

cmp eax, ebx //so sánh dữ liệu eax với ebx

jle done // nếu bé hơn hoặc bằng thì nhay tới

nhãn done

 call :

Thực hiện chương trình con và trả về Lệnh này đặt địa chỉ mã của chương trình con cần thưc hiện vào ngăn xếp và thực hiên lệnh

Ngày đăng: 06/10/2019, 14:38

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w