Hệ lệnh củ ab

Một phần của tài liệu bai giang vi xu ly va LTHN 2013 (Trang 31 - 42)

• Dạng thức của lệnh

Mô tả đ−ợc trong mỗi lệnh cần có các thông tin liên quan đến công việ hiện. Một lệ

• Mã lệnh:

Mã lệnh th−ờng là 1 byte, nghĩa là có thể có tới 256 lệnh khác nhau trong tập lệnh của bộ vi xử lý. Trong 1 số bộ vi xử lý có thể dùng 2 byte cho mã lệnh, nh−ng thứ 2 không dùng hết các bit

• Các địa chỉ của toán hạng Toán hạng có th

dung các ô nhớ V ADD AL, BL

ADD AL, 7

Cách thức ghi lệnh

(Viết lệnh nh− thế nào ?) Ngôn ngữ máy dùng tập hợp các tín hiệu 0/1 máy tính làm việc với các tín hiệu này. Để viết lệnh ta có thể d

h

{ Từ ngôn ngữ bậc cao → assembly → ngôn ngữ G

Ngôn ngữ máy 10111010 00000011 1011 0000 10001001 3h B0h 89h ợp n 03 ascal PORT[$303]:=$89; Cách m Mã lệnh gồm 3 phần: Bit D ể chỉ dữ liệu các bít vùng Reg Bảng 3.2 Cỏc giỏ và mó W=1 W=0 M∙ BAh 0 H gữ mov DX,03 mov al,89 P ã hoá lệnh của 8088

Opcode + dịch chuyển + dữ liệu trực tiếp hoặc địa chỉ trực tiếp

dùng đ h−ớng đi của D = 1 Data -> Reg D = 0 Data <- Reg Reg: chỉ ra nhờ W = 0 là kiểu Byte W = 1 là kiểu Word trị W REG reg ax al 000 Bx Bl 011 Cx Cl 001 Dx Dl 010 Sp Ah 100 Di Bh 111 Bp Ch 101 Si Dh 110

2 bit MOD cùng với 3 bit R/M (thanh ghi/ bộ nhớ) tạo ra 5 bit dùng để chỉ ra chế độ địa chỉ cho các toán hạng câu lệnh.

Op.code

1 0 0 0 1 0 D W

Bảng 3.3: Phối hợp MOD và R/W để tạo ra các chế độ địa chỉ

\mod 00 01 10 11

Mr W=1 W=0

000 [bx]+[si] [bx]+[si]+d8 [bx]+[si]+d16 Al ax 001 [bx]+[di] [bx]+[di]+d8 [bx]+[di]+d16 cl cx 010 [bp]+[si] [bp]+[si]+d8 [bp]+[si]+d16 Dl dx 011 [bp]+[di] [bp]+[di]+d8 [bp]+[di]+d16 bl bx

100 [si] [si]+d8 [si]+d16 ah sp

101 [di] [di]+d8 [di]+d16 ch bp

110 d16 (đ/c tt) [bp] + 8d [bp]+d8 DH SI

111 [bx] [bx]+d8 [bx]+d16 Bh Di

Chế độ bộ nhớ Chế độ Reg

Ghi chú:

+ d8 disp 8 bit, d16 disp 16 bit

với DS để tạo thành địa chỉ vật lý (riêng BP phải đ−ợc cộng với SP)

ví dụ1: Mov CL,[BX]

chuyển nội dung ô nhớ có địa chỉ nằm ở thanh ghi BX (adsbygoogle = window.adsbygoogle || []).push({});

+ Các giá trị trong cột 2,3,4 là các địa chỉ hiệu dụng (EA) sẽ đ−ợc cộng

10010 10 00 001 111

Opcode Chuyển tới [BX] Mã hoá CL thanh ghi

ví dụ 2: Mov 0F3H[SI],CL

a c là c thấy toán hạng cho các lệnh của nó khi hoạt động. n

; 0 toán hạng ; 3 toán hạng V

chứa dữ liệu cần thao tác. V : huyển nội dung ax vào bx

nhớ, toán hạng nguồn là g số. Có thể dùng chế độ địa chỉ này để nạp dữ liệu cần thao tác trực tiếp vào bất cứ thanh ghi nào (trừ thanh ghi đoạn và thanh ghi cờ)

VD: hớ dùng chứa dữ liệu, còn V : ô nhớ DS:123 vào al [SI] Mã hoá CL 100010 00 00 001 111 11110011 Opcode Chuyển từ d8 = F3H thanh ghi Các chế độ địa chỉ Chế độ đị hỉ ách CPU tìm

Một lệnh th−ờng có 0 đến 3 toán hạng (Tuỳ theo loại CPU) Mã lệ h Toán hạng

MOV A, B ; 2 toán hạng INC A ; A=A+1 ; 1 toán hạng

NOP

ADD R1,R2,R3

D : CJNE A,#20h, Nhãn

8086/88 Có các chế độđịa chỉsau:

• Chế độ địa chỉ thanh ghi:

Trong chế độ này dùng các thanh ghi bên trong CPU để D MOV BX,AX ; C

MOV DS,AX ; Chuyển nội dung ax vào ds

• Chế độ địa chỉ tức thì:

Trong chế độ này: Toán hạng đích là 1 thanh ghi hay 1 ô 1 hằn

MOV CL,100 MOV AX,0FFh MOV DS, AX

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

Trong chế độ này 1 toán hạng chứa địa chỉ lệch của ô n toán hạng kia chỉ có thể là thanh ghi mà không đ−ợc là ô nhớ (Không phải là toán hạng mà là địa chỉ của toán hạng)

D mov al,[1230h] ; Chuyển nội dung

MOV [4560h],CX ; Chuyển nội dung CX vào ô nhớ DS: 4560 và DS:4561

Trong án lệch

của ô u, c đ−ợc

là ô nh VD:

ội dung ô nhớ có địa chỉ DS:BX vào AL

(DI+1) (adsbygoogle = window.adsbygoogle || []).push({});

hế độ địa chỉ t−ơng đối cơ sở

các toán hạng trong các

+10] v S:[BX+11] vào CX

