ejercicosassembler

Páginas: 13 (3188 palabras) Publicado: 1 de marzo de 2015
; suma los 10 primeros numeros enteros
; el resultado queda almacenado en AX
.model small
.code
ini:
mov cx,10 ; asigna a CX la cantidad de enteros a sumar
mov ax,0 ; inicializa la suma (AX) con 0
mov bx,1 ; BX <-- 1 , es el 1er entero a sumar
otra_vez:
add ax,bx ; suma a AX el N_esimo entero
inc bx ; pasar al siguiente enteroloop otra_vez ; decrementa CX, sino es 0 vuelve a iterar
mov ah,4ch ; salir
int 21h
end ini

; calcula el factorial de NUM y lo almacena en AX
; AX = NUM*(NUM-1)*(NUM-2)...
.model small
.const
NUM=5 ; factorial de 5
.code
ini:
mov cx,NUM ; establece # de iteraciones
mov ax,1 ; inicializa factorial a 1
a01:
mul cx ;AX = AX * CX
loop a01 ; CX = CX - 1

mov ah,4ch
int 21h
end ini

; halla el MCD mediante el algoritmo de Euclides
; AX contiene al MCD
.model small
.code
ini:
mov ax,42 ; AX es el numero mayor
mov bx,18 ; BX es el numero menor
a01:
xor dx,dx ; hace DX=0
div bx ; DX_AX/BX
mov ax,bx ; divisor pasa aser dividendo
mov bx,dx ; residuo pasa a ser divisor
or dx,dx ; si residuo es 0
jne a01 ; vuelve a iterar
; sino sale
mov ah,4Ch
int 21h
end ini

; halla la suma de los divisores de un numero dividiendolo
; entre 1, 2, 3, ... cada vez que el residuo es 0, lo acumula
; en el registro DI
.model small
.codeini:
mov si, 18 ; SI contiene el nro a analizar
mov di,0 ; se inicializa la suma (DI) con 0
mov bx, 1 ; BX divisor inicial (1)
a01:
mov ax,si ; Dividendo (AX) <-- SI
div bl ; AX/BL
cmp ah,0 ; comparar residuo con 0
jne a02 ; saltar a a02 si no es igual
add di,bx ; si residuo es 0, acumular en DI el divisor
a02:inc bl ; pasar al siguiente valor (divisor)
cmp al,0 ; si AL=0 ==> ya no hay mas divisores
jne a01
mov ah,4ch
int 21h
end ini

; halla AX^BX, resultado en AX
.model small
.code
ini:
mov ax,3 ; establece la base
mov bx,7 ; establece la potencia

mov cx,bx ; establece # de iteraciones (7)
mov bx,ax ; BX<-- 3, asigna a BX la base (3)
mov ax,1 ; AX <-- 1, inicializa la potencia con 1
a01:
mul bx ; AX <-- AX * BX (multiplica CX veces BX)
loop a01

mov ah,4ch
int 21h
end ini

; halla el N_esimo termino de la serie de fibonacci
; AX contiene el resultado
.model small
.code
ini:
mov cx,8 ; CX es la cantidad de terminos a determinar
mov ax,1; AX es el termino -1
mov bx,0 ; BX es el termino 0, T(1)=T(-1)+T(0), T(2)=T(0)+T(1)...
a01:
mov dx,ax ; DX <-- AX
add dx,bx ; DX <-- DX + BX = AX + BX
mov ax,bx ; AX pasa a ser el siguiente termino
mov bx,dx ; BX pasa a ser el ultimo termino
loop a01 ; mientras CX>0 vuelve a iterar

movah,4ch
int 21h
end ini

; halla la suma de los digitos del numero AX
; divide sucesivamente AX entre 10 y acumula los residuos (digitos)
; en SI, resultado en SI
.model small
.code
ini:
mov ax,1234 ; AX <-- # a procesar
mov bx,10 ; BX <-- 10
mov si,0 ; inicializa suma(SI) con 0
a01:
xor dx,dx ; DX <-- 0
div bx ; DX_AX/BX
addsi,dx ; suma a SI el residuo de la division (digito)
or ax,ax ; comprueba si dividendo es 0
jnz a01 ; regresa a a01 sino es 0

mov ah,4ch
int 21h
end ini

; halla el entero mas cercano a la raiz
; cuadrada de un entero
.model small
.data
x dw 30
a dw 20
.code
ini:
mov ax,@data
mov ds,ax
a01:...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS