Tập lệnh và cỏc Mode địa chỉ

Một phần của tài liệu giáo trình kiến trúc máy tính (Trang 25 - 49)

2.6.1. Tập lệnh của CPU Chức năng mỏy tớnh:

 Xửlớtin

 Truyềnthụng

Về cơ bản việc xử lớ thụng tin và truyền thụng đều dựa trờn nguyờn tắc thự hiện lệnh (Instruction).

Lệnh bao gồm:

 Mólệnh+Toỏnhạng

Toỏntử

Toỏn tử chứa mó lệnh dạng tượng trưng

 Mólệnh:chứcnăngcủathaotỏc

-23-

 Dẫn hướngbiờndịch:toỏntửchứatoỏntửgiả(pseudo_op),cỏctoỏntửgiảnàykhụng đượcdịchsangmómỏymàchỉbỏochochươngtrỡnhdịchlàmviệcgỡđú.

Toỏn hạng

 Toỏnhạng:xỏcđịnhdữliệusẽđượcthaotỏc

 Toỏnhạng:Đớch,Nguồn

2.6.2. Cỏc nhúm lệnh của CPU Ngụn ngữ mỏy (Machine Language):

Chươngtrỡnhđưavàobộnhớcho mỏythựchiệntheonhiềudạng,dạngcơbảnnhấtmà mỏycúthể hiểungayđượcgọi làngụnngữmỏy. TuỳtheoCPUmà ngụnngữmỏycúdạng nhấtđịnh, chươngtrỡnhviếtbằngngụnngữmỏythựchiệnrấtnhanhvàchiếmớtchỗ trongbộ nhớ,tuynhiờnchươngtrỡnhkhúviếtvàkhúnhớ.

Hợp ngữ (Assembly)

Ngụnngữ giỳplập trỡnh viờnviết chươngtrỡnhđẽ dàng hơn, thaycho ngụn ngữmỏy. Mộtlệnhcủahợpngữtươngđươngnhưmộtlệnhcủangụnngữmỏynhưngthayviếtchương trỡnhdướidạngnhịphõnsẽdựngkớhiệutượngtrưng.

Đểbiểu diễn cỏc nhúm lệnhCPU, dựngtập lệnhHợp ngữdựngcho VXL8086 Intel.

Cỏc nhúm lệnh bao gồm:  Nhúmlệnhcơsở  Cỏclệnhvàora  Nhúmlệnhsốhọc  Nhúmlệnhlogic  Cỏclệnhđiềukhiển,rẽnhỏnh. a.Nhúmlệnhcơsở

Lệnh MOV (move): chuyển dữ liệu giữa cỏc thanh ghi, giữa 1 thanh ghi và 1 ụ nhớ hoặctrựctiếp1sốvào1thanhghihayụnhớ

Cỳphỏp:

MOV đớch,nguồn; khụnglàmthayđổinộidungnguồn

Lệnh XCHG (exchange):hoỏnchuyểnnộidungcủa2thanhghi,1thanhghivà1ụnhớ Cỳphỏp:

XCHG đớch,nguồn

Lệnh LEA (load effective address):nạpđịachỉthực(hiệudụng)

Hàm 9hcủa ngắt21h yờu cầu địa chỉtương đốicủa chuỗikớ tự chứa trongDX, thựchiệnđiềunàydựnglệnhLEA

LEA đớch,nguồn

Đớch:thanhghicụngdụngchung Nguồn:ụnhớ

b.Nhúmlệnhvào/ra

CPUliờnlạcvới cỏcthiếtbịngoạiviquacỏcthanhghivào/rahaycỏccổngvào/ra. Cú 2lệnhtruynhậptrựctiếpcỏccổngđúlàlệnhINvàOUT,tuynhiờnớtsửdụng

Lệnh INT:dựngđểgọicỏcchươngtrỡnhconngắtcủaDOSvàBIOS Cỳphỏp:

IN số hiệu ngắt

