; multiplicar AL X BL
MOV AL, 16 ; primer operando
MOV BL, 0 ; segundo operando
; inicializacion de acumulador
MOV CL, 0 ;
AND BL,BL
JBE FIN
LAZO:
ADD CL, AL ; CL = CL + AL
DEC BL ; BL = BL - 1;
JNBE LAZO ; if BL > 0 GOTO LAZO
FIN:
RET
________________________________________________________________
; realiza la suma de los numeros puestos a partir de DATOS
; los datos terminan con 0
; el resultado lo almacena en CX
; check sum
org 100h
MOV AX,0700H
MOV DS,AX
MOV BX,DATOS
MOV AX,0
MOV CX,AX
LAZO:
MOV AL,[BX]
CMP AL,0
JZ FIN
INC BX
ADD CX,AX
JMP LAZO
FIN:
RET
DATOS:
DB 1
DB 2
DB 5
DB 1
DB 1
DB 0
________________________________________________________________
; verificar si lo escrito a partir de DATOS
; es la palabra 'HOLA'
; almacenar en CL 01H si es cierto, o 00H si es falso
; verifica password
org 100h
MOV AX,0700H
MOV DS,AX
MOV BX,DATOS
MOV CL,00H ; default es falso
;MOV AL,[BX]
CMP [BX],'H'
JNZ FALSO
INC BX
MOV AL,[BX]
CMP AL,'O'
JNZ FALSO
INC BX
MOV AL,[BX]
CMP AL,'L'
JNZ FALSO
INC BX
MOV AL,[BX]
CMP AL,'A'
JNZ FALSO
INC CL
FALSO:
RET
DATOS:
DB 'H'
DB 'O'
DB 'L'
DB 'A'
________________________________________________________________
; calcula el facorial del número almacenado en 'DATO'
; el resultado se almacena en 'DATO'+1
org 100h
; inicializacion
MOV AX,0700H
MOV DS,AX
MOV BX,DATO
MOV AL, 1 ; el factorial se almacena en AL
MOV CL,[BX]
CMP CL,2
JB FIN ; si CL es 1 o 0 el factorial es 1
LAZO: MUL CL ; AL = AL*CL
DEC CL
CMP CL,1 ; se evita que se multiplique por 1
JNZ LAZO
FIN: MOV [BX+1],AL ; se almacena resultado
RET
DATO:
DB 5
________________________________________________________________
; programa que imprime mensajes en pantalla
ORG 100h ; this directive required for a simple 1 segment .com program.
MOV CH, 1001_1111b ; Byte que indica fondo azul y letras blancas
MOV BX, MENSAJE1 ; Direccion donde estan los datos del primer mensaje
MOV DX, 00h ; Direccion del primer caracter de la pantalla
CALL IMPRIME
MOV CH, 0000_1111b ; Byte que indica fondo negro y letras blancas
MOV BX, MENSAJE2 ; Direccion donde estan los datos del segundo mensaje
MOV DX, 50h ; Direccion del primer caracter de la pantalla
CALL IMPRIME
RET
IMPRIME: ; imprime en la posicion DX de la pantalla los datos que estan
; en la posicion BX, segun el color CH
LAZO:
; lectura de datos
; los datos se encuentran al final del codigo en la posicion
; 07000 + DATOS
MOV AX, 0700h
MOV DS, AX ; DS <- 0700H MOV CL,[BX] ; copia en CL contenido de 0700:BX (o sea 07000 +
BX) MOV AL,CL CMP AL,'/' JZ FIN INC BX ; escritura de datos ; el primer caracter de la
pantalla de 80x25 esta en la posicion 0B8000H ; a partir de ahi se almacenan dos bytes por
caracter: ; primer byte es el de color de fondo y letra ; segundo byte es el codigo ascii del caracter
MOV AX,BX MOV BX,DX MOV DX,AX ; AX <-> BX
MOV AX, 0B800h
MOV DS, AX ; DS <- 0B800H. MOV [BX], CX ; copia contenido de CX a la memoria B800:BX (o sea B8000 + BX) INC BX INC BX MOV AX,BX MOV BX,DX MOV DX,AX ; AX <-> BX
JMP LAZO
FIN:
RET ; returns to operating system.
MENSAJE1:
DB 'H'
DB 'O'
DB 'L'
DB 'A'
DB ' '
DB 'T'
DB 'O'
DB 'D'
DB '@'
DB 'S'
DB '/'
MENSAJE2:
DB 'C'
DB 'O'
DB 'M'
DB 'O'
DB ' '
DB 'E'
DB 'S'
DB 'T'
DB 'A'
DB 'N'
DB ' '
DB 'T'
DB 'O'
DB 'D'
DB '@'
DB 'S'
DB '?'
DB '/' [9]
________________________________________________________________
1 comentario:
en los primeros ejercicios falto especificar mas el funcionamiento el ejemplo, debido a que no todos entendemos el codigo lenguaje ASSEMBLER ni como funciona
Lina Maria Cuervo Diaz
Publicar un comentario