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


Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
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
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
VERO
FALSO
var == 0
istruzione 1
istruzione "n"
UNE (Jump if Not Equal)
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
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
. 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