Sốhiệungắtlà1sốxỏcđịnh1chươngtrỡnh(ngắtmềm)

-24-

Mó ASCII Kớ hiệu Chức năng điều khiển

7 BEL PhỏttiếngBớp

8 BS(backspace) Lựilại1kớtự

9 HT Tab

A LF(linefeed) Xuốngdũng

D CR(carryreturn) Xuốngdũng,vềđầudũng TaxemxộtcỏcngắtcủaDOS:

Ngắt20h:kếtthỳcchươngtrỡnh,1chươngtrỡnhcú thểdựngngắt20hđểtrảđiều khiểnvềchoDOS(dựngtrongchươngtrỡnhđuụi.COM)

Ngắt 22h -26h: cỏc phục vụ quản lý CTRL + BREAK, cỏc lỗi nghiờm trọng và truynhậptrựctiếpđĩa

Ngắt 27h:kếtthỳcchươngtrỡnhvàởlạithườngtrỳ

Ngắt 21h:gọicỏchàm:

Hàm0h:kếtthỳcchươngtrỡnh

Hàm1h:vàotừbànphớm:đợiđọc1kýtựtừthiếtbịvàochuẩnsauđúđưakớ tựđútớithiếtbịravàtrảvềmóASCIIcủadữliệutrongDL

• AH=01h

• AL=kớtựvào

Hàm2h:hiểnthị:đưakớtựtrongDLrathiếtbịrachuẩn

• AH=02h

• DL=kớtựra

Hàm5h:inra:đưadữliệutrongDLrathiếtbịin

• AH=5h

• DL=kớtựra

Hàm9h:inchuỗi:đưachuỗikớtựrathiếtbịchuẩn

• AH=9h

• DS:DXcontrỏđếnchuỗikớtựkếtthỳcbằng$

* Chỉ thị ADD (add) và SUB (subtract):Đượcsửdụngđểcộnghoặctrừnộidungcủa2 thanhghi,1thanhghivà1ụnhớhoặccộngtrừ1sốvàothanhghihay1ụnhớ

Cỳphỏp:

ADD đớch,nguồn SUB đớch,nguồn

Vớdụ:

SUB AX,DX; AXnhậngiỏtrịAX+DX ADD BL,5; BLnhậngiỏtrịBL+5 Chỳý:phộpcộng,trừtrựctiếpgiữacỏcụnhớlàkhụnghợplệ

* Chỉ thị INC (increment) và DEC (decrement): đượcsửdụngđể cộng,trừ 1vàonội dung1thanhghihayụnhớ

Cỳphỏp:

INC đớch

DEC đớch

-25-

Vớdụ:

INC WORD; WORDnhậngiỏtrịWORD+1

* Lệnh NEG (negavi):lệnhNEGdựngphủđịnhnộidungcủatoỏnhạngđớch,thaythế nộidungbởiphầnbự2

Cỳphỏp:

NEG đớch

Toỏnhạngđớchcúthểlà1thanhghihayụnhớ

* Cỏc lệnh MUL (Multiply) và IMUL (Integer MUL): Lệnhnhõn giỏtrị số học. Khi xột cỏcsố cú dấuvà khụngdấu thỡ kếtqủathực hiệnphộptoỏn làkhỏc nhau, vớicỏc sốcú dấutadựnglệnhIMUL,cỏcsốkhụngdấutadựnglệnhMUL

Cỳphỏp:

MUL toỏn hạng nguồn IMUL toỏn hạng nguồn

Khinhõncỏc bytevớinhau, 1 sốđược chứatrongtoỏnhạng nguồn, số cũnlạiđược giảthiếtđóchứatrongAL.Toỏnhạngnguồncúthểlà1thanhghihayụnhớ.

* Cỏc lệnh DIV (Device) và IDIV (Integer DIV):Lệnhchiasốhọc. Khixộtcỏcsốcú dấuvàkhụngdấuthỡkếtqủathựchiệnphộptoỏnlàkhỏcnhau,vớicỏcsốcúdấutadựnglệnh IDIV,cỏcsốkhụngdấutadựnglệnhDIV

