Entradas

Mostrando entradas de febrero, 2018

Programa de 3 lineas de código y cambio de color al presionar ENTER.

Imagen
pila segment stack 'stack'     db 100h dup (?) pila ends datos segment             ;texto e instrucciones.     titulo db 13,10,' Eduardo',13,10,'$'     t db 13,10,' Ismael',13,10,'$'     mensaje db 13, 10, ' 2',13,10,'$' datos ends codigo segment ;segmento de codigo     assume cs:codigo, ss:pila, ds:datos       ;prepara pantalla       inicio:         mov ah,0            mov al,3h     ;modo texto            int 10h       ;interrupcion de video         mov ax,0600h  ;limpia pantalla         mov bh,0fh     ;0 color de fondo negro, f letra en blanco         mov cx,0000h         mov dx,184Fh         int 10h   ...

unidad 1

Unidad I: Introducción al lenguaje ensamblador. 1.1 Importancia de la programación en lenguaje ensamblador. El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de microprocesador. La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria. 1.2 El procesador y sus registros internos. Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son direccionable por medio de un nombr...

Ejercicios con funciones emu8086

Imagen
call inicializar call sumaraxbx hlt inicializar: mov ax, 8 mov bx, 9 ret sumaraxbx: add ax, bx ret mov ax, 8 mov bx, 9 add ax, bx hlt mov ax, 203 mov bl, 4 div bl call inicializar call divaxbx hlt inicializar: mov ax, 203 mov bx, 4 ret divaxbx: div bx ret call inicializar call multaxbx hlt inicializar: mov ax, 8 mov bx, 9 ret multaxbx: mul bx ret call inicializar call restaxbx hlt inicializar: mov ax, 10h mov bx, 12h ret restaxbx: sub ax, bx ret mov dl, 5 mov al, 10 mul dl  hlt mov ax, 10h mov bx, 12h sub ax, bx  hlt

Ejercicios con banderas

Imagen
Desbordamiento: Signo Negativo: Cero como resultado: Acarreo:

programa del video

Imagen
.model small .stack 64 .data n1 db 0 n2 db 0 suma db 0 msg1 db "dame el primer numero ", '$'  msg2 db 10, 13, "dame el segundo numero ", '$' msg3 db 10, 13, "suma : ", '$'      .code inicio: mov ax, @data mov ds, ax mov ah, 09 lea dx, msg1 int 21h mov ah, 01 int 21h sub al, 30h mov n1, al mov ah, 09 lea dx, msg2 int 21h mov ah, 01 int 21h sub al, 30h mov n2, al mov al, n1 add al, n2 add al, 30h mov suma, al mov ah, 09 lea dx, msg3 int 21h mov ah, 02 mov dl, suma int 21h mov ah, 4Ch end inicio end

Uso de //mov, 9h // int 21h

Imagen
.model small .stack 100h ;declaracion de constantes cr equ 13 lf equ 10 imprimir equ 9h fin equ 4c00h dos equ 21h .data texto DB lf,lf, cr, 'ejemplo de uso de constantes$' .code segment inicio: mov ax, @DATA mov ds, ax mov dx, offset texto mov ah, imprimir int dos mov ax, fin int dos end inicio end

Uso de INT 21h en ej. Limpiar Pantalla.

Imagen
FIN EQU 4C00H DOS EQU 21H MONITOR EQU 10H PILA SEGMENT  STACK     DW 100 DUP('0') PILA ENDS CODIGO SEGMENT    CLS PROC FAR        ASSUME CS:CODIGO, SS:PILA        CALL LIMP_PANT        MOV AX, FIN        INT DOS    CLS ENDP   LIMP_PANT PROC NEAR     MOV AX, 0600H     MOV BH, 71H     MOV CX, 000H     MOV DX, 484FH     INT 10H     RET   LIMP_PANT ENDP CODIGO ENDS END CLS

capturas de pantalla

Imagen

codigo de hola mundo de cambio de color en la pantalla y cambio de color por tecla

