1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

ĐIỆN tử VIỄN THÔNG chuong 3 tap lenh laptrinh hop ngu khotailieu

144 155 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 144
Dung lượng 680,5 KB

Nội dung

Định dạng lệnh - Instruction Formatoptional optional optional optional 0 7 low addr high addr Low Displacement or Immediate High Displacement or Immediate Low Immediate High Immediate

Trang 1

Chương 3: Tập lệnh của

Vi Xử Lý

Phạm Thế Duy ptduy@yahoo.com

Trang 2

Khái niệm lệnh

hiện một chức năng cơ bản.

 OP CODE: chọn chức năng thực hiện.

 Operand: Chọn dữ liệu cho lệnh.

Trang 3

Định dạng lệnh - Instruction Format

optional optional optional optional

0 7

low addr

high addr

Low Displacement or Immediate High Displacement or Immediate Low Immediate

High Immediate

opcode 6-bit chỉ thị loại lệnh sẽ thực hiện

d (destination): d=1 chỉ thị toán hạng thanh ghi Reg là toán hạng đích

d=0 chỉ thị toán hạng thanh ghi Reg là toán hạng nguồn

w (word): w=1 toán hạng trong lệnh bao gồm hai byte

w=0 toán hạng trong lệnh bao gồm 01 byte

Trang 4

opcode d w

optional optional optional optional

0 7

low addr

high addr

Low Displacement or Immediate High Displacement or Immediate Low Immediate

High Immediate

mod is 2-bit chỉ thị chế độ địa chỉ (tuỳ theo giá trị của r/m)

reg là 3-bit chỉ thị toán hạng thanh ghi (bảng kế)

r/m là 3-bit chỉ thị vị trí của toán hạng là trong thanh ghi hay

bộ nhớ (r/m : register/memory)

Trang 5

Định dạng lệnh - Instruction Format

Mod

000 001 010 011 100 101 110 111

[BX]+[SI] + d16 [BX]+[DI] + d16 [BP]+[SI] + d16 [BP]+[DI] + d16 [SI] + d16 [DI] + d16 [BP] + d16 [Bx] + d16

AL CL DL BL AH CH DH BH

AX CX DX BX SP BP SI DI

Trang 6

opcode d w

optional optional optional optional

0 7

low addr

high addr

Low Displacement or Immediate High Displacement or Immediate Low Immediate

High Immediate

Displacement có thể 8 hoặc 16 bit

- Là giá trị Hex được mã hoá trong lệnh.

- Sử dụng để tính toán giá trị địa chỉ của toán hạng

Immediate có thể 8, 16 hoặc 32 bit

- là số hex

Định dạng lệnh - Instruction Format

Trang 7

opcode d w

optional optional optional optional

0 7

low addr

high addr

Low Displacement or Immediate High Displacement or Immediate Low Immediate

High Immediate

mod là: 11 chỉ thị giá trị r/m trỏ tới a thanh ghi

Định dạng lệnh - Instruction Format

Trang 8

Các loại toán hạng -Operand types

1) Register - Được mã hoá trong lệnh

• Lệnh thực hiện nhanh

• Không có truy cập Bus (in instr queue)

• Chiều dài lệnh ngắn

2) Immediate - Hằng số mã hoá trong lệnh

• 8 hoặc 16 bit

• Không truy cập BUS (in instr queue)

• Chỉ có thể là toán hạng nguồn3) Memory – Nằm trong bộ nhớ, yêu cầu truy cập BUS

• Có thể cần tính toán địa chỉ

• Địa chỉ của toán hạng trong lệnh là địa chỉ Offset hay: EFFECTIVE ADDRESS

Trang 9

Effective Address

• Tính toán bởi EU

• Thông thường, Effective address =

displacement + [base register]+ [index register]

(if any) (if any) (if any)

• Có thể tính toán từ 03 giá trị

– Có trong một số chế độ địa chỉ khác nhau:

• Displacement

– 8 hoặc 16 bit là hằng số trong lệnh

– Thanh ghi cơ sở “base register” cần là BX hoặcBP

– Thanh ghi chỉ số “index register” cần là SI hoặc DI

Trang 10

Các chế độ địa chỉ- addressing mode

Trang 11

Chế độ địa chỉ tức thời – Immediate

Trang 12

Chế độ địa chỉ thanh ghi - Register

Trang 13

Chế độ địa chỉ trực tiếp

prefix byte

- longer instruction

- more fetch time

Trang 14

Chế độ địa chỉ trực tiếp Direct

