background image

ORGANIZACJA I 

ORGANIZACJA I 

REALIZACJA ROZKAZÓW 

REALIZACJA ROZKAZÓW 

(1)

(1)

Rozkazy przesłań

Rozkazy przesłań

Rozkazy arytmetyczne i logiczne

Rozkazy arytmetyczne i logiczne

background image

Rozkazy przesłań:

Rozkazy przesłań:

MOV - 

MOV - 

move

move

 - przesłanie słowa między dwoma rejestrami

 - przesłanie słowa między dwoma rejestrami

STR - 

STR - 

store 

store 

- przesłanie słowa ze wskazanego w rozkazie rejestru do 

- przesłanie słowa ze wskazanego w rozkazie rejestru do 

komórki pamięci

komórki pamięci

LD - 

LD - 

load

load

 - przesłanie słowa z pamięci do wskazanego rejestru

 - przesłanie słowa z pamięci do wskazanego rejestru

XCH - 

XCH - 

exchange 

exchange 

- wymiana zawartości rejestrów 

- wymiana zawartości rejestrów 

Rozkazy arytmetyczno-logiczne:

Rozkazy arytmetyczno-logiczne:

ADD - 

ADD - 

addition

addition

 - dodawanie

 - dodawanie

SUB - 

SUB - 

subtraction 

subtraction 

- odejmowanie

- odejmowanie

MUL - 

MUL - 

multiplication

multiplication

 - mnożenie

 - mnożenie

DIV - 

DIV - 

division 

division 

- dzielenie

- dzielenie

NEG - 

NEG - 

negate 

negate 

- negacja

- negacja

DEC - 

DEC - 

decrement 

decrement 

- zmniejszanie wartości o 

- zmniejszanie wartości o 

jeden

jeden

INC - 

INC - 

increment

increment

 - awiększanie wartości o 

 - awiększanie wartości o 

jeden

jeden

Rozkazy sterujące pracą programu:

Rozkazy sterujące pracą programu:

JMP - 

JMP - 

jump

jump

 - skok bezwarunkowy do wyspecyfikowanego miejsca w 

 - skok bezwarunkowy do wyspecyfikowanego miejsca w 

pamięci

pamięci

CALL - 

CALL - 

jump to subroutine 

jump to subroutine 

- wywołanie podprogramu

- wywołanie podprogramu

RET - 

RET - 

return

return

 - skok powrotny z podprogramu

 - skok powrotny z podprogramu

SKIP - 

SKIP - 

skip 

skip 

- przeskok przez jeden rozkaz

- przeskok przez jeden rozkaz

Rozkazy sterujące pracą procesora :

Rozkazy sterujące pracą procesora :

HALT - 

HALT - 

stop

stop

 - zatrzymanie wykonania programu

 - zatrzymanie wykonania programu

NOP - 

NOP - 

no operation 

no operation 

- rozkaz pusty

- rozkaz pusty

AND - 

AND - 

conjuction

conjuction

 - iloczyn

 - iloczyn

OR - 

OR - 

disjunction 

disjunction 

- suma

- suma

EXOR - 

EXOR - 

exclusive-OR

exclusive-OR

 -suma mod 2

 -suma mod 2

NOT - 

NOT - 

complement 

complement 

- negacja

- negacja

LISTA ROZKAZÓW - PRZYKŁADY 

ROZKAZÓW

background image

ROZKAZ PRZESYŁANIA DANYCH

ROZKAZ PRZESYŁANIA DANYCH

Zostanie  przedstawiony  jeden  podstawowy 
rozkaz

MOV

background image

Instrukcja 

MOV 

należy 

do 

grupy 

instrukcji 

przesyłania danych i stanowi jeden z podstawowych 
rozkazów używanych w asemblerze.

Zadaniem  jej  jest  kopiowanie  danej  z  jednego  do 
drugiego  miejsca  (nie  można  jednak  przesyłać 
danych  między  komórkami  pamięci  -  musi  się  to 
odbywać poprzez rejestr procesora). 

Przykład:

Przykład:

     

     

mov 

mov 

operand1,operand2

operand1,operand2

źródło (skąd lub 

źródło (skąd lub 

co?)

co?)

cel (gdzie?)

cel (gdzie?)

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

background image

Tryb rejestrowy

W zależności od trybu adresowania użycie tej instrukcji może 
wyglądać:

Przykład:

Przykład:

MOV AX,BX

MOV AX,BX

0000000100010

0000000100010

111

111

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

AX

AX

BX

BX

CX

CX

DX

DX

rejestry przed 

rejestry przed 

wykonaniem 

wykonaniem 

rozkazu

rozkazu

rejestry po 

rejestry po 

wykonaniu rozkazu

wykonaniu rozkazu

AX

AX

BX

BX

CX

CX

DX

DX

Jeżeli  argument  znajduje  się  w  rejestrze,  to  tryb  adresowania  nazywa 

się  trybem  rejestrowym  (register  mode).  Można  zauważyć,  że  rozkaz 

zawiera  numer  rejestru  procesora,  w  którym  przechowywany  jest 

argument operacji.

KOD 

KOD 

OPERACJI

OPERACJI

NR REJESTRU

NR REJESTRU

BLOK REJESTRÓW

BLOK REJESTRÓW

ARGUMENT

ARGUMENT

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

background image

Tryb natychmiastowy

Przykład:

Przykład:

MOV CL,5DH

MOV CL,5DH

0000000100010

0000000100010

111

111

0000000000100

0000000000100

011

011

0000000000010

0000000000010

000

000

0000000000000

0000000000000

000

000

0000000000100

0000000000100

011

011

00000000

00000000

01011

01011

101

101

0000000000000

0000000000000

000

000

AX

AX

BX

BX

CX

CX

DX

DX

rejestry przed 

rejestry przed 

wykonaniem 

wykonaniem 

rozkazu

rozkazu

rejestry po 

rejestry po 

wykonaniu rozkazu

wykonaniu rozkazu

AX

AX

BX

BX

CX

CX

DX

DX

5D

5D

01011101