Cỳphỏp:

DIV số chia

IDIV số chia

 Dạngbyte:số chia làthanhghi hayụ nhớ 1byte, sốbị chia:16bit được giả địnhchứatrongAXthương8bitchứatrongAL,sốdư8bittrongAH

 Dạngword:số chia 16bit, sốbịchia giảđịnhchứatrongDX:AX, thương16 bitchứatrongAX,sốdư16bittrongDX

c.

Cỏc lệnh logic dịch v à quay

* Cỏc lệnh logic: AND, OR, NOT, XOR:thayđổitừngbittrongmỏy Cỳphỏp:

AND đớch,nguồn

nếuDLchứamóASCIIcủakớtựđiềukhiển,hàmnàysẽthihànhchứcnăngđ

b.

OR đớch,nguồn XOR đớch,nguồn Ảnhhưởngtớicỏccờ: SF,ZF,PFphảnỏnhkếtquảlệnh AFkhụngxỏcđịnh CF,OF=0

LệnhAND:xoỏcỏcbitnhấtđịnhcủatoỏnhạngđớchtrongkhigiữnguyờncỏcbit cũnlại,cỏcbitcầnxoỏđượcANDvới0

Lệnh OR:thiết lậpcỏc bitxỏc địnhcủatoỏnhạngđớchkhivẫn giữnguyờncỏc bitcũnlại,cỏcbitcầnthiếtlậpđượcORvới1

LệnhXOR:đảocỏcbitxỏcđịnh

Sửdụng:

 ĐổimóASCIIcủa1sốthànhsốtươngứng:khiđọc1kớtựtừbànphớm,AL

sẽchứamóASCIIcủakớtựđúvỡvậydựnglệnhANDđổimóASCIIcủakớtựra

giỏtrịthậpphõntươngứng

-26-

Vớdụ:

 Số5móASCIIlà35hvỡvậykhiđổiragiỏtrịthậpphõnthựchiệnphộp:

AND AL,0Fh

 Đổichữthườngthànhchữhoa:

cúthểdựnglệnhSUB SUB đớch,20h

hoặcdựnglệnhAND: AND đớch,0DFh

 Xoỏ1thanhghi:

XOR đớch,nguồn; đớch=nguồn

Vớdụ:

MOV AX,0

SUB AX,AX

XOR AX,AX

 Kiểmtraxem1thanhghicúbằng0haykhụng:

OR đớch,nguồn; đớch=nguồn

Vớdụ:

OR CX,CX;(CMPCX,0)

* Lệnh NOT:lấysốbự1củatoỏnhạngđớch

Cỳphỏp:

NOT toỏn hạng đớch; khụng ảnh hưởng tới cờ

* Lệnh TEST:thực hiện phộp AND giữa toỏn hạng đớch với toỏn hạngnguồnnhưng khụnglàmthayđổitoỏnhạngđớchmàchỉthiếtlậpcờ

Cỳphỏp:

TEST toỏn hạng đớch,toỏn hạng nguồn

Cỏccờbịtỏcđộng: SF,ZF,PF:phảnỏnhkếtquả AF:khụngxỏcđịnh CF,OF=0 d. Cỏc lệnh dịch v à quay

Lệnhdịch:cỏcbitbịdịchrakhỏitoỏnhạngsẽbịmất

Lệnhquay:cỏcbitbịdịchra1phớacủatoỏnhạngđớchsẽđựơcđưatrởlạiphớa

bờnkiaquay1vịtrớ Cỳphỏp: Quay,dịch1vịtrớ Mó lệnh Toỏn hạng đớch,1 Quay,dịchNvịtrớ Mó lệnh Toỏn hạng đớch,CL; CL chứa N *Cỏclệnhdịchtrỏi L ệnh SHL(Shift Left):