Addressing

offset của ô nhớ.

Trang 15

Chế độ địa chỉ gián tiếp thanh ghi

Register Indirect Addressing

mov al, [bp] ;al gets 8 bits at SS:BP mov ah, [bx] ;ah gets 8 bits at DS:BX mov ax, [di] ;ax gets 16 bits at DS:SI mov eax, [si] ;eax gets 32 bits at DS:SI

BX

effective address

BP SI DI

Trang 16

Chế độ địa chỉ tương đối cơ sở Based Relative Addressing

Trang 17

Chế độ địa chỉ chỉ số tương đối Indexed Relative Addressing

Trang 18

Chế độ địa chỉ cơ sở chỉ số tương đối Based Indexed Relative Addressing

mov eax, [bx+si+10h] ;eax gets 32 bits at DS:BX+SI+10h

Trang 19

Ví dụ về các chế độ địa chỉ

Addressing Mode Examples

mov al, bl ;8-bit register addressing

mov di, bp ;16-bit register addressing

mov eax, eax ;32-bit register addressing

mov al, 12 ;8-bit immediate, al<-0ch

mov cx, 0faceh ;16-bit immediate, cx<-64,206

mov ebx, 2h ;32-bit immediate, ebx<-00000002h

mov al, LIST ;al<-8 bits stored at label LIST

mov ch, DATA ;ch<-8 bits stored at label DATA

mov ds, DATA2 ;ds<-16 bits stored at label DATA2

mov al, [bp] ;al<-8 bits stored at SS:BP

mov ah, [bx] ;ah<-8 bits stored at DS:BX

mov ax, [bp] ;ax<-16 bits stored at SS:BP

mov eax, [bx] ;eax<-32 bits stored at DS:BX

mov al, [bp+2] ;al<-8 bits stored at SS:(BP+2)

mov ax, [bx-4] ;ax<-16 bits stored at DS:(BX-4)

mov al, LIST[bp] ;al<-8 bits stored at SS:(BP+LIST)

mov bx, LIST[bx] ;bx<-16 bits stored at DS:(BX+LIST)

mov al, LIST[bp+2] ;al<-8 bits stored at SS:(BP+2+LIST)

mov ax, LIST[bx-12h] ;ax<-16 bits stored at

18+LIST)

Register Immediate

Direct

Based

Trang 20

mov al, [si] ;al<-8 bits stored at DS:SI

mov ah, [di] ;ah<-8 bits stored at DS:DI

mov ax, [si] ;ax<-16 bits stored at DS:SI

mov eax, [di] ;eax<-32 bits stored at DS:DI

mov ax, es:[di] ;ax<-16 bits stored at ES:DI

mov al, [si+2] ;al<-8 bits stored at DS:(SI+2)

mov ax, [di-4] ;ax<-16 bits stored at DS:(DI-4)

mov al, LIST[si] ;al<-8 bits stored at DS:(SI+LIST)

mov bx, LIST[di] ;bx<-16 bits stored at DS:(DI+LIST)

mov al, LIST[si+2] ;al<-8 bits stored at DS:(SI+2+LIST)

mov ax, LIST[di-12h] ;ax<-16 bits stored at DS:(DI-18+LIST)

mov al, [bp+di] ;al<-8 bits from SS:(BP+DI)

mov ah, ds:[bp+si] ;ah<-8 bits from DS:(BP+SI)

mov ax, [bx+si] ;ax<-16 bits from DS:(BX+SI)

mov eax, es:[bx+di] ;eax<-32 bits from ES:(BX+DI)

mov al, LIST[bp+di] ;al<-8 bits from SS:(BP+DI+LIST)

mov ax, LIST[bx+si] ;ax<-16 bits from DS:(BX+SI+LIST)

mov al, LIST[bp+di-10h] ;al<-8 bits from SS:(BP+DI-16+LIST)

Indexed

Based Indexed

Based Indexed Relative

Ví dụ về các chế độ địa chỉ

Addressing Mode Examples

Trang 21

Chế độ địa chỉ cổng I/O Port Addressing

 Họ x86 quản lý 65,536 địa chỉ cổng vào ra

 Mỗi địa chỉ cổng (giống như bộ nhớ)

 Truy cập tới một cổng duy nhất

 Địa chỉ I/O có thể 1 byte hoặc 2 byte

 Với 386+ có thể là 4 byte

 Có hai chế độ địa chỉ cổng

1) Chế độ địa chỉ cổng tức thời

