# data[].attributes.body
; Factorial

JMP start ; Salta a etiqueta start

nume: DB 4 ; Variable número

start:

MOV A, [nume] ; Copia contenido de nume a registro A

CALL factorial ; Llama a función con etiqueta factorial

HLT ; Detiene la ejecución del programa

factorial:

MOV B, 1 ; Inicializa registro B en valor 1 para contar

.loop:

MUL B ; Multiplica contenido de nume por registro A

INC B ; Aumenta en 1 el contador

CMP B, [nume] ; Compara registro B con potencia si son =

JB .loop ; If Bpote salta a .loop

RET ; Sale de función

# data[].attributes.body
; Calcula factorial de 5 en registro A
JMP start ; Salta a etiqueta start

fact: DB 5 ; Variable factorial

start:
MOV A, 1 ; Inicializa registro A en valor 1
CALL factorial ; Llama a función con etiqueta factorial
HLT ; Detiene la ejecución del programa

factorial:
MOV B, 1 ;Inicializa registro B en valor 1
.loop:
MUL B ; Multiplica contenido de B por registro A
INC B ; Aumenta en 1 el contador
CMP B, [fact] ; Compara registro B con factorial si son =
JBE .loop ; If B<fact salta a .loop

RET ; Sale de función

# data[].attributes.body
;Ejercicio Dirigido
JMP start ;Salta a etiqueta start

;------ variables en RAM ---------
nume: DB 5 ;

start:

MOV A, [nume] ;
MOV B, [nume] ;
DEC B ;
CALL factorial ;
HLT;

factorial:
MOV C, 1 ;
.loop:
MUL B ;
DEC B ;
CMP C,B ;
JBE .loop ;

RET ;

# data[].attributes.body
; Factorial de 5 en registro A
JMP start

nume: DB 4 ; varible de numero
jumper: DB 2

start:
MOV A, [nume] ; Copiacontenido de nume en registro A
CALL suma ; llama a funcion de factorial
HLT

suma:
MOV C, 1
.loop:
ADD B, [jumper]
ADD A, B
INC C
CMP C, [nume]
JB .loop

RET

# data[].attributes.body
; Factorial

JMP start ; Salta a etiqueta start

nume: DB 4 ; Variable número

start:

MOV A, 0 ; Copia contenido de nume a registro A

CALL sumita ; Llama a función con etiqueta sumita

HLT ; Detiene la ejecución del programa

sumita:

MOV B, 0 ; Inicializa registro B
MOV C, 1

.loop:

ADD A,C ; Suma contenido de nume por registro B
ADD C,2

INC B ; Aumenta en 1 el contador

CMP B, [nume] ; Compara registro B con potencia si son =

JB .loop ; If Bpote salta a .loop

RET ; Sale de función

# data[].attributes.body
; Factorial de 5 en registro A
JMP start

jumper: DB 1
desde: DB 5
hasta: DB 10

start:
MOV A, [desde] ; Copiacontenido de nume en registro A
CALL suma ; llama a funcion de factorial
HLT

suma:
MOV C, [desde]
MOV B, [desde]
.loop:
ADD B, [jumper]
ADD A, B
INC C
CMP C, [hasta]
JB .loop

RET

# data[].attributes.body
;Ejercicio Dirigido
JMP problem ;Salta a etiqueta start

;------ variables en RAM ---------
numeA: DB 10 ;
numeB: DB 5 ;

problem:
MOV A, [numeA] ;
MOV B, [numeB] ;
CMP A,B ;
JE .funcion ;
SUB A,B ;
JMP .end ;

.funcion:
MUL B ;
JMP .end ;

.end:
HLT ;

# data[].attributes.body
; Obtiene el mayor de 2 números en registro B

JMP start ; Salta a etiqueta start

nume1: DB 20 ; Variable número 1
nume2: DB 15 ; Variable número 2

start:
MOV A, [nume1] ; Copia contenido nume1 a registro A
CMP A, [nume2] ; Compara nume1 y nume2 si son =
JE .igual ; If nume1=nume2 salta a .menor_igual
JA .diferente ; If nume1<nume2 salta a .menor_igual
JB .diferente ; If nume1>nume2 salta a .menor_igual

JMP end ; Salta a etiqueta end

.igual:
MUL [nume2] ; nume2 es el mayor
JMP end ; Salta a etiqueta end

.diferente:
MOV A, [nume1] ; Copia contenido de nume1 a registro A
SUB A, [nume2] ; Adiciona contenido de nume2 a registro A
JMP end ; Salta a etiqueta end

end:
HLT ; Detiene la ejecución del programa

# data[].attributes.body
JMP start ; Salta a etiqueta start

nume: DB 4 ; Variable número
nume2: DB 4

start:

MOV A, [nume] ; Copia contenido de nume a registro A
MOV B,[nume2]

CALL func; Llama a función con etiqueta potencia