01011101

0000000100010

0000000100010

111

111

Jeżeli  argument  znajduje  się  w  kodzie  rozkazu,  to  tryb  adresowania 

nazywa  się  trybem  natychmiastowym  (immediate  mode).  Można 

zauważyć,  że  stała  8-,  16-  czy  32-bitowa  jako  argument  źródłowy 

zawarta  jest  w  rozkazie  (umieszczona  tam  przez  asembler),  a  nie  w 

rejestrze czy komórce pamięci.

KOD 

KOD 

OPERACJI

OPERACJI

ARGUMENT

ARGUMENT

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

background image

Jeśli adres znajduje się w rejestrze, to tryb taki nazywany jest trybem 
adresowania  pośredniego  przez  rejestr  (register  indirect  mode). 
Wykorzystuje się rejestry: bazowy (BX), wskaźnik bazy (BP - odnosi się 
do rejestru SS), indeksowy (SI lub DI). 

KOD OPERACJI

NR REJESTRU

BLOK REJESTRÓW

BLOK REJESTRÓW

ADRES 

ADRES 

ARGUMENTU

ARGUMENTU

SEGMENT DANYCH

SEGMENT DANYCH

ARGUMENT

ARGUMENT

...............

...............

Tryb adresowania pośredniego przez rejestr (1/2) 

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

background image

Rejestr  jako  argument  pośredni  zapisuje  się  w  asemblerze  w  nawiasie 

kwadratowym (w odróżnieniu od rejestru jako argumentu). 

Przykład: 

 MOV AX,BX     do rejestru AX ładowana jest zawartość rejestru 

BX

Tryb adresowania pośredniego przez rejestr (2/2) 

 

 

MOV AX,[BX]   do rejestru AX ładowana jest zawartość komórki 

MOV AX,[BX]   do rejestru AX ładowana jest zawartość komórki 

pamięci, której adres od początku segmentu danych (offset) 

pamięci, której adres od początku segmentu danych (offset) 

określa rejestr BX

określa rejestr BX

MOV BX,0001

MOV BX,0001

.........................

.........................

MOV AX,[BX]

MOV AX,[BX]

000

000

0

0

000

000

1

1

000

000

2

2

000

000

3

3

000

000

4

4

8B

8B

1A

1A

1A8B

1A8B

AX 

AX 

=

=

0001

0001

BX 

BX 

=

=

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

bajt o adresie młodszym

bajt o adresie młodszym

bajt o adresie starszym 

bajt o adresie starszym 

młodszy bajt         starszy 

młodszy bajt         starszy 

bajt 

bajt 

background image

Przykład:  Stosując  tryb  adresowania  pośredniego  przez  rejestr 

Przykład:  Stosując  tryb  adresowania  pośredniego  przez  rejestr 

chcemy  w  akumulatorze  umieścić  bajt  pamięci  o  adresie 

chcemy  w  akumulatorze  umieścić  bajt  pamięci  o  adresie 

0C3F:0100

0C3F:0100

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

background image

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

Zasadnicze ograniczenia instrukcji MOV:

Zasadnicze ograniczenia instrukcji MOV:

MOV nie może przenosić danych z jednej komórki pamięci 

MOV nie może przenosić danych z jednej komórki pamięci 

do innej, np. instrukcja:

do innej, np. instrukcja:

            

            

MOV [SI],[BX]  w procesie kompilacji będzie błędem

MOV [SI],[BX]  w procesie kompilacji będzie błędem

MOV  nie  może  przenosić  zawartości  jednego  rejestru 

MOV  nie  może  przenosić  zawartości  jednego  rejestru 

segmentowego do innego np. instrukcja:

segmentowego do innego np. instrukcja:

            

            

MOV CS,DS  w procesie kompilacji będzie błędem

MOV CS,DS  w procesie kompilacji będzie błędem

   

   

Toteż  by  np.  przenieść  zawartość  rejestru  DS  do  CS  trzeba 

Toteż  by  np.  przenieść  zawartość  rejestru  DS  do  CS  trzeba 

wpierw                      przenieść  zawartość  DS  do  innego  rejestru 

wpierw                      przenieść  zawartość  DS  do  innego  rejestru 

ogólnego przeznaczenia i dopiero jego zawartość do CS, np.

ogólnego przeznaczenia i dopiero jego zawartość do CS, np.

            

            

MOV AX,DS    

MOV AX,DS    

;AX:=DS

;AX:=DS

            

            

MOV CS,AX    

MOV CS,AX    

;CS:=AX

;CS:=AX

MOV  nie  może  przenosić  danych  natychmiastowych  do 

MOV  nie  może  przenosić  danych  natychmiastowych  do 

rejestru segmentowego, np. instrukcja:

rejestru segmentowego, np. instrukcja:

            

            

MOV CS,0B80H  w procesie kompilacji będzie błędem

MOV CS,0B80H  w procesie kompilacji będzie błędem

MOV  nie  może  przenosić  jednej  z  8-bitowych  połówek 

MOV  nie  może  przenosić  jednej  z  8-bitowych  połówek 

rejestru do rejestrów 16-bitowych i odwrotnie.

rejestru do rejestrów 16-bitowych i odwrotnie.

background image

ROZKAZ PRZESYŁANIA DANYCH - 

ROZKAZ PRZESYŁANIA DANYCH - 

MOV

MOV

Zobacz  jak  może  wyglądać  realizacja  rozkazów  przesyłania 
danych 

zrealizowana 

wykorzystaniem 

symulatora 

procesora  SMS32v50

program: 

in_mov1.asm

background image

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

Zostaną przedstawione rozkazy

NOT

AND

OR

XOR

 

background image

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

Wszystkie te rozkazy, których działanie jest oparte 

Wszystkie te rozkazy, których działanie jest oparte 

bezpośrednio 

na 

zasadach 

logiki 

nazywamy 

bezpośrednio 

na 

zasadach 

logiki 

nazywamy 

rozkazami logicznymi. 

rozkazami logicznymi. 

Rozkazy  te  operują  na  poszczególnych  bitach 