AL,[BP]+5 ;Chuyển nội dung ô nhớ SS:(BP+5) vào AL ơng

diễn các dùng để tính địa chỉ của toán hạng trong vùng nhớ DS M g 2 ô nhớ liên tiếp có địa chỉ

MOV AX,(SI+10)

ịa chỉ chỉ số và cơ sở ta có chế độ địa chỉ chỉ số cơ sở MO

ng−ời cầm chịch đứng đầu thuyền. Xung nhịp càng cao tốc độ xử lý của vi xử lý càng cao. Một lệnh máy có thể tốn một đến vài chục xung nhịp.

chế độ này 1 to hạng là 1 thanh ghi đ−ợc sử dụng để chứa địa chỉ nhớ chứa dữ liệ òn toán hạng kia chỉ có thể là thanh ghi mà không

MOV AL,[BX] ; Chuyển n

MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có địa chỉ DS:SI

MOV [DI],AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có địa chỉ DS:DI và DS:

• C

Trong chế độ này các thanh ghi cơ sở nh− BX và BP và các hằng số biểu diễn giá trị dịch chuyển đ−ợc dùng để tính địa chỉ hiệu dụng của ác

vùng nhớ DS và SS VD:

MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ có địa chỉ DS:[BX à D

Hoặc MOV CX,[BX+10]

MOV CX,10[BX] ; Giống trên MOV

• Chế độ địa chỉ t− đối chỉ số

Trong chế độ này các thanh ghi chỉ số nh− SI và DI và các hằng số biểu giá trị dịch chuyển đ−ợc

VD:

OV AX, [SI]+10 ;Chuyển nội dun

DS:(SI+10) và DS:(SI+11) vào AX hoặc

MOV CL,[DI]+5 ; Chuyển nội dung ô nhớ DS:(DI+5) vào CL

• Chế độ địa chỉ t−ơng đối chỉ số cơ sở Kết hợp hai chế độ đ

VD:

V AX,[BX][SI]+8 ;Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ

DS:(BX+SI+8) và DS:(BX+SI+9) vào AX

Tập lệnh của 8088 (adsbygoogle = window.adsbygoogle || []).push({});

• Xung đồng hồ clk là gì?

Các thành phần trong 1 vi xử lý khi hoạt động đ−ợc đồng bộ với nhau theo một xung nhịp giống nh− trong một chiếc thuyền đua các tay chèo chèo theo nhịp của

VD: Trong 8086/88 lệnh mov tốn 4 xung nhịp, lệnh loop tốn 17 xung nhịp, lệnh RET tốn 16 xung nhịp...Mỗi một xung nhịp gọi là 1 clk (clock = xung đồng ) ý hiện nay (1/2008) đã đạt đến tốc độ trên 4GHz (Trên 4 tỷ clk mộ

• MS

ĩa nhất gọi là MSB bit)

i là LSB (Lest signification bit)

• Một số lệnh hay dùng + ADD: Cộ h: gốc ớch ←Đớch + Gốc + AND: Và ốc theo bit BL là 13h L trình con

t lệnh: CALL tờn chương trỡnh con CF IF ← + CMP: so CMP đớch, gốc c với đớch. Thường dựng để tạo điều kiện cho h đi một đơn vị

ang là 12. Lệnh dec al sẽ cho kết quả al bằng 11. có dấu

Viết lệnh: DIV gốc hồ . Các vi xử l

t giây). B - LSB

