domingo, 13 de abril de 2008

Ejemplos de Assembler

; 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:

Anónimo dijo...

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