HLT ; Detiene la ejecución del programa

func:

CMP A,B
JE Multiplicacion
SUB A,B

RET ; Sale de función
Multiplicacion:
MUL B
MOV C,A
RET

# data[].attributes.body
; problem3

JMP start ; Salta a etiqueta start

nume: DB 5 ; Variable número
numerito: DB 10 ; Variable número

start:

MOV A, [nume] ; Copia contenido de nume a registro A
CALL sumita ; Llama a función con etiqueta sumita
HLT ; Detiene la ejecución del programa

sumita:

MOV B, [nume] ; Inicializa registro B

.loop:
INC B ; Aumenta en 1 el contador
ADD A,B
CMP B, [numerito] ; Compara registro B con potencia si son =

JB .loop ; If Bpote salta a .loop

RET ; Sale de función

# data[].attributes.body
;Suma de números en rango [a..b] en registro C.
JMP start ; Salta a etiqueta start

a1: DB 5 ; Variable inicial
b1: DB 10 ; Variable final

start:
MOV A, [a1] ; Copia contenido de a1 a registro A
MOV C, 0 ;
CALL suma ; Llama a función con etiqueta potencia
HLT ; Detiene la ejecución del programa

suma:
ADD C,A ; Añade A a C
INC A ; Aumenta en 1 el contador
CMP A,[b1] ; Compara registro A con límite b1
JBE suma ; Si A=límite b1 entonces suma

RET ; Sale de función

# data[].attributes.body
JMP start ; Salta a etiqueta start

nume1: DB 5 ; Variable número 1
nume2: DB 5 ; Variable número 2

start:
MOV A, [nume1] ; Copia contenido nume1 a registro A
CMP A, [nume2]
JE .iguales
JA .diferente
JB .diferente

JMP end ; Salta a etiqueta end

.iguales:
MUL [nume2]
JMP end ; Salta a etiqueta end

.diferente:
MOV A, [nume1]
SUB A, [nume2]
JMP end ; Salta a etiqueta end

end:
HLT ; Detiene la ejecución del programa

# data[].attributes.body
JMP start ; Salta a etiqueta start
nume1: DB 4 ; Variable número
pote1: DB 2 ; Variable potencia
start:
MOV A, [nume1] ; Copia contenido de nume1 a registro A
CALL potencia ; Llama a función con etiqueta potencia
HLT ; Detiene la ejecución del programa
potencia:
MOV B, 1 ; Inicializa registro B en valor 1 para contar
.loop:
MUL [nume1] ; Multiplica contenido de nume1 por registro A
INC B ; Aumenta en 1 el contador
CMP B, [pote1] ; Compara registro B con potencia si son =
JB .loop ; If B<pote salta a .loop
RET ; Sale de función

# data[].attributes.body
; Sumar de n primeros numeros impares

JMP start ; Salta a etiqueta start

valorn: DB 6 ; Variable número

start:
MOV B, 0 ; Inicializa registro B en 0
CALL calculo ; Llama la funcion calculo
HLT ; Detiene la ejecución del programa

calculo:
MOV A, 0 ; Inicializa la variable A en 0
MOV C, 1 ; Inicializa la variable C en 1

loop:

ADD B, C ; Adiciona número C a registro B
ADD C, 2 ; Aumenta en 2 al registro C
INC A ; Aumenta en 1 el contador

CMP A, [valorn] ; Compara registro A con valorn si son =
JB loop ; If Avalorn salta a loop

RET ; Sale de función

# data[].attributes.body
; Suma de primeros n números impares en registro B.
JMP start ; Salta a etiqueta start

n1: DB 4 ; Números impares

start:
CALL suma ; Llama a función con etiqueta potencia
HLT ; Detiene la ejecución del programa

suma:
MOV A, 0 ; Inicializa A en 0 (iterador)
MOV B, 0 ; B inicializa en 0 como es la suma
MOV C, 1 ; Término impar a sumar
.loop:
ADD B, C ; Suma C en B
ADD C, 2 ; Siguiente impar
INC A ; Aumenta A en 1
CMP A, [n1] ; Compara registro A con [n1] si son =
JB .loop ; If A<[n1] salta a .loop

RET ; Sale de función

# data[].attributes.body
; Obtiene el mayor de 2 números en registro B

JMP start ; Salta a etiqueta start

nume1: DB 20 ; Variable número 1
nume2: DB 15 ; Variable número 2

start:
MOV A, [nume1] ; Copia contenido nume1 a registro A
CMP A, [nume2] ; Compara nume1 y nume2 si son =
JE .multiplica         ; If nume1=nume2 salta a multiplica
JNE resta                 ; Else salta a resta
JMP end ; Salta a etiqueta end

.multiplica:
MUL [nume2] ;
JMP end ; Salta a etiqueta end
resta:
SUB A,[nume2] ;
JMP end ;
end:
HLT ; Detiene la ejecución del programa