Rozkazy  te  operują  na  poszczególnych  bitach 

wewnątrz  rejestrów  czy  komórek  pamięci.  Z  tego 

wewnątrz  rejestrów  czy  komórek  pamięci.  Z  tego 

też  względu  rozkazy  logiczne  (wraz  z  rozkazami 

też  względu  rozkazy  logiczne  (wraz  z  rozkazami 

przesunięć) 

często 

są 

nazywane 

rozkazami 

przesunięć) 

często 

są 

nazywane 

rozkazami 

operowania na bitach.

operowania na bitach.

Do najważniejszych rozkazów tej grupy należą:

Do najważniejszych rozkazów tej grupy należą:

Negacja logiczna (bajtu lub słowa) - NOT

Negacja logiczna (bajtu lub słowa) - NOT

Mnożenie logiczne (bajtu lub słowa) - AND

Mnożenie logiczne (bajtu lub słowa) - AND

Dodawanie logiczne (bajtów lub słów) - OR

Dodawanie logiczne (bajtów lub słów) - OR

Logiczna nierównoważność (bajtów lub słów) - XOR

Logiczna nierównoważność (bajtów lub słów) - XOR

background image

Rozkaz  NOT  neguje  logicznie  bity  argumentu,  tzn. 
odwraca  stan  każdego  bitu  rejestru  lub  komórki 
pamięci.  Nie  wpływa  na  stan  rejestru  znaczników 
(flag). 

Przykład: 

jeśli  do  rejestru  BL  przesłano  liczbę 

9C

H  = 

10011100B

,  to  po  użyciu  rozkazu 

NOT  BL

otrzymamy: 

01100011B

 = 

63

H. 

MOV BL,9C

NOT BL

;ładuj do BL wartość 9CH = 10011100B

;w BL otrzymamy liczbę 01100011 B = 63H

W języku asemblera można to przedstawić jako:

ROZKAZ NEGACJI LOGICZNEJ - 

ROZKAZ NEGACJI LOGICZNEJ - 

NOT

NOT

background image

Rozkaz  AND  wykonuje  mnożenie  logiczne  odpowiadających  sobie  bitów 

Rozkaz  AND  wykonuje  mnożenie  logiczne  odpowiadających  sobie  bitów 

dwóch  argumentów  (operandów)  i  umieszcza  wynik  w  miejscu  lewego 

dwóch  argumentów  (operandów)  i  umieszcza  wynik  w  miejscu  lewego 

argumentu (operandu). 

argumentu (operandu). 

Bit wyniku ma wartość 1 wówczas, gdy odpowiadające sobie bity w obydwu 

Bit wyniku ma wartość 1 wówczas, gdy odpowiadające sobie bity w obydwu 

argumentach  mają  wartość  1,  w  pozostałych  przypadkach  bit  wyniku  ma 

argumentach  mają  wartość  1,  w  pozostałych  przypadkach  bit  wyniku  ma 

wartość 0. 

wartość 0. 

Przykład

Przykład

jeśli  do  rejestru  AL  przesłano  liczbę 

jeśli  do  rejestru  AL  przesłano  liczbę 

9C

9C

H  = 

H  = 

10011100B

10011100B

,  a  do  BL 

,  a  do  BL 

4C

4C

H  = 

H  = 

01001100B

01001100B

 

to  po  użyciu  rozkazu 

to  po  użyciu  rozkazu 

AND  AL,BL

AND  AL,BL

  otrzymamy  w 

  otrzymamy  w 

rejestrze AL liczbę

rejestrze AL liczbę

 0C

 0C

H = 

H = 

00001100B

00001100B

ROZKAZ MNOŻENIA LOGICZNEGO - 

ROZKAZ MNOŻENIA LOGICZNEGO - 

AND

AND

background image

Rozkaz  OR  wykonuje  dodawanie  logiczne  odpowiadających  sobie  bitów  dwóch 

Rozkaz  OR  wykonuje  dodawanie  logiczne  odpowiadających  sobie  bitów  dwóch 

argumentów  (operandów)  i  umieszcza  wynik  w  miejscu  lewego  argumentu 

argumentów  (operandów)  i  umieszcza  wynik  w  miejscu  lewego  argumentu 

(operandu). 

(operandu). 

Bit  wyniku  ma  wartość  O  wówczas,  gdy  odpowiadające  sobie  bity  w  obydwu 

Bit  wyniku  ma  wartość  O  wówczas,  gdy  odpowiadające  sobie  bity  w  obydwu 

argumentach mają wartość O, w pozostałych przypadkach bit wyniku ma wartość 

argumentach mają wartość O, w pozostałych przypadkach bit wyniku ma wartość 

1. 

1. 

Przykład

Przykład

jeśli  do  rejestru  AL  przesłano  liczbę 

jeśli  do  rejestru  AL  przesłano  liczbę 

9C

9C

H  = 

H  = 

10011100B

10011100B

,  a  do  BL 

,  a  do  BL 

4C

4C

H  = 

H  = 

01001100B

01001100B

 

to  po  użyciu  rozkazu 

to  po  użyciu  rozkazu 

OR  AL,BL

OR  AL,BL

  otrzymamy  w  rejestrze  AL 

  otrzymamy  w  rejestrze  AL 

liczbę 

liczbę 

DC

DC

H = 

H = 

11011100B

11011100B

ROZKAZ DODAWANIA LOGICZNEGO - 

ROZKAZ DODAWANIA LOGICZNEGO - 

OR

OR

background image

Rozkaz 

XOR 

wykonuje 

funkcję 

nierównoważnści 

(sumę 

modulo 

2) 

Rozkaz 

XOR 

wykonuje 

funkcję 

nierównoważnści 

(sumę 

modulo 

2) 

odpowiadających  sobie  bitów  dwóch  argumentów  (operandów)  i  umieszcza 

odpowiadających  sobie  bitów  dwóch  argumentów  (operandów)  i  umieszcza 

wynik w miejscu lewego argumentu (operandu).

wynik w miejscu lewego argumentu (operandu).