- Chỉ có thể là địa chỉ 1 byte

- Giá trị trong khoảng từ 00 tới ffH 2) địa chỉ cổng giữ trong DX

- có thể mang các giá trị trong khoảng từ 0000h tới ffffh

 Chỉ có thể sử dụng thanh ghi DX để giữ địa chỉ cổng

 Chỉ có thể sử dụng các thanh ghi AL,AX,EAX cho dữ liệu cổng

Trang 22

Tập lệnh của 80286

 Các lệnh số học

 Các lệnh logic

 Các lệnh quay dịch

 Các lệnh nhảy.

 Các lệnh chương trình con.

Trang 23

Các lệnh truyền dữ liệu - MOVE

 Dữ liệu được chép từ toán hạng nguồn (Source) tới toán

hạng đích (Dest) Chú ý lệnh không làm thay đổi toán hạng nguồn, chỉ làm thay đổi toán hạng đích

 Chú ý một số trường hợp không sử dụng được trong lệnh này

bao gồm:

 Không chuyển dữ liệu trực tiếp giữa hai ô nhớ.

 Không nên chuyển giá trị tức thời (Imm) vào thanh ghi đoạn.

 Không chuyển dữ liệu giữa hai thanh ghi đoạn.

 Không dùng thanh ghi CS làm toán hạng đích.

Trang 24

Các toán hạng sử dụng trong lệnh

MOV AH,BHMOV CL,[1000H]MOV DH,10

MOV Table,BXMOV X1,25HMOV DS,AXMOV ES,X2

Trang 25

Các lệnh truyền dữ liệu - EXCHANGE

đích và nguồn, tức là sau khi thực hiện cả

toán hạng đích và toán hạng nguồn đều thay đổi.

Trang 26

Các lệnh truyền dữ liệu

Lệnh lấy dữ trong bảng vào AL.

 - Cú pháp: XLAT

 Lấy giá trị thứ n trong bảng dữ liệu vào thanh ghi AL, với BX giữ

địa chỉ đầu bảng, AL giữ khoảng cách từ đầu bảng tới giá trị cần lấy.

Ví dụ: Tính bình phương một số bảng cách tra bảng:

Bphuong DB 0 ,1,4,9,16,25,36,49,64 …; định nghĩa bảng dữ liệu bình phương.

LEA BX,Bphuong : Lấy địa chỉ offset đầu bảng vào BX

MOV AL,03 ; AL chứa số cần tính bình phương.

XLAT ; AL bằng bình phương của 3

Trang 27

Các lệnh truyền dữ liệu

Lệnh nạp địa chỉ tác động vào thanh ghi.(Load Effective

Address to Register)

 - Cú pháp: LEA Reg16,X1 ;X1 là tên biến cần lấy địa chỉ.

 - Thực hiện: Reg16  Địa chỉ tác động của biến X1.

 Lấy địa chỉ offset của biến X1 vào một thanh ghi 16 bit.

Nạp con trỏ bộ nhớ vào thanh ghi DS (Load Pointer to DS).

 - Cú pháp: LDS Reg16,X

 - Thực hiện: DS  Seg.X

 Reg16  Off.X

 Lấy địa chỉ đoạn của biến X vào thanh ghi DS và lấy địa chỉ tác động

vào thanh ghi 16 bit.

Lệnh nạp con trỏ bộ nhớ vào thanh ghi ES:

 - Cú pháp: LES Reg16,Var

 - Thực hiện: ES  Seg.Var

 Reg16  Off.Var

Trang 28

Các lệnh truyền dữ liệu- PUSH, POP

Lệnh cất dữ liệu vào ngăn xếp.

Cất thanh ghi cờ vào đỉnh ngăn xếp sử dụng lệnh PUSHF.

- Thực hiện: Cất dữ liệu chỉ thị bởi toán hạng nguồn vào đỉnh ngăn xếp và tự động

giảm con trỏ ngăn xếp tuỳ theo số byte của toán hạng nguồn.

Lệnh lấy dữ liệu ra khỏi ngăn xếp.

ghi Phục hồi thanh ghi cờ từ đỉnh ngăn xếp sử dụng lệnh POPF.

- Thực hiện: Lấy dữ liệu từ đỉnh ngăn xếp ra toán hạng đích và tăng giá trị của SP

lên một lượng tương ứng với số byte chứa được trong toán hạng đích.

Trang 29

Các lệnh truyền dữ liệu- IN, OUT

Lệnh nhập (input):

Với: Port là địa chỉ cổng vào ra truy xuất dữ liệu.

