Sei sulla pagina 1di 7

Primer programa para entender como utilizar los registros:

ORG 100h
mov ax, 10 ;AX=10
mov bx, 00F9h ;BX=0xF9
inc bx ;BX++
add ax, 4 ;AX=AX+4
mov cx,45 ;CX=45
sub cx,cx ;CX=CX-CX
ret

Utilizar Loop:
ORG 100h
MOV CX, 5
MOV BX, 1
MOV DL, 2
comienzo:
MOV AX, BX
MUL DX
MOV BX, AX
LOOP comienzo
RET

Potencia:
name "potencia" ;8 chars DOS
org 100h ;counter to 100h
mov cx, num2
mov ax, num1
inicio:
mov bx,num1
mul bx ;ax = ax * bx
loop inicio ;c--

mov num3,ax ;copiamos el resultado

ret
;Variables "db" para byte y "dw" para word
num1 dw 0Ah
num2 dw 03h
num3 dw 0h

Raiz cuadrada:
org 100h
siguiente:
inc r
mov ax, r
mul ax
cmp ax, m
jbe siguiente ;(r*r) MENOR O IGUAL a m
dec r
ret

;Variables
m dw 146
r dw 0 ;Al final debe ser r=sqrt(m).

Arreglos:
name "arreglo"
org 100h
;un areglo se puede acceder a travez de []
mov cx, 9 ;cuantos elementos voy a recorrer, empezamos con el 9
inicio:
mov si, cx
mov dl, v[si]
cmp dl, mayor
jng siguiente:
mov mayor,dl
siguiente:

loop inicio
ret
v db 1,32,64,32,98,12,5,21,91,38
mayor db 0

Saber si un numero es mayor:


name "mayor"

mov AX, 5
mov BX, 5
;mov DX, AX

;CX el valor ms grande entre AX Y BX


;AX-BX mayor a 0
sub AX,BX
js A_MENOR_B
mov CX,AX
jmp FIN
A_MENOR_B:
mov CX,BX
FIN:

;mov AX,DX
ret

Multiplicacion:
ORG 100h
MOV AL, 200 ; AL = 0C8h
MOV BL, 4
MUL BL ; AX = 0320h (800)

RET

Interrupciones (Ejemplo de 21h):

name "int01"
org 100h
mov ah, 1 ;Leer un caracter de la entrada estandar
int 21h ;Llamada al sistema operativo (DOS)
mov tecla, al
mov ah, 2 ;imprime un simbolo a la consola
mov dl, simbolo ;el caracter a mostrar, en este caso la E
int 21h ;Llamada al DOS

inc tecla
mov ah, 7 ;NO imprime un simbolo a la consola
mov dl, tecla ;
int 21h ;Llamada al DOS

ret
;Variables
tecla db 0
simbolo db 45H
;ah que queres hacer
;ah = 1 guarda caracter en al
;ah = 2 escribe un caracter en la consola. El ascii del cacacter a imprimir se pone e
l dl
;AH = 7 es igual a el ah=2 pero el resultado no se ve en pantalla
;ah = 9 imprime una cadena en la consola. Considera el caracter $ como fin de cadena.
;La direccion de la cadena se expresa en DX

Cadenas:
org 100h
mov msg[2], 34H
mov dx, offset msg
mov ah, 9
int 21h
ret

msg db "hello world $"

Cambiar a maysculas:
name "int02"
ORG 100H
lectura:
mov ah,7
int 21h

mov tecla, al
cmp al,13
jz fin:
cmp tecla, 122 ;si tecla es mayor a 122 entonces ir a fin3 (tecla > 122)
ja fin3
cmp tecla,96 ;si tecla no es mayor a 96 ir a fin3 (tecla <= 96)
jng fin3
sub tecla, 32 ;si es 'a' hasta 'z' entonces restarle 32
fin3:
mov ah,2
mov dl,tecla
int 21h
jmp lectura
fin:
ret
tecla db 0

Procedimientos:
org 100h
mov bx, 5h
mov ax, 10h

call inicializar
inc ax
ret
inicializar PROC
MOV ax, 1234h
ret
inicializar ENDP

Archivos:
org 100h
mov al, 0 ;modo de acceso para abrir arhivo, modo lectura/escritura
mov dx, offset archivo ;offset lugar de memoria donde esta la variable
mov ah, 3dh ;se intenta abrir el archivo
int 21h ;llamada a la interrupcion DOS
jc error ; si se prendio la bandera c ir a error

mov handle, ax ;si no paso mover a lo que le dio el SO


jmp leer

error:
; ....

;leer archivo
leer:
mov bx, handle
mov cx, 5
mov dx, offset leido
mov ah, 3fh
int 21h

;cerramos archivo
mov bx, handle
mov ah, 3eh

int 21h

;imprimir el contenido de leido


mov dx, offset leido
mov ah, 9
int 21h

ret

archivo db "C:\prueba.txt", 0 ;ascii del nombre del archivo


leido db "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
handle dw ? ;identificador del arhivo

Interrupcin 13h (Grficos)


mov cx,1
mov al, 13h
mov ah, 0
int 10h ; set graphics video mode.
bucle1:
mov dx, cx
mov al, color ;AL = pixel color
mov ah, 0ch ;Change color for a single pixel
int 10h ;set pixel
cmp cx, 101 ;llegar hasta 100 x 100 (va en diagonal)
jz fin
inc cx ;DX = row.
add color, 2 ;para cambiar colores
jmp bucle1 ;CX = column
fin:
ret
color db 1

Potrebbero piacerti anche