Bit wyniku przyjmuje wartość 1 tylko wówczas, gdy odpowiadające sobie bity w 

Bit wyniku przyjmuje wartość 1 tylko wówczas, gdy odpowiadające sobie bity w 

obydwu  argumentach  mają  wartość  przeciwną.  Rozkaz  XOR  może  być  użyty  do 

obydwu  argumentach  mają  wartość  przeciwną.  Rozkaz  XOR  może  być  użyty  do 

odwrócenia  ustawień  wybranych  bitów  bądź  też  do  określenia,  który  z  bitów 

odwrócenia  ustawień  wybranych  bitów  bądź  też  do  określenia,  który  z  bitów 

dwóch argumentów różni się od siebie. 

dwóch argumentów różni się od siebie. 

Przykład

Przykład

jeśli  do  rejestru  AL  przesłano  liczbę 

jeśli  do  rejestru  AL  przesłano  liczbę 

9C

9C

H  = 

H  = 

10011100B

10011100B

 

 

01001100B

01001100B

 

to 

to 

po użyciu rozkazu 

po użyciu rozkazu 

XOR AL, 4CH

XOR AL, 4CH

 otrzymamy w rejestrze AL liczbę 

 otrzymamy w rejestrze AL liczbę 

D0

D0

11010000B

11010000B

ROZKAZ NIERÓWNOWAŻNOŚCI 

ROZKAZ NIERÓWNOWAŻNOŚCI 

LOGICZNEJ - XOR

LOGICZNEJ - XOR

background image

Zobacz  jak  może  wyglądać  realizacja  rozkazów  logicznych 
zrealizowana  z  wykorzystaniem  symulatora  procesora   
SMS32v50

program: logic.asm

ROZKAZY LOGICZNE

ROZKAZY LOGICZNE

background image

ROZKAZY ARYTMETYCZNE 

ROZKAZY ARYTMETYCZNE 

Do najważniejszych rozkazów tej grupy należą:

Do najważniejszych rozkazów tej grupy należą:

Dodawanie - ADD, ADC

Dodawanie - ADD, ADC

Odejmowanie - SUB, SBB

Odejmowanie - SUB, SBB

Mnożenie - MUL, IMUL

Mnożenie - MUL, IMUL

Dzielenie - DIV, IDIV

Dzielenie - DIV, IDIV

Powielanie długości argumentu - CBW, CWD

Powielanie długości argumentu - CBW, CWD

Negacja lub uzupełnienie do dwóch - NEG

Negacja lub uzupełnienie do dwóch - NEG

Inkrementacja i dekrementacja - INC, DEC

Inkrementacja i dekrementacja - INC, DEC

Porównywanie przeznaczenia ze źródłem - CMP

Porównywanie przeznaczenia ze źródłem - CMP

background image

Dodawania całkowite dokonujemy za pomocą rozkazu ADD

Dodawania całkowite dokonujemy za pomocą rozkazu ADD

ADD argument1,argument2

ADD argument1,argument2

rejestr

rejestr

komórka pamięci (z pewnymi 

komórka pamięci (z pewnymi 

wyjątkami)

wyjątkami)

rejestr

rejestr

komórka pamięci (z pewnymi 

komórka pamięci (z pewnymi 

wyjątkami)

wyjątkami)

dana natychmiastowa

dana natychmiastowa

Do 

Do 

argumentu1

argumentu1

 dodaj 

 dodaj 

argument2

argument2

 i wynik zapisz w 

 i wynik zapisz w 

argument1

argument1

Przykłady:

Przykłady:

ADD AL,BL

ADD AL,BL

ADD AL,4Ch

ADD AL,4Ch

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

(zależne od wyniku dodawania):

(zależne od wyniku dodawania):

OF - flaga nadmiaru 

OF - flaga nadmiaru 

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

DODAWANIE

DODAWANIE

background image

Zobaczmy dwa przykłady realizacji dodawania:

Zobaczmy dwa przykłady realizacji dodawania:

1.

1.

DODAWANIE

DODAWANIE

background image

2.

2.

DODAWANIE

DODAWANIE

background image

Zadanie

Zadanie

: dodaj zawartość komórki pamięci DS:0100 do 

: dodaj zawartość komórki pamięci DS:0100 do 

DS:102

DS:102

Dodawanie zawartości komórki pamięci do zawartości 

Dodawanie zawartości komórki pamięci do zawartości 

komórki pamięci jest niedozwolone

komórki pamięci jest niedozwolone

ADD word ptr DS:[100], word ptr DS:[102]

ADD word ptr DS:[100], word ptr DS:[102]

DODAWANIE

DODAWANIE

Można to jednak wykonać – zobacz przykład 

Można to jednak wykonać – zobacz przykład 

background image

Zadanie

Zadanie

: dodaj zawartość komórki pamięci DS:0100 do 

: dodaj zawartość komórki pamięci DS:0100 do 

DS:102

DS:102

10H

10H

+50H

+50H

60H

60H

DODAWANIE

DODAWANIE

background image

Dodawania całkowite bajtów lub słów z uwzględnieniem przeniesienia z 

Dodawania całkowite bajtów lub słów z uwzględnieniem przeniesienia z 

dolnego do górnego bajtu dokonujemy za pomocą rozkazu ADC

dolnego do górnego bajtu dokonujemy za pomocą rozkazu ADC

ADC argument1,argument2

ADC argument1,argument2

rejestr

rejestr

komórka pamięci (z pewnymi 

komórka pamięci (z pewnymi 

wyjątkami)

wyjątkami)

rejestr

rejestr

komórka pamięci (z pewnymi 

komórka pamięci (z pewnymi 

wyjątkami)

wyjątkami)

dana natychmiastowa

dana natychmiastowa

Do 

Do 

argumentu1

argumentu1

 dodaj 

 dodaj 

argument2 

argument2 

i przeniesienie CF a wynik zapisz w 

i przeniesienie CF a wynik zapisz w 

argument1

argument1

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od 

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od 

wyniku dodawania):

wyniku dodawania):