[DX] là toán hạng gián tiếp thanh ghi chứa địa chỉ cổng.

Acc là thanh ghi chứa (AX nếu truy xuất từ, AL nếu truy xuất

byte).

Ví dụ: IN AL,80H ; Lấy vào AL dữ liệu tại cổng 80H

Trang 30

TỔNG KẾT CÁC LỆNH TRUYỀN DỮ

Trang 31

CÁC LỆNH XỬ LÝ DỮ LIỆU

 Biến đổi dữ liệu theo phép toán thực hiện.

 Tác động lên các cờ trạng thái: CF, ZF, OF,

SF,PF và AF.

Trang 32

Các lệnh số học và logic Arithmetic/Logic Instructions

• Các lệnh toán học cơ bản

– Chỉ thực hiện với số nguyên có dấu và không dấu

– Mặc định là số bù 2.

– Tính ra kết quả và tác động tới các cờ

• Các lệnh Logic - Logic Instructions

– Tác động từng bit tương ứng - Bit Level

– Mức từ - Word Level

– Tính ra kết quả và tác động tới các cờ.

Trang 33

Các lệnh số học Arithmetic Instruction Summary

add ax, bx ;axax+bx and set flags

adc ax, bx ;axax+bx+CF(lsb) and set flags

inc ax ;axax+1 and set flags

aaa ;ASCII Adjust after Addition

daa ;Decimal (BCD) Adjust after Addition sub ax, bx ;axax-bx and set flags

sbb ax, bx ;ax(ax-CF)-bx and set flags

dec ax ;axax-1

neg ax ;ax(-1)*(ax) 2’s Complements Complement

cmp ax, bx ;Flags are set according to ax-bx

das ;Decimal (BCD) Adjust after Subtraction aas ;ASCII Adjust after Subtraction

mul cx ;dx:ax ax * cx (unsigned)

imul cx ;dx:ax ax * cx (2’s Complements complement)

aam ;ASCII Adjust after Multiplication

div cl ;alax/cl Quot AND ahax/cl Rem.

idiv cx ;ax(dx:ax)/cx Quot AND dx  Rem.

aad ;ASCII Adjust after Division

Trang 34

Các lệnh cộng Addition Instruction Types

add ax, bx ;axax+bx and set flags

adc ax, bx ;axax+bx+CF(lsb) and set flags inc ax ;axax+1 and set flags

aaa ;ASCII Adjust after Addition

daa ;Decimal (BCD) Adjust after

Addition

add al, bl ;alal+bl and set flags

add bx, 35afh ;bxbx+35afh

add [bx], al ;ds:(bx)ds:(bx)+al

add cl, [bp] ;clcl+ss:(bp)

add al, [ebx] ;alal+ds:(ebx)

add bx, TEMP[di] ;bxbx+ds:(TEMP+di)

add bx, [eax+2*ecx] ;bxbx+ds:(eax+(2*ecx))

Scaled Index Addressing: 386+

Trang 35

Các lệnh cộng – ADD

 Các toán hạng sử dụng trong lệnh:

Reg Reg Mem Reg Mem

Reg Mem Reg Imm Imm

ADD AX,BX ADD BX,VAR ADD SUM,DX ADD CL,09 ADD SUM,10

Trang 36

Các lệnh cộng Cộng có nhớ – ADC (Add with Carry)

 - Cú pháp: ADC Dest,Source

 Các toán hạng sử dụng trong lệnh:

Reg Reg Mem Reg Mem

Reg Mem Reg Imm Imm

ADD AX,BX ADD BX,VAR ADD SUM,DX ADD CL,09 ADD SUM,10

Trang 37

Ví dụ: ADC - Add with Carry

add ax, cx ;axax+cx and flags set

adc bx, dx ;bxbx+dx+CF(lsb) and flags set

33-bit Sum Present in CF:bx:ax

BX DX

AX CX

Trang 38

Các lệnh số học – Tăng

 Lệnh tăng (Increment).

 - Toán hạng đích sử dụng trong lệnh có thể là một thanh

ghi hoặc một ô nhớ

Trang 39

Ví dụ về lệnh tăng - Increment Examples

inc bl ;blbl+1 tác động các cờ

inc BYTE PTR [bx] ;Byte at ds:(bx)ds:(bx)+1

New MASM Directive: BYTE POINTER

Trang 40

Các lệnh số học – Chỉnh thập phân cho