Dịchcỏcbitcủatoỏnhạngsangtrỏi1vịtrớ:

SHL toỏn hạng đớch,1;

Giỏtrị0sẽđượcđưavàovịtrớbờnphảinhấtcủatoỏnhạng,cũnMSBcủanúsẽđược đưavàoCF Nvịtrớ

SHL toỏn hạng đớch,CL

-27-

Nphộpdịchtrỏisẽđượcthựchiện

CúthểdựnglệnhSHLđểthựchiệnphộpnhõnnhịphõn

L

ệnh SAL(Shift Arithmetic Left):TươngtựnhưlệnhSHL

L

ệnh SHR(Shift Right):

Dịchcỏcbitcủatoỏnhạngsangphải1vịtrớ:

SHR toỏn hạng đớch,1;

Giỏ trị0 sẽđược đưavàovịtrớbờntrỏinhấtcủatoỏnhạng,cũnLSBcủanú sẽđược đưavàoCF Nvịtrớ

SHR toỏn hạng đớch,CL

Nphộpdịchphảisẽđượcthựchiện

CúthểdựnglệnhSHRđểthựchiệnphộpchianhịphõn

L

ệnh SAR(Shift Arithmetic Right):TươngtựnhưlệnhSHR

*Cỏclệnhquay

L

ệnh ROL(Rotate Left) :

Dịchcỏcbớtcủatoỏnhạngsangtrỏi1vịtrớ:

ROL toỏn hạng đớch,1;

BitMSBsẽđượcdịchvàovịtrớbờnphảinhấtcủatoỏnhạng,đồngthờiđượcđưavào CFNvịtrớ

ROL toỏn hạng đớch,CL

Nphộpquaytrỏisẽđượcthựchiện

L

ệnh ROR(Rotate Right) :

Dịchcỏcbớtcủatoỏnhạngsangphải1vịtrớ:

ROR toỏn hạng đớch,1;

Bit bờnphải nhất (LSB) sẽđược dịch vào vịtrớ bờntrỏi (MSB)nhất của toỏnhạng, đồngthờiđượcđưavàoCFNvịtrớ

ROR toỏn hạng đớch,CL

Nphộpquayphảisẽđượcthựchiện

Vớdụ: đếmsốbit1cútrongthanhghiBXmàkhụnglàmthayđổinộidungBX, kết quảlưutrongAX

MOV CX,16;biếnđếmvũnglặp Top:

ROL BX,1

JNC Next;bit0?

INC AX;khụng,tăngbiếnđếmkếtquả Next:

LOOP Top;quaylại

LệnhRCL (RotateCarryLeft):quaytrỏiquacờnhớ

Dịchcỏc bớt củatoỏnhạng đớchsang trỏi. Bit MSB đượcđặt vào CF, giỏ trịcủa CF đượcđưavàobitphảinhất(LSB)củatoỏnhạngđớch

Cỳphỏp:

RCL toỏn hạng,1

hoặc

RCL toỏn hạng,CL

-28-

Kớ hiệu Chức năng Điều kiện nhảy

JG/JNLE Nhảy nếu lớn hơn, nhảy nếu khụng nhỏ hơn h ay