OF - flaga nadmiaru 

OF - flaga nadmiaru 

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

Rozkaz ten musi występować zawsze po rozkazie ADD, gdyż dopiero po rozkazie 

Rozkaz ten musi występować zawsze po rozkazie ADD, gdyż dopiero po rozkazie 

ADD może  być wiadomo, że występuje (bądź nie występuje) przeniesienie. W 

ADD może  być wiadomo, że występuje (bądź nie występuje) przeniesienie. W 

przypadku gdyby nie było przeniesienia to rozkaz ADC zadziała dokładnie tak jak 

przypadku gdyby nie było przeniesienia to rozkaz ADC zadziała dokładnie tak jak 

rozkaz ADD. 

rozkaz ADD. 

DODAWANIE

DODAWANIE

background image

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD (ADC) 

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD (ADC) 

z zastosowaniem instrukcji DAA.

z zastosowaniem instrukcji DAA.

DAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie 

DAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie 

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze 

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze 

AL

AL

skoryguj  wynik  w  akumulatorze  AL  po 

skoryguj  wynik  w  akumulatorze  AL  po 

dodawaniu BCD z przeniesieniem lub bez

dodawaniu BCD z przeniesieniem lub bez

DAA

DAA

Algorytm dla DAA jest następujący:

Algorytm dla DAA jest następujący:

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub 

Jeśli AF=1 lub 

częśćX 

częśćX 

> 9 

> 9 

to [AL]=[AL]+06h oraz AF=1

to [AL]=[AL]+06h oraz AF=1

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

Jeśli CF=1 lub 

Jeśli CF=1 lub 

częśćY 

częśćY 

> 9 

> 9 

to [AL]=[AL]+06h oraz CF=1

to [AL]=[AL]+06h oraz CF=1

DODAWANIE

DODAWANIE

background image

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub 

Jeśli AF=1 lub 

częśćX 

częśćX 

> 9 

> 9 

to [AL]=[AL]+06h oraz 

to [AL]=[AL]+06h oraz 

AF=1

AF=1

Flagi:

Flagi:

CF - przeniesienie

CF - przeniesienie

AF - przeniesienie 

AF - przeniesienie 

pomocnicze

pomocnicze

Jeśli CF=1 lub 

Jeśli CF=1 lub 

częśćY 

częśćY 

> 9 

> 9 

to [AL]=[AL]+06h oraz 

to [AL]=[AL]+06h oraz 

CF=1

CF=1

AF=0

AF=0

AF=1

AF=1

Przykład:

Przykład:

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

0000 1000

0000 1000

 

 

           

           

+

+

0000 0100

0000 0100

0000 1100

0000 1100

+ poprawka

+ poprawka

0000 0110

0000 0110

0001 0010

0001 0010

   

   

1       2

1       2

większe od 9

większe od 9

DODAWANIE - algorytm dla DAA

DODAWANIE - algorytm dla DAA 

background image

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD 

Dodawanie liczb w kodzie BCD dokonujemy za pomocą rozkazu ADD 

(ADC). Zamiast instrukcji DAA można użyć AAA.

(ADC). Zamiast instrukcji DAA można użyć AAA.

AAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie 

AAA dokonuje poprawki dziesiętnej po dodawaniu dwójkowym w kodzie 

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze 

BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze 

AL

AL

skoryguj  wynik  w  akumulatorze  AL  po 

skoryguj  wynik  w  akumulatorze  AL  po 

dodawaniu BCD z przeniesieniem lub bez

dodawaniu BCD z przeniesieniem lub bez

AAA

AAA

DODAWANIE

DODAWANIE

background image

przeniesienie dziesiętne przechodzi do AH (nie do starszej 

przeniesienie dziesiętne przechodzi do AH (nie do starszej 

tetrady AL, która jest zawsze zerowana) i jednocześnie CF = AF = 

tetrady AL, która jest zawsze zerowana) i jednocześnie CF = AF = 

1,

1,

przy braku przeniesienia CF = AF = 0 

przy braku przeniesienia CF = AF = 0 

Przykład:

Przykład:

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

dodać w kodzie BCD dwie liczby dziesiętne 8 i 4

0000 0000 0000 1000

0000 0000 0000 1000

 

 

           

           

+

+

0000 0000 0000 0100

0000 0000 0000 0100

0000 0000 0000 1100

0000 0000 0000 1100

+ poprawka

+ poprawka

0000 0000 0000 0110

0000 0000 0000 0110

0000 0001 0000 0010

0000 0001 0000 0010

            

            

1                2

1                2

DODAWANIE- zasada działania 

DODAWANIE- zasada działania 

AAA

AAA 

background image

Przypomnijmy zasadę zapisu U2 (uzupełnienie do 2)

Przypomnijmy zasadę zapisu U2 (uzupełnienie do 2)

W zapisie U2 (uzupełnień do 2) liczbę binarną można przedstawić jako:

a

n-1

...a

0

 = -a

n-1

.

2

n-1

+a

n-2

.

2

n-2

...

 +a

0

.

2

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze swoją wagą wartość ujemną

W zapisie U2 (uzupełnień do 2) liczbę binarną można przedstawić jako:

a

n-1

...a

0

 = -a

n-1

.

2

n-1

+a

n-2

.

2

n-2

...

 +a

0

.

2

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze swoją wagą wartość ujemną

1101

1101

U2

U2

 = -1

 = -1

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+0

+0

.

.

2

2

1

1

+1

+1

.

.

2

2

= -8+4+1 = 

= -8+4+1 = 

-3

-3

D

D

0111

0111

U2

U2

 = -0 

 = -0 

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+1

+1

.

.

2

2

1

1

+1

+1

.

.

2

2

= 4+2+1 = 

= 4+2+1 = 

7

7

D

D

~0111

~0111

U2

U2

   

   

1000

1000

+      1

+      1

  

  

1001

1001

U2

U2

negacja wszystkich bitów i dodanie 1

negacja wszystkich bitów i dodanie 1

-7

-7

D

D

7

7

D

