Testo:
Si scriva un programma in linguaggio Assembler 8086 che esegua le seguenti operazioni:
a)Definisca un vettore VETTC di massimo 5 elementi, ciascuno contenente un carattere (8 bit) compresi tra ‘0’ e ‘9’
b)Controlli se gli elementi di VETTC rientrano nel range prestabilito e
b1)Se sì, converta i caratteri contenuti in VETTC nei corrispondenti numeri positivi (‘0’-0 , ‘1’-1, ...) e li memorizzi in un secondo vettore VETTN
b2)Altrimenti interrompa l’esecuzione del programma riempiendo tutti gli
elementi di VETTN al valore 0
c)Memorizzi in una variabile VAR di dimensione opportuna il numero
corrispondente all’unione degli elementi di VETTN
Esempi:
VETTC = {‘1’,’2’,’5’,’2’,’8’} VETTN = {1,2,5,2,8} VAR = 12528
VETTC = {‘1’,’2’,’A’,’2’,’8’} VETTN = {0,0,0,0,0} VAR = 0
Soluzione:
DIM EQU 5
.model small
.stack
.data
vettc db '2', '1', '3', '4', '3'
vettn db DIM DUP ?
var dw 0d
.code
.startup
LEA SI, vettc
LEA DX, vettn
MOV CX, DIM
ciclo:
CMP [SI], '0'
JL nospecifiche
CMP [SI], '9'
JG nospecifiche
MOV BX, '0'
MOV AX, [SI]
SUB AX, BX
PUSH SI
MOV SI, DX
MOV [SI], AX
POP SI
INC SI
INC DX
LOOP ciclo
JMP fine
nospecifiche:
MOV CX, DIM
LEA SI, vettn
ciclos:
MOV [SI], 0
INC SI
LOOP ciclos
fine:
MOV var, 0
LEA SI, vettn
ADD SI, DIM
MOV AX, 1
MOV BX, 10
MOV CX, DIM
ciclovar:
PUSH AX
MOV DX, [SI]
MUL DX
ADD var, AX
POP AX
DEC SI
MUL BX
LOOP ciclovar
.exit
end
| < Prec. | Succ. > |
|---|