bằng (Jump if Greate, Jump if Not Less than

ZF=0vàSF=0

JGE/JNL Nhảy nếu lớn hơn hay bằng, nhảy nếu khụng nh ỏ

SF=OF JL/JNGE Nhảy nếu nhỏ hơn, nhảy nếu khụng lớn hơn h

ay

SF<>OF JLE/JNG Nhảynếu nhỏ hơn hoặc bằng, nhảynếu khụng l

ớn

ZF=1haySF=OF

Cỏc lệnh nhảy khụng dấu

JA/JNBE Nhảy nếu lớnhơn, nhảy nếu khụng nhỏ hơn ho ặc

CF=0vàZF=0 JAE/JNB/JNC Nhảynếukhụngnhớ(NoCarry) CF=0

JB/JNAE/JC Nhảynếucúnhớ CF=1

JBE/JNA Nhảynếunhỏhơnhaybằng CF=1hayZF=1

Cỏc lệnh nhảy điều kiện đơn

JE/JZ Nhảynếukếtquảbằngnhau,nhảynếukếtquảbằ ng

ZF=1 JNE/JNZ Nhảynếukhụngbằngnhau,nếukếtquảkhỏc0 ZF=0

JO Nhảynếutràn(JumpifOverflow) OF=1

L

ệnh RCR (Rotate Carry Right):quayphảiquacờnhớ

Dịchcỏcbớtcủatoỏnhạngđớchsangphải.BitLMSBđượcđặtvàoCF,giỏtrịcủaCF đượcđưavàobitphảinhất(LSB)củatoỏnhạngđớch

Vớdụ:đảocỏcbittrong1bytehay1word MOV CX,8;sốlầnlặp Everse:

SHL AL,1;lấy1bitvàoCF RCR BL,1;quay,đưavàoBL LOOP Reverse

MOV AL,BL;đưavàoAL

e.

Cỏc l ệnh điều khiển rẽ nhỏnh

Chophộpchọnlựavàlặplạicỏcđoạnmólệnh

* Cỏclệnhnhảycúđiềukiện

Cỳphỏp:

Tờn lệnh nhón đớch

Nếuđiềukiệncủalệnhnhảythoảmón,lệnhcúnhónđớchsẽđượcthựchiện.Lệnhnày cúthểởtrướchoặcsaulệnhnhảy.Nếuđiềukiệnkhụngthoảlệnhngay saulệnhnhảy đượcthựchiện

Phạmvicủalệnhnhảycúđiềukiện:

Nhónđớchphảiđứngtrướclệnhnhảykhụngquỏ126bytehoặcđứngsaulệnhnhảy khụngquỏ127byte

CPUthựchiện1lệnhnhảyntn?

 CPUdựavàothanhghicờđểđiềuchỉnhIPchỉđếnnhónđớch

Kớ hiệu Chức năng Điều kiện nhảy

JNO Nhảynếukhụngtràn OF=0

JS Nhảynếudấuõm(JumpifSigned) SF=1

JNS Nhảynếudấudương SF=0

JP/JPE Nhảy nếu chẵn (Jump if Parity, Jump if Parit y

PF=1 JNP/JPO Nhảynếulẻ(JumpifParityOdd) PF=0

CỏcđiềukiệnnhảythườngđượccungcấpbởilệnhCMP

Cỳphỏp:

CMP đớch,nguồn

Sosỏnhcỏctoỏntử đớchvới toỏntửnguồnbằngcỏch lấytoỏntửđớchtrừđitoỏntử nguồn

Toỏntửđớchkhụngthểlàhằngsố,cỏctoỏntửkhụngcựnglàụnhớ

Lệnh JMP (Jump)

LệnhJMPdẫnđếnviệcchuyểnđiềukhiểnkhụngđiềukiện

Cỳphỏp:

JMP đớch

Đớchphảilà1nhóntrongcựng1đoạnvớilệnhJMP

*Cấutrỳclặp

Lặp: cho phộp lặp lại 1 đoạn chương trỡnh nào đú, số lần lặp cú thể biết trước hoặc khụngbiếttrước Vũng lặp FOR FORsốlầnlặpDO cỏc dũng lệnh END_FOR Th ực hiện:dựnglệnhLOOP Cỳphỏp: LOOP nhón đớch

BộđếmvũnglặplàthanhghiCX,đượckhởitạobằngsốlầnlặp

Mỗi lầnthực hiện LOOP thanh ghi CX tự động giảm đi 1, và nếu CX<>0 thỡ điều khiểnđược chuyểntớinhón đớch. Nếu CX=0 thỡ lệnh tiếp theo LOOP sẽ được thực hiện

2.6.3. Hợp ngữ (Assembly)

a.Cỳphỏpcủa hợpngữ

Cỏc chương trỡnh hợp ngữ đượcdịch ra cỏc chỉ thị mỏybằng một chương trỡnh biờn dịchvỡvậykhiviếtphảiphựhợpvớicỏckhuụnmẫucủatrỡnhbiờndịchđú

Cỏcdũnglệnh:

Chươngtrỡnhlàtậphợpcủacỏcdũnglệnh,baogồm:

o Lệnhmàtrỡnhbiờndịchdịchramómỏy

o Lệnhdẫnhướngbiờndịch Cỳphỏp:

Tờn Toỏn tử Toỏn hạng Chỳ thớch

-30-

CỏctrườngcỏchnhauớtnhấtmộtdấucỏchhayTAB Vớdụ:

START: MOV CX,5 ;KhởitạoCX Tờntrường:

Sửdụng:Nhónlệnh,tờnthủtục,tờnbiến

Chươngtrỡnhbiờndịchchuyểncỏctờnthànhđịachỉbộnhớ

 Độdài:1đến31kớtự(khụngchứadấucỏch)

 Khụngbắtđầubởichữsố

 Khụngphõnbiệtchữhoa,chữthường

 Nếucúdấuchấm(.)phảiđặtởđầu Toỏntử

 Toỏntửchứamólệnhdạngtượngtrưng

 Mólệnh:chứcnăngcủathaotỏc

 Dẫn hướngbiờn dịch:toỏn tửchứa toỏn tử giả(pseudo_op), cỏc toỏn tử giả này khụng được dịch sang mó mỏy mà chỉ bỏo cho chương trỡnh dịch làm việcgỡđú.

Toỏnhạng

 Toỏnhạng:xỏcđịnhdữliệusẽđượcthaotỏc

 Toỏnhạng:Đớch,Nguồn Lờigiảithớch

Đặtsaudấu;vàgiảithớchxemdũnglệnhđúlàmgỡ Dữliệuchươngtrỡnh

Biểudiễndữliệudướidạngsốnhịphõn,thậpphõn,hexathậmchớkớtự

 Sốnhịphõn:kếtthỳcbằngBhoặcb

 Sốthậpphõn:kếtthỳcbằngDhoặcd

 Sốhexa:kếtthỳcbằngHhoặch,bắtđầubằngchữsốthậpphõn Cỏckýtự:baotrongdấunhỏykộp“”

Cỏctoỏntửgiảđịnhnghĩasốliệu DB byte

DW word(2byte)

DD doubleword(2word) DQ quardword(4word) DT 10byteliờntiếp

b.Cỏcbiến

Mỗibiếncúmộtkiểudữliệuvàđượcchươngtrỡnhgỏnchomộtđịachỉbộnhớ BiếnkiểuByte

Địnhnghĩa:

Tờn DB giỏ trị khởi tạo

Vớdụ:

ALPHA DB 4

Giớihạnthậpphõncủacỏcgiỏtrịkhởitạo:-128đến127hoặc0đến255 Nếudựngdấu?thỡbiếnkhụngđượckhởitạo

BiếnkiểuWord Địnhnghĩa:

Tờn DW giỏ trị khởi tạo

-31-

vớdụ:

ALPHA DW ?

BiếnkiểuMảng

Mảng:chuỗibytenhớhaytừnhớ Địnhnghĩa:

Tờn Kiểu giỏ trị khởi tạo

Phầntửđầutiờncủamảngchớnhlàtờnmảng

 Mảngbyte:tờn+1làphầntửtiếptheo

 Mảngword:tờn+1làphầntửtiếptheo vớdụ:

phầntử1:ARRAY phầntử2:ARRAY+1 phầntử3:ARRAY+2

Chỳý:bytethấpvàbytecaotrongmộttừ

Một phần của tài liệu giáo trình kiến trúc máy tính (Trang 25 - 49)

Tải bản đầy đủ (DOCX)

(101 trang)
w