D

     

     

110111

110111

  

  

+111000

+111000

1  101111

1  101111

-9

-9

D

D

 = 

 = 

-1

-1

.

.

32+1

32+1

.

.

16+0

16+0

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

-8

-8

D

D

 = 

 = 

-1

-1

.

.

32+1

32+1

.

.

16+1

16+1

.

.

8+0

8+0

.

.

4+0

4+0

.

.

2+0

2+0

.

.

1

1

-17

-17

D

D

 = 

 = 

-1

-1

.

.

32+0

32+0

.

.

16+1

16+1

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

bit poza zakresem - 

bit poza zakresem - 

odrzucamy

odrzucamy

     

     

10111

10111

  

  

+11000

+11000

1  01111

1  01111

-9

-9

D

D

 = -1

 = -1

.

.

16+0

16+0

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

-8

-8

D

D

 = -1

 = -1

.

.

16+1

16+1

.

.

8+0

8+0

.

.

4+0

4+0

.

.

2+0

2+0

.

.

1

1

-17

-17

D

D

 = 

 = 

-1

-1

.

.

32+0

32+0

.

.

16+1

16+1

.

.

8+1

8+1

.

.

4+1

4+1

.

.

2+1

2+1

.

.

1

1

bit poza zakresem - nie 

bit poza zakresem - nie 

odrzucamy

odrzucamy

DODAWANIE LICZB ZE ZNAKIEM

DODAWANIE LICZB ZE ZNAKIEM

background image

Stosujemy zapis U2

Stosujemy zapis U2

Wpiszmy do AX liczbę  -9

Wpiszmy do AX liczbę  -9

D

D

 = 11111111 11110111  = FFF7H

 = 11111111 11110111  = FFF7H

Wpiszmy do BX liczbę  -8

Wpiszmy do BX liczbę  -8

D

D

  = 11111111 11111000 = FFF8H

  = 11111111 11111000 = FFF8H

11111111 11101111 = -17

11111111 11101111 = -17

D

D

 

 

Wykonajmy dodawanie:  -9

Wykonajmy dodawanie:  -9

D

D

 + (-8

 + (-8

D

D

)

)

Bit  znaku  wskazuje  na  liczbę 

Bit  znaku  wskazuje  na  liczbę 

ujemną

ujemną

DODAWANIE LICZB ZE ZNAKIEM

DODAWANIE LICZB ZE ZNAKIEM

background image

Rozkaz  negacji  (uzupełnienia  do  dwóch)  bajtu  lub  słowa  - 

NEG

, jest rozkazem, który odwraca znak zmiennej zawartej w 

pamięci lub w rejestrach powszechnego stosowania. 

NEG  odejmuje  argument  (operand)  przeznaczenia  od  zera, 
tworząc w ten sposób uzupełnienie do dwóch.

-9

-9

D

D

 = 11111111 11110111  = FFF7H

 = 11111111 11110111  = FFF7H

NEGACJA LUB UZUPEŁNIENIE DO 

NEGACJA LUB UZUPEŁNIENIE DO 

DWÓCH - NEG

DWÓCH - NEG

background image

A jak realizować dodawanie liczb ze znakiem stosując NEG?

A jak realizować dodawanie liczb ze znakiem stosując NEG?

Zawartość rejestrów przed dodawaniem

Zawartość rejestrów przed dodawaniem

Zawartość rejestrów po dodawaniu

Zawartość rejestrów po dodawaniu

Realizacja dodawania 

Realizacja dodawania 

-9

-9

D

D

 + (-8

 + (-8

D

D

)

)

 

 

11111111 11101111 = -17

11111111 11101111 = -17

D

D

 

 

NEGACJA LUB UZUPEŁNIENIE DO 

NEGACJA LUB UZUPEŁNIENIE DO 

DWÓCH - NEG

DWÓCH - NEG

background image

Odejmowanie całkowite dokonujemy za pomocą rozkazu SUB

Odejmowanie całkowite dokonujemy za pomocą rozkazu SUB

SUB argument1,argument2

SUB argument1,argument2

rejestr

rejestr

komórka pamięci

komórka pamięci

rejestr

rejestr

komórka pamięci

komórka pamięci

dana 

dana 

natychmiastowa

natychmiastowa

Od 

Od 

argumentu1

argumentu1

 odejmij 

 odejmij 

argument2

argument2

 i wynik zapisz w 

 i wynik zapisz w 

argument1

argument1

Przykłady:

Przykłady:

SUB AL,BL

SUB AL,BL

SUB AL,4Ch

SUB AL,4Ch

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

(zależne od wyniku odejmowania):

(zależne od wyniku odejmowania):

OF - flaga nadmiaru 

OF - flaga nadmiaru 

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

ODEJMOWANIE

ODEJMOWANIE

background image

Odejmowanie całkowite bajtów lub słów z uwzględnieniem pożyczki 
dokonujemy za pomocą rozkazu SBB

SBB argument1,argument2

SBB argument1,argument2

rejestr

rejestr

komórka pamięci 

komórka pamięci 

rejestr

rejestr

komórka pamięci 

komórka pamięci 

dana natychmiastowa

dana natychmiastowa

Od 

Od 

argumentu1

argumentu1

 odejmij 

 odejmij 

argument2 

argument2 

i wartość flagi przeniesienia  CF 

i wartość flagi przeniesienia  CF 

a wynik zapisz w 

a wynik zapisz w 

argument1

argument1

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od 

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego (zależne od 

wyniku odejmowania):

wyniku odejmowania):

OF - flaga nadmiaru 

OF - flaga nadmiaru 

(przepełnienia)

(przepełnienia)

SF - flaga znaku

SF - flaga znaku

ZF - flaga zera

ZF - flaga zera

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

PF - flaga parzystości

PF - flaga parzystości

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

Rozkaz  ten  musi  występować  zawsze  po  rozkazie  SUB,  gdyż  dopiero  po  rozkazie 

Rozkaz  ten  musi  występować  zawsze  po  rozkazie  SUB,  gdyż  dopiero  po  rozkazie 

