Tuesday, May 26, 2020

PROGRAMAS EN ENSAMBLADOR x86

Programa que despliega "Hola, mundo!!"

; HOLA.ASM
; Despliega una leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS
DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS
CODE SEGMENT ; Segmento de Código
ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO: ; Punto de entrada al programa
MOV AX,DATA ; Pone dirección en AX
MOV DS,AX ; Pone la dirección en los registros
MOV DX,OFFSET SALUDO ; Obtiene dirección del mensaje
MOV AH,09H ; Función: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Función: Terminar
INT 21H
CODE ENDS
END INICIO ; Marca fin y define INICIO
view raw hola_mundo.asm hosted with ❤ by GitHub

Programa que pide tu nombre desde teclado y muestra un mensaje en consola saludandote.

include 'emu8086.inc'
ORG 100h
LEA SI, msg1 ; establece puntero (SI) a msg
; pregunta el numero
CALL print_string ; imprime mensaje que SI apunta
LEA DI, buffer ; configura el puntero (DI) para ingresar buffer
MOV DX, bufSize ; asigna tamano al buffer
CALL get_string ; obtiene nombre y lo pone en el buffer
LEA SI, newln ; apunta a CR/LF / Hello message
CALL print_string ; imprime mensaje que SI apunta
RET ; retorna al sistema operativo.
; data
msg1 DB "Enter your name: ", 0
newln DB 13, 10
DB "Hello, "
buffer DB 20 DUP (0) ; ingresa buffer para get_string
bufSize = $-buffer ; calcula el tamano del buffer
DEFINE_GET_STRING
DEFINE_PRINT_STRING
END ; directiva para detener el compilador
view raw tunombre.asm hosted with ❤ by GitHub
Programa que dibuje una diagonal en la pantalla.

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
view raw diagonal.asm hosted with ❤ by GitHub
Programa que lea un archivo y cuente cuántas palabras terminan con la letra a.

name "archivo3"
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, 1
mov dx, offset leido
mov ah, 3fh
int 21h
cmp ax, 0 ;ax queda en 0 cuando llega a EOF
jz FIN ;si es 0 entonces va a fin para cerrar archivo
;Detectar palabras que terminan con a
mov dl, leido[0]
cmp dl, " " ;comparar si es espacio
jz mostrar ;si es espacio entonces ir a mostrar
jmp abajo ;si no es espacio entonces ir a abajo
mostrar:
cmp aux, "a" ;compara si el anterior es a
jnz abajo
inc cont ;si es a entonces incrementar contador
abajo:
mov aux, dl ;guardar en aux lo que hay en dl para comparar en la proxima vuelta
jmp leer
FIN:
;cerramos archivo
mov bx, handle
mov ah, 3eh
int 21h
ret
archivo db "C:\HAZLO.txt", 0 ;ascii del nombre del archivo
leido db "$"
handle dw ? ;identificador del arhivo
aux db "$"
cont db 0
view raw letras.asm hosted with ❤ by GitHub
Programa que pide un numero desde teclado y lo muestra en la consola.

include 'emu8086.inc'
ORG 100h
LEA SI, msg1 ; pregunta por el numero
CALL print_string ;
CALL scan_num ; obtiene numero en CX.
MOV AX, CX ; copia numero al AX.
; imprime la siguiente cadena:
CALL pthis
DB 13, 10, 'Has ingresado: ', 0
CALL print_num ; imprime numero en AX.
RET ; retorna al sistema operativo.
; data
msg1 DB 'Ingresa numero: ', 0
; macros para definir procs
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS ; requerido para print_num.
DEFINE_PTHIS
END ; directiva para detener el compilador.
view raw numero.asm hosted with ❤ by GitHub
Programa para saber si un numero es mayor.

name "mayor"
mov AX, 5
mov BX, 5
;mov DX, AX
;CX el valor más 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
view raw mayor.asm hosted with ❤ by GitHub
Programa que suma 2 números.

; sumar dos numeros binarios de 24bits y almacenar el resultado
; apartir de la localidad de memoria 0206h. (Los bits menos significativos
; de los numeros empiezan en las localidades 0200h y 0203h)
SUMA:
MOV AL, [200] ; Mover el contenido de la localidad 200 a AL
ADD AL, [203] ; Sumar la localidad 203 a AL
MOV [206], AL ; Mover a la localidad 206 el registro AL
MOV AL, [201] ; Mover la localidad 201 a AL
ADC AL, [204] ; Sumar la localidad 204 a AL
MOV [207], AL ; Mover AL a la localidad 207
MOV AL, [202] ; Mover la localidad 202 al registro AL
ADC AL, [205] ; Sumar la localidad 205 al registro AL
MOV [208], AL ; Mover el registro AL a la localidad 208
RET ; Retornar
MOV AH,4CH
INT 21h
view raw suma.asm hosted with ❤ by GitHub

No comments:

Post a Comment