Assembly Intel 8086: la selezione condizionale (if, if-else)

Slide sull'Assembly Intel 8086 Parte 3 - La selezione (if, if-else). Il Pdf illustra i concetti di selezione condizionale (if, if-else) nel linguaggio Assembly per il processore Intel 8086, con esempi di codice commentato per l'Informatica universitaria.

Mostra di più

10 pagine

Assembly Intel 8086
Parte 3 - La selezione (if, if-else)
La selezione semplice: IF

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Assembly Intel 8086

Parte 3 - La selezione (if, if-else)

D8086
L3093607
|INTEL@1978
Assembly Intel 8086
Parte 3 - La selezione (if, if-else)
seg000:0000
seg000:0000 loc_0:
; CODE XREF: seg000:00074j
seg000:0000
; seg000: loc_104j ...
seg000:0000
mov
ax, 1999h
seg000:0003
cmp
ds : 4206h, ax
seg000:0007
jnz
short loc_0
seg000:0009
mov
ax, 2121h
seg000:000C
cmp
ds : 4114h, ax
seg000:0010
seg000:0010 loc_10:
; DATA XREF: seg000:00304r
seg000:0010
; seg000:00394r
seg000:0010
jnz
short loc_0
seg000:0012
mov
ax, OF66Dh
seg000:0015
cmp
ds : 1928h, ax
seg000:0019
jns
short loc_0
seg000:001B
mov
ax, 1
seg000:001E
cmp
ds: 334h, ax
seg000:0022
js
short loc_0
seg000:0024
mov
ax, 1
seg000:0027
add
ds : 1234h, ax
seg000:002B
jnb
short loc_0
seg000:002D
mov
ax, 10h
seg000:0030
cmp
word ptr ds : loc_10+1, ax
seg000:0034
jnz
short loc_0
seg000:0036
mov
ax, 10h
seg000:0039
cmp
word ptr ds : loc_10+1, ax
seg000:003D
jnz
short loc_0
seg000:003F
retn
seg000:003F seg000
endsD8086
L3093607
|INTEL@1978

La selezione semplice: IF

La selezione semplice: IF

  • In Assembly 8086 per realizzare la selezione semplice (if) abbiamo bisogno di 4 nuovi
    concetti:
  • 1. L'istruzione CMP (COMPare)
  • 2. Le istruzioni di salto condizionato (tutte quelle che iniziano con la J di Jump)
  • 3. Le etichette
  • 4. L'istruzione di salto incondizionato: JMPLa selezione semplice: IF
  • In Assembly 8086 la selezione lavora in base al risultato dell'istruzione CMP.
  • L'istruzione CMP (COMPare), confronta il primo operando con il secondo operando.
  • Es: CMP var1, 00h
  • Dopo aver definito il compare tramite CMP, si utilizza un'istruzione di salto
  • tutte le istruzioni che iniziano con la J di Jump, quindi:
    • JG (Jump if Greater)
    • JE (Jump if Equel)
    • JL (Jump if Less)
    • JGE (Jump if Greater or Equal)
    • JLE (Jump if Less or Equal)
    • JNE (Jump if Not Equal)
    • JZ (Jump if Zero)
    • JNZ (Jump if Not Zero)La selezione semplice: IF (approccio al
      contrario)

Codifica in linguaggio C

CODIFICA IN
LINGUAGGIO C
CODIFICA IN ASSEMBLY
int var;
. DATA
. .
var DB
?
;dichiarazione variabile di tipo Byte
if (var == 0)
. CODE
{
CMP var, 00h
; confronto con zero
. . .
JNE esci
; se ZF=0 salta all'etichetta esci
;cioè se var<>0
istruzioni
; se var == 0 esegue questo; blocco
. . .
istruzioni
}
. ..
esci
.
¡prosecuzione programma

Flow Chart

FLOW CHART
VERO
FALSO
var == 0
istruzione 1
istruzione "n"
UNE (Jump if Not Equal)

La selezione semplice: IF - Esempio

  • Creo una variabile da 1 byte;
  • Solo se la variabile è uguale a 00h => sommo 10h alla
    variabile;
  • Successivamente copio il valore della variabile su BL.La selezione semplice: IF (approccio al contrario)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
. model small
. data
DATA SEGMENT
,
var DB ?
FINE DATA SEGMENT
. code
CODE SEGMENT
main proc
mov ax, @data
mov ds , ax
mov var, 05h
cmp var, 00h
confronto var con 00h
jne fine
se var NON e' uguale a 00h salto a "fine"
add
var, 10h
se var e' uguale a 00h
sommo 10h
fine:
mov bl , var
; copio il valore di var in BL
main endp
FINE CODE SEGMENT
end

La selezione semplice: IF (senza approccio al contrario)

01
02
03
04
05
06
07
08
. model
small
. data
DATA SEGMENT
var DB ?
FINE DATA SEGMENT
. code
CODE SEGMENT
main proc
09
10
mov ax, @data
mov ds , ax
11
12
13
14
5
mov var, 05h
cmp var, 00h
confronto var con 00h
je uguale
se var e' uguale a 00h salto a "uguale"
jmp fine
altrimenti salto direttamente a "fine"
18
19
20
21
22
uguale :
add var, 10h
se var e' uguale a 00h sommo 10h
fine:
mov bl , var
; copio il valore di var in BL
23
24
25
26
end
main endp
FINE CODE SEGMENT
SALTO
INCONDIZIONATOD8086
L3093607
|INTEL@1978

La selezione doppia: IF-ELSE

La selezione doppia: IF-ELSE
. model
small
. data
DATA SEGMENT
FINE DATA SEGMENT
. code
CODE SEGMENT
main
proc
MOV AX, @data
MOV DS, AX
mov al, 07h
cmp al, 05h
;compara AL con 5
SALTO
INCONDIZIONATO
; salta a maggiore se AL >= 5
jassegna 0 a BL se AL < 5
jge maggiore
mov bl, 00h
jmp fine
;salta alla fine del programma
maggiore:
mov bl, 01h
fine:
jassegna 1 a BL se AL >= 5
inc bl
;in ogni caso alla fine
;incremento BL di 1
main endp
FINE CODE SEGMENT
end
Confronto AL:

se AL è maggiore uguale di 5 => metto 1 su BL
· se AL minore di 5 => metto 0 su BL
· alla fine in ogni caso incremento BL di 1

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.