CR EQU 13 LF EQU 0AH DATOS SEGMENT     MENSAJE DB CR, LF, 'HOLA MUNDO POR EDUARDO SILVA', CR, LF, '$' DATOS ENDS PILA SEGMENT STACK     DB 64 DUP ('PILA') PILA ENDS CODIGO SEGMENT     HM PROC FAR     ASSUME CS: CODIGO, DS:DATOS, SS:PILA       MOV AX, DATOS     MOV DS, AX     LEA DX, MENSAJE       MOV AH,9     INT 21H       MOV AX, 4C00H     INT 21H       HM ENDP CODIGO ENDS END HM ------------------------------------------------------------------------------------ ;PILA SEGMENT STACK 'STACK' ;DB 100H DUP (?) ;PILA ENDS DATOS SEGMENT       MENSAJE DB 10, 13, 'Se ha cambiado el color de la pantalla$',10,13,'$' DATOS ENDS CODIGO SEGMENT     ASSUME CS:CODIGO, SS:PILA, DS:DATOS     INICIO: MOV AH,06H             MOV BH,2FH       ...

programas

org 100h call inicializar call divaxbx hlt; terminar proceso inicializar: mov ax, 203 mov bl, 4 ret divaxbx: div bl ret ---------------------------------------------------------------------- ORG 100h; CALL p1; ADD AX,1 RET ; p1: MOV AX,1234 RET; ---------------------------------------------------------------- ;ORG 100h ;mov al, 254; al=254 ;mov bl, 1 ;add al,bl ;ret     ; desbordamiento del registro bandera CF con multiplicacion ;ORG 100h ;mov al, 254 ;mov bl, 2 ;mul al ;ret  ; desbordamiento del registro bandera CF con divicion ORG 100h mov al, 254 mov bl, 2 div bl ret --------------------------------------------------------- ;registro bandera SF, toma el valor 1 cuando el resultado es negativo ORG 100h mov al, 2 mov bl, 3 sub al,bl ret ----------------------------------------------------- ORG 100h mov al, 100 mov bl, 50 add al,bl ret

registro segmento

;programa del video del blog .model small .stack 64 .data n1 db 0 n2 db 0 suma db 0 msg1 db "Dame el primer valor" msg2 db 10,13, "Dame el segundo calor" msg3 db 10,13, "suma:" .code inicio: ;direccionamos al segmento de datos mov ax,@data mov ds,ax ;solicitamos el primer digito mov ah,09 lea dx,msg1 int 21h ;se lee el primer valor mov ah,01 int 21h sub al,30h ;convertir el caracter a numero mov n1,al ;solicitamos el segundo digito mov ah,09 lea dx,msg2 int 21h ;se lee el priver valor mov ah,01 int 21h sub al,30h ;convertir el carater a numero mov n2,al ;operacion mov al, n1 add al,n2 add al,30h ;convierte a caracter mov suma,al mov ah,09 lea dx,msg3 int 21h ;se imprime el caracter con el servicio 02 de la int 21h mov ah,02 mov dl,suma int 21h mov ah,4ch end inicio end 

programa 1 y programa 2

.model small .code programa: MOV AX,4C00H INT 21H .STACK END programa  ------------------------------------------------------------------------- .model small .code programa: MOV AX,@DATA MOV DS,AX MOV DX, Offset texto MOV AH, 9 INT 21H MOV AX,4C00H INT 21H .DATA Texto DB "Mensaje en pantalla.$" .STACK END programa

Registros de propósito general

La CPU tiene 14 registros internos, cada uno de 16 bits. Los primeros cuatro, AX, BX, CX, y DX son registros de uso general y también pueden ser utilizados como registros de 8 bits, para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable también a los registros BX, CX y DX. Registros de uso general AX: Acumulador (AL:AH) BX: Registro base (BL:BH) CX: Registro contador (CL:CH) DX: Registro de datos (DL:DH)

Ejemplos emu8086