SUB  może    być  wiadomo,  że  występuje  (bądź  nie  występuje)  przeniesienie.  W 

SUB  może    być  wiadomo,  że  występuje  (bądź  nie  występuje)  przeniesienie.  W 

przypadku gdyby nie było przeniesienia to rozkaz SBB zadziała dokładnie tak jak 

przypadku gdyby nie było przeniesienia to rozkaz SBB zadziała dokładnie tak jak 

rozkaz SUB. 

rozkaz SUB. 

ODEJMOWANIE

ODEJMOWANIE

background image

Odejmowanie liczb w kodzie BCD dokonujemy za pomocą rozkazu SUB 
(SBB) z zastosowaniem instrukcji DAS.

DAS dokonuje poprawki dziesiętnej po odejmowaniu dwójkowym w kodzie 
BCD. Liczba podlegająca korekcji musi się zawsze znajdować w rejestrze 
AL

skoryguj  wynik  w  akumulatorze  AL  po 

skoryguj  wynik  w  akumulatorze  AL  po 

odejmowaniu BCD z pożyczką lub bez

odejmowaniu BCD z pożyczką lub bez

DAS

DAS

Algorytm dla DAS jest następujący:

Algorytm dla DAS jest następujący:

AL

AL

0

0

3

3

7

7

4

4

częśćY

częśćY

częśćX

częśćX

Jeśli AF=1 lub 

Jeśli AF=1 lub 

częśćX 

częśćX 

> 9 

> 9 

to [AL]=[AL]-06h oraz AF=1

to [AL]=[AL]-06h oraz AF=1

AF - flaga przeniesienia 

AF - flaga przeniesienia 

pomocniczego

pomocniczego

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

Jeśli CF=1 lub 

Jeśli CF=1 lub 

częśćY 

częśćY 

> 9 

> 9 

to [AL]=[AL]-60h oraz CF=1

to [AL]=[AL]-60h oraz CF=1

ODEJMOWANIE

ODEJMOWANIE

background image

Rozkaz  negacji 

Rozkaz  negacji 

NEG

NEG

  jest  użyteczny  tam,  gdzie  nie  wystarcza  rozkaz 

  jest  użyteczny  tam,  gdzie  nie  wystarcza  rozkaz 

odejmowania  SUB,  a  mianowicie  podczas  odejmowania  argumentu  np.  typu 

odejmowania  SUB,  a  mianowicie  podczas  odejmowania  argumentu  np.  typu 

rejestr lub komórka pamięci od wartości natychmiastowej.

rejestr lub komórka pamięci od wartości natychmiastowej.

Np. jeżeli zechcemy odjąć 35h od wartości w AL (np. AL=30h), to nie możemy 

Np. jeżeli zechcemy odjąć 35h od wartości w AL (np. AL=30h), to nie możemy 

tego zrobić za pomocą rozkazu SUB, gdyż wartość natychmiastowa nie stanowi 

tego zrobić za pomocą rozkazu SUB, gdyż wartość natychmiastowa nie stanowi 

przecież przeznaczenia:

przecież przeznaczenia:

SUB 35,AL 

SUB 35,AL 

;jest niedozwolony

;jest niedozwolony

 

 

Dlatego:

Dlatego:

NEG AL 

NEG AL 

ADD AL,35 

ADD AL,35 

ODEJMOWANIE

ODEJMOWANIE

background image

Mnożenie liczb całkowitych bez znaku dokonujemy za pomocą 

Mnożenie liczb całkowitych bez znaku dokonujemy za pomocą 

rozkazu MUL

rozkazu MUL

MUL argument2

MUL argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Pomnóż 

Pomnóż 

argumentu2

argumentu2

 przez niejawny argument1 (wartość rejestru AL 

 przez niejawny argument1 (wartość rejestru AL 

lub AX)

lub AX)

 

 

a wynik zapisz w 

a wynik zapisz w 

rejestrze AL lub AX

rejestrze AL lub AX

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

Rozkaz ten ma wpływ na następujące znaczniki rejestru flagowego 

(zależne od wyniku):

(zależne od wyniku):

OF - flaga nadmiaru 

OF - flaga nadmiaru 

(przepełnienia)

(przepełnienia)

CF - flaga 

CF - flaga 

przeniesienia

przeniesienia

przy czym jeśli ”górna” połowa wyniku znajdująca się w rejestrach 

przy czym jeśli ”górna” połowa wyniku znajdująca się w rejestrach 

AH lub DX zawiera same zera to OF i CF ustawiane są na wartość 0, w 

AH lub DX zawiera same zera to OF i CF ustawiane są na wartość 0, w 

przeciwnym razie na 1.

przeciwnym razie na 1.

MNOŻENIE

MNOŻENIE

background image

Przykład mnożenia liczb całkowitych bez znaku

Przykład mnożenia liczb całkowitych bez znaku

Wynik=6A0

Wynik=6A0

CF=1

CF=1

OF=1

OF=1

CF=1

CF=1

OF=1

OF=1

Wynik=5D4A8

Wynik=5D4A8

0

0

MNOŻENIE

MNOŻENIE

background image

IMUL argument2

IMUL argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Pomnóż 

Pomnóż 

argumentu2

argumentu2

 przez niejawny argument1 (wartość rejestru AL 

 przez niejawny argument1 (wartość rejestru AL 

lub AX)

lub AX)

 

 

a wynik zapisz w 

a wynik zapisz w 

rejestrze AL lub AX

rejestrze AL lub AX

Rozkaz ten ma wpływ na znaczniki rejestru flagowego (zależne od 

Rozkaz ten ma wpływ na znaczniki rejestru flagowego (zależne od 

wyniku): OF i CF

wyniku): OF i CF

Przykład

Przykład

 mnożenia liczb całkowitych ze znakiem

 mnożenia liczb całkowitych ze znakiem

Wynik=FFFFDB9

Wynik=FFFFDB9

8

8

1234 h * (-2h) = 

1234 h * (-2h) = 

FFFFDB98

FFFFDB98

4660

4660

