conversione in maiuscolo di una stringa (vettore di byte (caratteri) in cui l'ultimo elemento è il $ così rispetta la convenzione DOS)
codice:
; Segmentazione del DOS
DOSSEG
; Modello di memoria
.MODEL small
; Memoria per lo stack
.STACK 100h
;------------------------------------------------------------------------------
; Data segment
;------------------------------------------------------------------------------
.DATA
STR1 db 'ciAo a Tutti$'
STR2 db $-STR1 DUP (?)
LMIN EQU 'a' ; Limite inferiore
LMAX EQU 'z' ; Limite superiore
DIFF EQU 'A' - 'a' ; Differenza tra lettere minuscole e maiuscole
;------------------------------------------------------------------------------
; Code Segment
;------------------------------------------------------------------------------
.CODE
Begin: StartupCode ; Inizio del programma
; Inizializzazione dei registri
LEA SI , STR1 ; Punta all'inizio della stringa
LEA DI , STR2 ; Inizio della seconda stringa
; Algoritmo
Ciclo:
MOV AL , [SI] ; Prelevo il carattere
CMP AL , LMIN ; Se non c'è Carry, è >= a
JC NoMin ; Se salti, non è minuscola
CMP AL , LMAX + 1 ; Se c'è Carry, è <= z, ossia < z+1
JNC NoMin ; Se salti, non è minuscola
; Lettera minuscola, da convertire
ADD AL , DIFF ; Porta il carattere in maiuscolo
NoMin: MOV [DI] , AL ; Salva il carattere (modificato quando necessario)
CMP AL , '$' ; Vediamo se la stringa è finita
JZ FineC ; Se salti, la stringa è finita
INC DI ; Prossima posizione valida
INC SI ; Prossimo carattere
JMP Ciclo ; Torna al ciclo
FineC:
; Fine del programma
ExitCode 0 ; Corretta terminazione del programma
END Begin ; Uscita dal programma
unione insiemistica di due vettori
codice:
; Segmentazione del DOS
DOSSEG
; Modello di memoria
.MODEL small
; Memoria per lo stack
.STACK 100h
;------------------------------------------------------------------------------
; Data segment
;------------------------------------------------------------------------------
.DATA
V1 db 2, 3, 4
L1 EQU $-V1
V2 db 5, 4, 8
L2 EQU $-V2
L3 EQU L1 + L2 + 1
V3 db L3 DUP (?)
;------------------------------------------------------------------------------
; Code Segment
;------------------------------------------------------------------------------
.CODE
Begin: StartupCode ; Inizio del programma
MOV AH , L1
; Copio il primo vettore nel terzo
LEA SI , V1
LEA DI , V3
INC DI
MOV CX , L1
Copia: MOV AL , [SI]
MOV BYTE PTR [DI] , AL
INC SI
INC DI
Loop Copia
; Analizzo il secondo vettore
MOV CX , L2
LEA SI , V2
Sec: MOV AL , [SI]
MOV DX , L1
LEA BX , V1
Cerca: CMP BYTE PTR [BX] , AL
JZ Next
INC BX
DEC DX
Jnz Cerca
; Non trovato
MOV [DI] , AL
INC AH
INC DI
Next: INC SI
Loop Sec
MOV [V3] , AH
; Algoritmo
; Salvataggio dei risultati
; Fine del programma
ExitCode 0 ; Corretta terminazione del programma
END Begin ; Uscita dal programma