− Trong 1 đơn vị dữ liệu (byte hay word) thì bit có ý ngh (Most signification − Bit ít có ý nghĩa nhất gọ ng hai toán hạng Viết lện ADD đớch, Thực hiện: Đ Vớ dụ: add ax,bx 2 toán hạng Viết lệnh: AND đớch, gốc Thực hiện: Đớch ←Đớch AND G Vớ dụ: Nội dung của AL là 03h Nội dung của

and al,bl cho kết quả là 03h cất trong A

+ CALL: Gọi ch−ơng Viế

+ CLC: Xoá cờ nhớ

← 0

+ CLI: Che các ngắt che đ−ợc 0

sánh 2 byte hay 2 từ Viết lệnh:

Thực hiện: So sỏnh gố lệnh nhảy.

+ DEC: Giảm toán hạng đích đi 1 Viết lệnh: DEC Đớch Thực hiện: Giảm đớc Vớ dụ: AL đ

o dấu 16

o

thanh ghi DXAX. Sau khi chia: AX ← +

g thỏi dừng chỉ cú thể tỏc động vào cỏc chõn INTR, NMI hoặc

+ IN: Đọc dữ liệu từ cổng vào thanh chứa Acc

thanh chứa. a địa chỉ cổng qua thanh ghi DX.

+ INC: Tăn đ

Vớ dụ: AL đang là 12. Lệnh inc al sẽ cho kết quả nội dung của al tăng

+ NC, JB/JC/JNAE, JBE/JNA, JE/JZ, JG/JNLE, JGE/JNL,

JL, ơn ơn g 0 JBE: Nhảy nếu thấp hơn hoặc bằng ó ào thanh ghi Thực hiện: (adsbygoogle = window.adsbygoogle || []).push({});

Nếu gốc là số 8 bit: AX/gốc, số bị chia phải là số khụng bit để trong AX. Sau khi chia AL ← thương, AH ← số dư

Nếu gốc là số 16 bit: DXAX/gốc. Số bị chia phải là số khụng dấu 32 bit để trong cặp

thương, DX ← số dư.

HLT Dừng: Khi gặp lệnh này cỏc hoạt động của 8088 bị tạm dừng. Để thoỏt khỏi trạn

RESET.

Viết lệnh: IN Acc, Port

Thực hiện: Acc ← Port. Đọc nội dung của cổng Port vào Khi địa chỉ cổng lớn hơn ffh cần đư

g toán hạng ích lên 1 Viết lệnh: INC Đớch

Thực hiện: Tăng đớch lờn một đơn vịĐớch ←Đớch +1 lờn 1 là 13.

+ IRET: Trở về từ ch−ơng trình con phục vụ ngắt JA/JNBE, JAE/JNB/J

JNGE, JLE/JNG

A: Above - Cao hơn, ở phớa trờn E: Equal - Bằng, tương đương B: Below - Ở dưới, thấp h G: Great than - Lớn h Less than - nhỏ hơn JZ: Nhảy nếu kết quả bằn JC: Nhảy nếu cú cờ nhớ JAE: Nhảy nếu cao hơn hoặc bằng ... + JMP: Nhảy vụ điều kiện đến một đích nào đ

+ LEA: Nạp địa chỉ hiệu dụng v Viết lệnh LEA Đớch, gốc

Thực hiện: Đớch thường là một trong cỏc thanh ghi BX, CX, DX, BP, DI, ột biến mảng, chuỗi. iết lệ ong CX, sau mỗi lần thực hiện CX tự giảm đi 1. i vũng lặp Vớ dụ: Hiện n : MOV đớch, gốc Thực hiện: C ng của gốc vào đớch Vớ dụ: của al và bl đều bằng 5 Viế Thực ốc cú hai trường hợp tớch.

o Nếu gốc là số 16 bit: AX*gốc. Số bị nhõn phải là số 16 bit trong AX. khi nhõn DXAX ← tớch.

Vớ dụ:

mul bl; AL = 35 ng 8 clk

+ OR: Hoặc 2 toán hạng SI hoặc là địa chỉ offset của m

+ LOOP: Lặp đoạn ch−ơng trình

V nh: LOOP nhón

Thực hiện: Số lần lặp tr Khi cx = 0 ra khỏ 5 ký tự ‘A’

mov cx, 5 hien: mov dl, ‘A’

mov ah, 2

int 21h

loop hie

+ MOV: Di chuyển byte hay từ Viết lệnh

opy nội du mov al, 7 mov bl, 5 mov al, bl Sau đoạn lệnh này nội dung

+ MUL: Nhân số không dấu t lệnh: MUL gốc

hiện: Tuỳ theo độ dài của toỏn hạng g

o Nếu gốc là số 8 bit để trong AL: AL * gốc, số bị nhõn là số 8 bit để trong AL. Sau khi nhõn AX ← (adsbygoogle = window.adsbygoogle || []).push({});

Sau

mov al,7 mov bl,5

Viết lệnh: OR đớch, gốc

Thực hiện: Lấy nội dung của gốc OR với nội dung của gốc theo bit, kết quả cất vào đớch

Vớ dụ:

ng 1f1fh

+ OU i g

n đưa địa chỉ cổng qua thanh ghi DX. ngăn xếp

xếp

ỡnh 3.7) L đớch, CL