D

D

 * (-2

 * (-2

D

D

) =- 

) =- 

9320

9320

D

D

=

=

MNOŻENIE LICZB CAŁKOWITYCH ZE 

MNOŻENIE LICZB CAŁKOWITYCH ZE 

ZNAKIEM

ZNAKIEM 

background image

MOV AL,3   ;pierwszy czynnik=003

MOV AL,3   ;pierwszy czynnik=003

MOV BL,2   ;drugi czynnik=002

MOV BL,2   ;drugi czynnik=002

MUL BL

MUL BL

   ;AX=0006H=0006

   ;AX=0006H=0006

MOV AL,3  ;pierwszy czynnik=003

MOV AL,3  ;pierwszy czynnik=003

MOV BL,2  ;drugi czynnik=002

MOV BL,2  ;drugi czynnik=002

IMUL BL

IMUL BL

   ;AX=0006H=0006

   ;AX=0006H=0006

Obydwa rozkazy dają identyczne wyniki dopóty dopóki liczby ze 

Obydwa rozkazy dają identyczne wyniki dopóty dopóki liczby ze 

znakiem są zgodne z liczbami bezznakowymi

znakiem są zgodne z liczbami bezznakowymi

MOV AL,FFH ;pierwszy czynnik=255

MOV AL,FFH ;pierwszy czynnik=255

MOV BL,2    ;drugi czynnik=002

MOV BL,2    ;drugi czynnik=002

MUL BL

MUL BL

     ;AX=01FEH=00510

     ;AX=01FEH=00510

Obydwa rozkazy wykonują operacje na tych samych liczbach ale wyniki 

Obydwa rozkazy wykonują operacje na tych samych liczbach ale wyniki 

są inne

są inne

MOV AL,FFH ;pierwszy czynnik=-001

MOV AL,FFH ;pierwszy czynnik=-001

MOV BL,2    ;drugi czynnik=002

MOV BL,2    ;drugi czynnik=002

IMUL BL

IMUL BL

     ;AX=FFFEH=-00002

     ;AX=FFFEH=-00002

MUL

MUL

MUL

MUL

IMUL

IMUL

IMUL

IMUL

MOV AX,FFFFH ;pierwszy czynnik=65535

MOV AX,FFFFH ;pierwszy czynnik=65535

MOV BX,2     ;drugi czynnik=0002

MOV BX,2     ;drugi czynnik=0002

MUL BX

MUL BX

     ;DX:AX=0001H:FFFEH=131070

     ;DX:AX=0001H:FFFEH=131070

MOV AX,FFFFH ;pierwszy czynnik=-0001

MOV AX,FFFFH ;pierwszy czynnik=-0001

MOV BX,2     ;drugi czynnik=002

MOV BX,2     ;drugi czynnik=002

IMUL BX

IMUL BX

     ;DX:AX=FFFFH:FFFEH=-00002

     ;DX:AX=FFFFH:FFFEH=-00002

lub

lub

MNOŻENIE

MNOŻENIE

background image

Dzielenie liczb całkowitych bez znaku dokonujemy za pomocą 

Dzielenie liczb całkowitych bez znaku dokonujemy za pomocą 

rozkazu DIV

rozkazu DIV

DIV argument2

DIV argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez 

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez 

argumentu2

argumentu2

 a wynik zapisz w 

 a wynik zapisz w 

rejestrze AL lub AX

rejestrze AL lub AX

 natomiast resztę 

 natomiast resztę 

z dzielenia w AH lub DX

z dzielenia w AH lub DX

Gdy iloraz nie pomieści się w AL czy AX, czy też nawet w 

Gdy iloraz nie pomieści się w AL czy AX, czy też nawet w 

przydzielonej mu specjalnej komórce pamięci, procesor 

przydzielonej mu specjalnej komórce pamięci, procesor 

wygeneruje przerwanie nr 0 (błąd dzielenia przez zero) i 

wygeneruje przerwanie nr 0 (błąd dzielenia przez zero) i 

poinformuje nas o tym.

poinformuje nas o tym.

DZIELENIE

DZIELENIE

background image

Przykład dzielenia liczb całkowitych bez znaku

Przykład dzielenia liczb całkowitych bez znaku

iloraz

iloraz

reszta

reszta

DZIELENIE

DZIELENIE

background image

IDIV argument2

IDIV argument2

rejestr (rej)

rejestr (rej)

komórka pamięci (mem)

komórka pamięci (mem)

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez 

Podziel niejawny argument1 (wartość rejestru AL lub AX) przez 

argumentu2

argumentu2

 a wynik zapisz w 

 a wynik zapisz w 

rejestrze AL lub AX

rejestrze AL lub AX

 natomiast resztę 

 natomiast resztę 

z dzielenia w AH lub DX

z dzielenia w AH lub DX

Podczas dzielenia ze znakiem, może nastąpić zniszczenie bitu znaku 

Podczas dzielenia ze znakiem, może nastąpić zniszczenie bitu znaku 

(nastąpi przepełnienie) i wówczas generowane jest przerwanie INT 0. 

(nastąpi przepełnienie) i wówczas generowane jest przerwanie INT 0. 

Dla rozkazu IDIV obowiązują następujące zasady dotyczące znaków 

Dla rozkazu IDIV obowiązują następujące zasady dotyczące znaków 

argumentów i wyniku rozkazów: 

argumentów i wyniku rozkazów: 

DZIELENIE LICZB CAŁKOWITYCH ZE 

DZIELENIE LICZB CAŁKOWITYCH ZE 

ZNAKIEM

ZNAKIEM

background image

ROZKAZY ARYTMETYCZNE 

ROZKAZY ARYTMETYCZNE 

Zobacz 

jak 

może 

wyglądać 

realizacja 

rozkazów 

arytmetycznych zrealizowana z wykorzystaniem symulatora 
procesora  SMS32v50

program: 

in_arith1.asm

background image

DZIĘKUJĘ ZA UWAGĘ ! 

DZIĘKUJĘ ZA UWAGĘ ! 


Document Outline