phép cộng (DAA)

 Chỉnh thập phân cho lệnh cộng (Decimal Adjust for Add)

 - Cú pháp: DAA

 - Thực hiện: kết quả của lệnh cộng đặt ngay trước lệnh chỉnh

thập phân sẽ được điều chỉnh từ dạng nhị phân thông thường thành dạng BCD nén Giá trị tràn khỏi thanh chứa sẽ lưu trong cờ C.

 Để có kết quả đúng, các toán hạng sử dụng trong lệnh cộng trước

DAA phải ở dạng thập phân nén.

Trang 41

Chỉnh thập phân Decimal Adjust after Addition

• Chỉ sử dụng cho các phép tính số học với số BCD

• Chỉnh đúng lại kết quả - “Corrects” Result

+01117

1101 13c ần kết quả là 0001 0011

(1101 không phải là số BCD)

•2 số trong một byte gọi là “Packed Decimal”

•Lệnh DAA sử dụng toán hạng hiểu ngầm trong

thanh ghi AL

•Đặt sau các lệnh add, adc để hiệu chỉnh “Adjust”

Trang 42

Ví dụ về lệnh DAA Decimal Adjust after Addition Example

mov dx, 1234h ;dx1234 BCD

mov bx, 3099h ;bx3099 BCD

mov al, bl ;al99 BCD

add al, dl ;alcdh không phải là số BCD, cần 34+99=133 daa ;al33h (33 BCD) và CF=1

mov cl, al ;cl33 BCD

mov al, bh ;al30 BCD

adc al, dh ;al30h+12h+1=43h

daa ;al43h (43 BCD)

mov ch, al ;cx=4333h BCD for 1234+3099

Trang 43

Các lệnh số học – Chỉnh ASCII cho

phép cộng (AAA)

 Chỉnh ASCII cho lệnh cộng (ASCII Adjust for

Add).

 - Thực hiện: Điều chỉnh lại giá trị ASCII cho lệnh cộng

ngay phía trước Để có kết quả đúng, các toán hạng của lệnh cộng phải dưới dạng mã ASCII

Trang 44

Chỉnh ASCII sau lệnh cộng ASCII Adjust after Addition

• Để cộng các số được mã hoá ASCII

30h tới 39h mã hoá cho các số ‘0’s Complement tới ‘9’s Complement

• ax được mặc định là toán hạng nguồn cho lệnh AAA

31h ‘1’s Complement +39h ‘9’s Complement 6ah ‘10’s Complement cần phải là 3130h

(6ah không đúng đây là mã ASCII của kí tự ‘j’)

mov ax, 31h ;ax0031h=‘1’s Complement

add al, 39h ;ax31h+39h=006ah=‘<nul>j’s Complement

add ax, 3030h ;đổi từ BCD thành ASCII

Trang 45

Các lệnh trừ

Subtraction Instruction Types

sub ax, bx ;axax-bx tác động tới các cờ

sbb ax, bx ;ax(ax-CF)-bx và tác động tới các cờ dec ax ;axax-1

neg ax ;ax(-1)*(ax) = 0 – ax = Lấy bù 2

cmp ax, bx ;tác động các cờ tuỳ thuộc vào kết quả

;ax-bx chú ý ax không thay đổi

Trang 46

Các toán hạng sử dụng trong các lệnh cộng trừ

Allowable Operands for add, sub

Gen Reg

Gen Reg Mem Loc Immediate

+-

Gen Reg Mem Loc

Immediate

+-

Destination – Đích Source - Nguồn

Trang 47

Trừ có nhớ

Subtract with Borrow, sbb

sub ax, di ;axax-di và CF chứa bit nhớ sbb bx, si ;bx(bx-CF(lsb))-si lập các cờ

32-bit kết quả chứa trong bx:ax

CF =1 nếu kết quả là âm

BX SI

AX DI

CF

CF

Trang 48

Lệnh nhân - Multiplication

• 8086/8088 là một trong các bộ vi xử lý đầu tiên có các lệnh nhân chia

(mul/div)

• Cho phép các toán hạng: Bytes, Words, DoubleWords

•Cho các kết quả: Words, DoubleWords, QuadWords

•OF, CF Cung cấp các thông tin hữu dụng

•AF, PF, ZF, SF thay đồi theo vào kết quả nhưng không dự đoán trước

được.

•Toán hạng bị nhân luôn nằm trong các thanh ghi al, ax, eax

•mul - Unsigned Mnemonic

Ngày đăng: 12/11/2019, 13:33

TỪ KHÓA LIÊN QUAN

w