Thực hiện:

Hỡnh 3.8. Quay trỏi qua cờ nhớ

nội dung cũ của MSB. Nếu số lần quay hay đổi iện: RCR đớch, CL mov ax, 001fh mov bx, 1f00h or ax, bx; kết quả AX bằ T: Đ−a dữ l ệu từ Acc ra cổn Viết lệnh: OUT Port, Acc

Thực hiện: Port ← Acc. Đưa nội dung của thanh chứa ra Port. Khi địa chỉ cổng > ffh cầ

+ POP: Lấy lại 1 từ từ đỉnh Viết lệnh: POP đớch

Thực hiện: Đớch ← {SP} SP ← SP + 2

+ PUSH: Cất 1 từ vào ngăn Viết lệnh: PUSH gốc Thực hiện: gốc → {SP}

SP ← SP - 2

+ RCL: Quay trái qua cờ nhớ (h Viết lệnh: RC

CF MSB LSB

Sau khi quay 1 lần nội dung cờ CF mang trong CL là 9 thỡ kết quả khụng t + RCR: Quay phải qua cờ nhớ CF MSB LSB Viết lệnh: RCR đớch, CL Thực h Hỡnh 3.9. Quay phải qua cờ nhớ

Sau khi quay 1 lần nội dung cờ CF mang nội dung cũ của LSB. Nếu số lần quay thay đổi.

on g sang trái

Thực hiện:

MSB được đưa vào cờ CF và LSB.

g đổi. Sau 4 lần quay thỡ 2 nibble bị đổi chỗ. vòng sang phải

Thực hiện:

đổi. Sau 4 lần quay thỡ 2 nibble bị đổi chỗ.

SHL đớch, CL Toỏn hạng đớch cú thể tỡm được theo cỏc chếđộđịa chỉ c nhau

iện: (adsbygoogle = window.adsbygoogle || []).push({});

ụng dấu ớch, CL

Toỏn hạng đớch cú thể tỡm được theo cỏc chế độđịa chỉ khỏc nhau Thực hiện: được giữ lại. Thực hiện phộp chia 2 số cú dấu trong CL là 9 thỡ kết quả khụng + RET: Trở về từ ch−ơng trình c + ROL: Quay vòn Viết lệnh: ROL đớch, CL CF MSB LSB

Hỡnh 3.10. Quay vũng sang trỏi

Nếu sau 8 lần quay kết quả khụn

+ ROR: Quay MSB LSB CF

Viết lệnh: ROR đớch, CL LSB được đưa vào cờ CF và MSB.

Hỡnh 3.11. Quay vũng sang phải Nếu sau 8 lần quay kết quả khụng + SAL: Dịch trái số học Viết lệnh: SAL đớch, CL khỏ Thực h CF MSB LSB 0 Hỡnh 3.12 Thực hiện phộp nhõn 2 số kh + SAR: Dịch phải số học Viết lệnh: SAR đ CF MSB LSB . Dịch trỏi số học Hỡnh 3.13. Dịch phải số học Sau mỗi lần dịch phải MSB

+ SHR Dịch phải logic Viết lệnh: SAL đớch, CL

SHL đớch, CL Toỏn hạng đớch cú thể tỡm được theo cỏc chếđộđịa chỉ Thực hiện: a số khụng dấu gắt : SUB đớch, gốc Thực hiện: đ h - gốc Vớ dụ: 6 ỏn hạng tra. Xoỏ CF, OF. Cập nhật PF, SF, ZF. n hiệu mức thấp từ chân TEST hoặc INTR

+ XCHG: T

ội dung ah và al

Thực hiện phộp XOR theo bit giữa hai toỏn hạng. Kết quả cất vào đớch. ớ dụ: XOR AX, AX; xoỏ thanh ghi AX

khỏc nhau CF MSB LSB 0 Hỡnh 3.14. Dịch phải logic Thực hiện phộp chia cho 2 củ + STI: Lập cờ cho phép n IF ← 1 + SUB: Trừ 2 toán hạng Viết lệnh ớch ←đớc mov al,9 mov bl,3 sub bl,al; bl =

+ TEST: Và 2 toán hạng để tạo cờ Viết lệnh: TEST đớch, gốc

Thực hiện: Lấy gốc thực hiện phộp ‘VÀ’ với đớch. Nội dung to khụng thay đổi chỉ dựng để tạo cờ kiểm

+ WAIT: CPU nghỉ và chờ tí

ráo nội dung 2 toán hạng XCHG đớch, gốc

xchg ah, al; Trỏo đổi n

+ XOR: Hoặc loại trừ 2 toán hạng Viết lệnh: XOR đớch, gốc V

Một phần của tài liệu bai giang vi xu ly va LTHN 2013 (Trang 31 - 42)