Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPVI_Spausdinti2003M.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
3.88 Mб
Скачать

19. Aritmetinės ir loginės komandos

Komandos skirtos aritmetinės sudėties, atimties, loginės daugybos, sumos, išskirtinio “ARBA”, duomenų palyginimo, dešimtainės korekcijos, postūmių, inkrementavimo ir dekrementavimo operacijoms atlikti. Aritmetinių ir loginių komandų grupė yra gausiausia. Ją sudaro 26 bazinės komandos. Visas komandų sąrašas pateiktas 2 lentelėje. Atskiros komandos vykdo šias operacijas:

  • ADD, ADC, ADI, ACI, DAD – aritmetinės sudėtis;

  • SUB, SBB, SUI, SBI – aritmetinės atimtis;

  • ANA, ANI – loginė daugyba (loginis “IR”);

  • ORA, ORI – loginė suma (loginis “ARBA”);

  • XRA, XRI – išskirtinis “ARBA”;

  • CMP, CPI – duomenų palyginimas;

  • DAA – dešimtainė korekcija;

  • RLC, RAL – postūmis į kairę;

  • RRC, RAR – postūmis į dešinę;

  • INR, INX – didinimas 1 (inkrementavimas);

  • DCR, DCX – mažinimas 1 (dekrementavimas).

Dauguma komandų atlieka veiksmus su duomenų baitais (DB), tačiau DAD, INX, DCX komandos vykdo operacijas su duomenų žodžiais (DW). Visos komandos keičia požymius, išskyrus dvi komandas: INX, DCX.

Visose aritmetinėse ir loginėse baitinėse operacijose naudojamas akumuliatorius, kaip vienas operando šaltinis ir rezultato imtuvas, o antrasis operandas yra nurodytas registras (A, B, C, D, E, H, L), pseudoregistras M (atminties ląstelė, kurios adresas nurodytas HL registrų poroje) arba duomenų baitas betarpiškai įrašytas komandoje. Taigi šiose komandose naudojamas tiesioginis, netiesioginis registrų ir betarpiškas adresavimo būdai.

2 Lentelė. Aritmetinės ir loginės komandos

Eil.

Nr.

Komandos

mnemonika

Baitai

Komandos

komentaras

1.

ADD R / M

1

A ← A+R / A ← A+M[HL]

2.

ADC R / M

1

A ← A+R+CY/A ← A+M[HL]+CY

3.

SUB R / M

1

A ← A-R / A ← A-M[HL]

4.

SBB R / M

1

A ← A-R-CY/A ← A-M[HL]-CY

5.

ANA R / M

1

A ← A AND R / A ← A AND M[HL]

6.

ORA R / M

1

A ← A OR R / A ← A OR M[HL]

7.

XRA R / M

1

A ← A XOR R / A ← A XOR M[HL]

8.

CMP R / M

1

A-R / A-M[HL]

9.

ADI D8

2

A ← A+D8

10.

ACI D8

2

A ← A+D8+CY

11.

SUI D8

2

A ← A-D8

12.

SBI D8

2

A ← A-D8-CY

13.

ANI D8

2

A ← A AND D8

14.

ORI D8

2

A ← A OR D8

15.

XRI D8

2

A ← A XOR D8

16.

CPI D8

2

A-D8

17.

DAD RP

1

HL ← HL+RP

18.

DAA

1

sudėties dešimtainė korekcija

19.

RLC

1

CY←A7 ← A6 ... A1 ← A0 ←A7

20.

RRC

1

A0 →A7 → A6 ... A1 A0 → CY

21.

RAL

1

CY←A7 ← A6 ... A1 ← A0 ← CY

22.

RAR

1

CY →A7 → A6 ... A1 A0 → CY

23.

INR R / M

1

R ← R+1/ M[HL] ←M[HL]+1

24.

DCR R / M

1

R ← R-1/ M[HL] ←M[HL]-1

25.

INX RP

1

RP ← RP+1

26.

DCX RP

1

RP ← RP-1

Dvibaitėje aritmetinės sudėties DAD komandoje akumuliatoriaus funkcijas atlieka HL registrų pora, kurios turinys sudedamas su nustatytos registrų poros (BC, DE, HL ir registro SP) turiniu, įsimenant rezultatą HL RP. DAD komanda keičia tik CY požymį.

Atliekant aritmetinės sudėties ADD komandą, kai sudedami du baitai pateikti paprastąjame dvejetainiame dešimtainiame (2/10 – kodas, BCD – angl. Binary Code Decimal kodas) kode, gautojo A registre rezultato dešimtainei korekcijai naudojama DAA komanda. Ši komanda tikrina CY, AC požymius ir koreguoja rezultatą taip, kad būtų gautas teisingas 2/10 kodo skaičius. DAA komanda įrašoma programoje po ADD komandos. Duomenų apdorojimas tiesiogiai skaitmeniniame 2/10 kode dažnai taikomas sistemose, naudojančiose dešimtainių skaičių įvesties ir išvesties įtaisus (pvz. staklių skaitmeninio programinio valdymo sistemose), nes nereikalauja tarpinių transformacijų 2/10 kodo į dvejetainį ir atvirkščiai.

Dvejetainis dešimtainis kodas turi du formatus:

  • paprastąjį (suglaustą);

  • išplėstinį.

Paprastąjame dvejetainiame dešimtainiame formate bet kuriam dešimtainiam skaičiui nuo 0 iki 9 yra skirtos 4 skiltys (tetrada) dvejetainio kodo, turinčio nuo 0000B iki 1001B vertes, o kodai 1010B ... 1111B nenaudojami. Viename dvejetainio kodo baite galima koduoti 2 dešimtainius skaičius nuo 00 iki 99. Didesniems dešimtainiams skaičiams reikia daugiau baitų (1 baitas dviem skaitmenims).

Išplėstiniame dvejetainiame dešimtainiame formate kiekvienam dešimtainiui skaičiui skirtas vienas baitas, kuriame panaudota tik jaunesnioji tetrada. Baito vyresnioji tetrada nenaudojama, jos kodas yra 0000B. Išplėstinis formatas, palyginus su paprastuoju, reikalauja dvigubai didesnės atminties dvejetainiams dešimtainiams skaičiams saugoti. Tačiau šis formatas labai gerai derinasi su tekstiniu ASCII (angl. American Standart Code for Information Interchange) kodu, kuris naudojamas išoriniams mainams tarp asmeninio kompiuterio ir įšorinių įrenginių (pvz. skaitmeninės sistemos). Pastarasis kodas gaunamas išplėstinio 2/10 kodo vyresniojoje tetradoje įrašius skaitmens požymį – 0011B (3H) koda.

Dvejetainiai dešimtainiai skaičiai gali turėti ženklą. Dvejetainių dešimtainių skaičių ženklui žymėti naudojama atskira tetrada (paprastasis 2/10 kodas) arba baitas (išplėstinis 2/10 kodas), išdėstomi skaičiaus pradžioje. „+“ ženklas koduojamas 0000B, o „–“– 1001B bitų kombinacijomis.

Postūmio komandos skirtos akumuliatoriaus turiniui paslinkti per vieną bitą į kairę arba dešinę.

RLC, RAL postūmio į kairę komandų veikimą galima pavaizduoti grafiškai, kaip parodyta 39 pav.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]