1. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
Códigos en Assembler
Programa Hola Mundo
1. name "hi-world"
2.
3. org 100h
4.
5. mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
6. int 10h ; do it!
7.
8. mov ax, 1003h
9. mov bx, 0
10. int 10h
11.
12. mov ax, 0b800h
13. mov ds, ax
14.
15.
16. mov [02h], 'H'
17.
18. mov [04h], 'o'
19.
20. mov [06h], 'l'
21.
22. mov [08h], 'a'
23.
24. mov [0ch], ' '
25.
26. mov [0eh], 'M'
27.
28. mov [10h], 'u'
29.
30. mov [12h], 'n'
31.
32. mov [14h], 'd'
33.
34. mov [16h], 'o'
35.
36. mov [18h], '!'
37.
38. mov cx, 12 ; number of characters.
39. mov di, 03h ; start from byte after 'h'
40.
41. c: mov [di], 11101100b ; light red(1100) on yellow(1110)
42. add di, 2 ; skip over next ascii code in vga memory.
43. loop c
2. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
44. mov ah, 0
45. int 16h
46.
47. ret
Ejecución.
Programa que muestra Nombre, Universidad, Fecha y Materia
Datos segment para 'Data'
cad DB "Guido Espinosa - PUCESI - 03/05/2016 - Compiladores$";la cadena deve terminar en
$ forzosamente
Datos ends
Pila segment para 'Stack'
DB 20 DUP('mi_pila')
Pila ends
Codigo segment para 'Code'
assume DS:DATOS,SS:Pila,CS:Codigo
proseso proc far
push DS
mov AX,0
push Ax
mov AX,Datos
mov DS,Ax
3. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
mov AH,09H
lea Dx,cad
int 21H
ret
proseso endp
Codigo ends
end proseso
Ejecución.
Compilar un programa que permita comparar 2 números del 0 al 9.
.model small
.stack
.data
var1 db ?
var2 db ?
msg1 db '++ El primero es mayor++ $'
msg2 db '++ El primero es menor++$'
msg3 db '++ Son iguales++$'
msg4 db '++ Primero valor: $'
msg5 db '++ Segundo valor: $'
.code
.startup
mov ah,00h
mov al,03h
int 10h
4. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
mov ah,02h
mov dx,0510h
mov bh,0
int 10h
mov ah,09h
lea dx,msg4
int 21h
mov ah,07h
int 21h
mov ah, 02h
mov dl,al
int 21h
mov var1,al
mov ah,09h
lea dx,msg5
int 21h
mov ah,07h
int 21h
mov ah,02h
mov dl,al
int 21h
mov var2,al
cmp var1,al
ja mayor
jb menor
je igual
mayor:
mov ah,09h
lea dx,msg1
int 21h
jmp salir
menor:
mov ah,09h
lea dx,msg2
5. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
int 21h
jmp salir
igual:
mov ah,09h
lea dx,msg3
int 21h
jmp salir
salir:
.exit
End
Ejecución.
Compilar un programa que permita sumar 10 valores asignados a un vector.
DATOS SEGMENT ; empieza segmento de datos
NUMEROS DB 1,2,3,4,5,6,7,8,9,10 ; ARREGLO DE DATOS
CUENTA DW 10; NUMERO DE DATOS A SUMAR
DATOS ENDS
PILA SEGMENT STACK; SEPARA 256 LOCALIDADES DE 16B
DW 256 DUP (?); PARA EL SATCK
PILA ENDS
CODIGO SEGMENT; INICIA SEGMENTO DE CODIGO
SUMA PROC FAR; EMPIEZA PROGRAA PRINCIPAL
ASSUME CS:CODIGO, DS:DATOS, SS:PILA; ASIGNA LOS
6. Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Guido Espinosa de los Monteros
PUSH DS
XOR AX, AX
PUSH AX ; DIRECCION DE RETORNO A WINDOWS
MOV AX, DATOS
MOV DS, AX; EMPIEZA PROGRAMA DE SUMA
MOV AL, 00H; INICIALIZA SUMADOR
MOV SI, 00H; APUNTADOR DE DATOS
MOV CX, CUENTA; CARGA EN CX NUMERO DE DATOS
CICLO: CMP NUMEROS [SI], 0; SI ES NEGATIVO NO LO SUMA
JL SIGUE
ADD AL , NUMEROS [SI]; SUMA SOLO POSITIVOS
SIGUE: INC SI ; INCREMENTA APUNTADOR DE DATOS
LOOP CICLO; REPITE EL CICLO CUENTA VECES
; DESPLIEGA LA SUMA Y TERMINA
; LIMPIA
AAM
ADD AH, 30H
ADD AL, 30H
MOV DL, AH ; DESPLIEGA EL RESULTADO (AL) EN EL MONITOR
MOV AH, 02H
INT 21H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AH, 07
INT 21H
RET
SUMA ENDP
CODIGO ENDS
END SUMA
Ejecución.