lunes, 1 de abril de 2019

2.7- Incremento y decremento y 2.8-Captura de cadenas con formato

2.7-Incremento y decremento
Son las instrucciones más básicas a la hora de hacer operaciones con registros: INC

incrementa el valor de un registro, o de cualquier posición en memoria, en una unidad, y  DEC lo decrementa.



Instrucción INC

INC AX

Incrementa en uno el valor de AX

IN WORD PTR

Incrementa la palabra situada en CS.



Instrucción DEC

DEC AX

Decremento AX, le resta uno.

DEC WORD PTR

Decrementa la palabra situada en CS


2.8-Captura de cadenas con formato
El capturar cadenas con formato permite el movimiento, comparación o búsqueda rápida entre bloques de datos, las instrucciones son las siguientes:

MOVC:

Esta instrucción permite transferir un carácter de una cadena.

MOVW:

Esta instrucción permite transferir una palabra de una cadena.

CMPC:

Este comando es utilizado para comparar un carácter de una cadena.

CMPW:

Esta instrucción es utilizada para comparar una palabra de una cadena.

SCAC:

Esta instrucción permite buscar un carácter de una cadena.

SCAW:

Esta instrucción se utiliza para buscar una palabra de una cadena.

LODC:

Esta instrucción permite cargar un carácter de una cadena.

LODW:

Esta instrucción es utilizada para cargar una palabra de una cadena.

STOC:

Esta instrucción permite guardar un carácter de una cadena.

STOW:

Esta instrucción es utilizada para guardar  una palabra de una cadena.

Unidad No.2- Programa con loopz

Ejecución del programa:





Código:

; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h

;inova a la interrupcion para desplegar 
;el mensaje
int 21h 

;leera hasta 10 veces la letra S
mov cx, 10       ;veces a repetir
mov al,  '>'        ;caracter inicial

lee_car:
mov ah,0eh ;funcion para imprimir el caracter
int 10h ;llamar a BIOS 

mov ah,00 ;funcion esperar un caracter del
;teclado
int 16h ;llamar a BIOS
cmp al,'S' ;compara el caracter presionado 
;con 's'
loopz lee_car ;si es igual, salta a otro_c

mov ah,0eh ;funcion para imprimir el caracter
int 10h ;llama al BIOS

;coloca el fin de linea para que baje en linea
;y lo imprima
mov ah,0eh ;funcion del BIOS para
;imprimir un caracter

mov al,10
int 10h  

;coloca el retorno de carro para que vaya al inicio
mov al,13
int 10h

;preparo salida del programa
mov ax,4c00h
int 21h

end inicio

Unidad No.2- Programa de arreglos(Explicado por Lyvan Lumbreras)

Ejecución:







Código:



org 100h
include 'emu8086.inc'
mov si, 0    ;ponemos si en 0

comienzo:
mov al, msg2[0]   ;copiar la primera letra de la palabra A al

cmp msg[si],"$"   ;si es el fin de la cadena mandar a final
 jz final      ; brinca si es igual

cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena
 jne seguir    ;brica si es diferente

mov di, 1         ;poner en 1 di 

comprobar:
 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al     ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir             ;si no coincide mandar a seguir 
 inc di                 ;incrementar di para seguir recorriendo cadena

 cmp msg2[di],"$"       ;si es el fin de la cadena y el programa llego
 jz resultado           ;aca quiere decir que la cadena es parte de la palabra

loop comprobar         ;bucle para recorrer cadena
                                                                                                    
seguir: 
 inc si       ;para seguir recorriendo la palabra
loop comienzo   ;bucle principal para recorrer palabra
resultado:
  mov dx, offset msg3    ;copiar msg3 a dx
  mov ah, 9              ;preparar ah con 9 para la interrupcion 21h
  int 21h                ;mostrar contenido en dx 
 
final:
cmp di,0
jz no
ret

no:
print "No se encontro la cadena"
ret  

msg db "tecnologico$"
msg2 db "tco$"
msg3 db "Si se encuentra$

Unidad No.2-Arreglos en ensablador

Programa No.1:


Ejecución del programa:


Código:

org 100h 
include 'emu8086.inc'
mov si, 0    ;ponemos si en 0 
   
   
comienzo: 
mov al, msg2[0]   ;copiar la primera letra de la palabra A al

cmp msg[si],"$"   ;si es el fin de la cadena mandar a final
 jz final      ; brinca si es igual

cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena
 jne seguir    ;brica si es diferente


mov di, 1         ;poner en 1 di  

comprobar:

 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al     ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir             ;si no coincide mandar a seguir  


 inc di                 ;incrementar di para seguir recorriendo cadena

 cmp msg2[di],"$"       ;si es el fin de la cadena y el programa llego 
 jz resultado           ;aca quiere decir que la cadena es parte de la palabra


loop comprobar         ;bucle para recorrer cadena
                                                   
                                                   
seguir:  

 inc si       ;para seguir recorriendo la palabra

loop comienzo   ;bucle principal para recorrer palabra

resultado:

  mov dx, offset msg3    ;copiar msg3 a dx
  mov ah, 9              ;preparar ah con 9 para la interrupcion 21h
  int 21h                ;mostrar contenido en dx  
  
final: 



ret   

msg db "tecnologico$"
msg2 db "tec$"

msg3 db "Si se encuentra$"

Programa No.2:

Ejecución:



Código:

org 100h 
include 'emu8086.inc'   


mov si, 0    ;ponemos si en 0 

   
   
comienzo: 
mov al, msg2[0]   ;copiar la primera letra de la palabra A al

cmp msg2[si],"$"   ;si es el fin de la cadena mandar a final
 je final      ; brinca si es igual

cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena
 jne seguir    ;brica si es diferente


mov di, 1         ;poner en 1 di  

comprobar:

 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al     ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir             ;si no coincide mandar a seguir  
         

 inc di                 ;incrementar di para seguir recorriendo cadena

 cmp msg[di],"$"       ;si es el fin de la cadena y el programa llego 
 jz resultado           ;aca quiere decir que la cadena es parte de la palabra


loop comprobar         ;bucle para recorrer cadena
                                                   
                                                   
seguir:  
      mov di, 1
 inc si       ;para seguir recorriendo la palabra

loop comienzo   ;bucle principal para recorrer palabra

resultado:

  mov dx, offset msg3    ;copiar msg3 a dx
  mov ah, 9              ;preparar ah con 9 para la interrupcion 21h
  int 21h                ;mostrar contenido en dx  
  jmp fin
  
  
final: 

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

fin:
ret   

msg db "tecnologico$"
msg2 db "tecnolovgico$"

msg3 db "Si se encuentra$"
msg4 db "No se encuentra$"
msg5 db "fin$"

Programa No.3 

Ejecución del programa:



Código:

org 100h 
include 'emu8086.inc'   


mov si, 0    ;ponemos si en 0 

   
   
comienzo: 
mov al, msg2[0]   ;copiar la primera letra de la palabra A al

cmp msg2[si],"$"   ;si es el fin de la cadena mandar a final
 je final      ; brinca si es igual

cmp msg[si], al   ;comparar si encuentra la primera letra de la cadena
 jne seguir    ;brica si es diferente


mov di, 1         ;poner en 1 di  

comprobar:

 mov al, msg2[di]
 mov bx, di
 cmp msg[si+bx], al     ;posicion de la letra coincidente + di, comparar con la cadena
 jne seguir             ;si no coincide mandar a seguir  
         

 inc di                 ;incrementar di para seguir recorriendo cadena

 cmp msg[di],"$"       ;si es el fin de la cadena y el programa llego 
 jz resultado           ;aca quiere decir que la cadena es parte de la palabra


loop comprobar         ;bucle para recorrer cadena
                                                   
                                                   
seguir:  
      mov di, 1
 inc si       ;para seguir recorriendo la palabra

loop comienzo   ;bucle principal para recorrer palabra

resultado:

    printn 'si se encuentra'              
  jmp fin
  
  
final: 

  print 'no se encuentra'

fin:
 mov ax, 4c00h  
 ret 

msg db "tecnologico$"
msg2 db "tecnolovgico$"

msg5 db "fin$

Unidad No.2 Ciclos condicionales(Clase)

Unidad No.2 Ciclos condicionales(Clase)

Los blucles deben ir acompañados del registro CX.

Control de Bucles (instrucciones simples)
Éstas posibilitan el grupo de control más elemental de nuestros programas. Un bucle es un bloque de código que se ejecuta varias veces. Hay 4 tipos de bucles básicos:
o Bucles sin fin
o Bucles por conteo
o Bucles hasta
o Bucles mientras
Las instrucciones de control de bucles son las siguientes:
·· INC incrementar
·· DEC decrementar
·· LOOP realizar un bucle
·· LOOPZ,LOOPE realizar un bucle si es cero
·· LOOPNZ,LOOPNE realizar un bucle si no es cero
·· JCXZ salta si CX es cero
Instrucciones de Prueba, Comparación y Saltos.
Este grupo es una continuación del anterior, incluye las siguientes instrucciones:
·· TEST verifica
·· CMP compara
·· JMP salta
·· JE, JZ salta si es igual a cero
·· JNE, JNZ salta si no igual a cero
·· JS salta si signo negativo
·· JNS salta si signo no negativo
·· JP, JPE salta si paridad par
·· JNP, JOP salta si paridad impar
·· JO salta si hay capacidad excedida
·· JNO salta si no hay capacidad excedida
·· JB, JNAE salta si por abajo (no encima o igual)
·· JNB, JAE salta si no está por abajo (encima o igual)
·· JBE, JNA salta si por abajo o igual (no encima)
·· JNBE, JA salta si no por abajo o igual (encima)
·· JL, JNGE salta si menor que (no mayor o igual)
·· JNL, JGE salta si no menor que (mayor o igual)
·· JLE, JNG salta si menor que o igual (no mayor)
·· JNLE, JG salta si no menor que o igual (mayor)

Programa 1:
Link del archivo: https://drive.google.com/open?id=1Pxv0IlF_L9gz4mMxStGShvTjVvAjUF1j

Ejecución del programa:


Código:
; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt

org 100h
include 'emu8086.inc'

mov cx,50 ;es registro que controla el numero de veces de iteraciones 

comienzo: ;debe tener un etiqueta loop
        printn 'letrero'
        
loop comienzo        


ret

Programa No.2:

Ejecución del programa:


Código:

.model tiny

name 'bucle'

.data
    dato db 10,13,'letrero $' 
    
.code
inicio:
      mov cx,50
      comienzo:
              mov dx,offset dato
              mov ah,09
              int 21h
              loop comienzo 
              
              
Programa No.3:

Ejecución del programa:


Código:

.model tiny

name 'bucle'

.data
    dato db 10,13,'letrero $' 
    
.code
inicio:
      mov cx,50
      comienzo:
              lea dx,dato
              mov ah,09
              int 21h
              loop comienzo 

Programa No.4:

Ejecución del programa:


Código:

.model tiny

name 'bucle'

.data
    dato db 10,13,'letrero $' 
    
.code
inicio:
      mov cx,9
      comienzo:
              lea dx,dato
              mov ah,09
              int 21h
              loopne comienzo 

Programa No.5:

Ejecución de programa:


Código:


.model tiny

name 'bucle'

.data
    dato db 10,13,'letrero $' 
    
.code
inicio:
      mov cx,0
      comienzo:
              lea dx,dato
              mov ah,09
              int 21h
              jcxz comienzo

jueves, 28 de marzo de 2019

Unidad No.3-Trabajando con Turbo Assembler

Ejecución del programa:



Código:

CR EQU 13
LF EQU 0Ah

DATOS SEGMENT
       MENSAJE DB CR, LF, 'Hola mundo este programa fue compilado por Ivan Gutierrez', 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   

Programa No.2

Link del programa: https://drive.google.com/open?id=1mjcmgYCnMYn7XRYEfhkArns5sY_r6HbD

Ejecución:



Código:

CR EQU 13
LF EQU 10
IMPRIMIR EQU 9
PIN EQU 4C00H
DOS EQU 21H

DATOS SEGMENT
    TEXTO DB 'EJEMPLO DE USO DE CONSTANTES POR IVAN GUTIERREZ', CR, LF, '$'
   
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP ('PILA')
PILA ENDS

CODIGO SEGMENT
    ASSUME CS: CODIGO, DS: DATOS, SS: PILA
    INICIO:
    MOV AX, DATOS
    MOV DS, AX
    MOV DX, OFFSET TEXTO
    MOV AH, IMPRIMIR
    INT DOS
    MOV AX, PIN
    INT DOS
   
CODIGO ENDS
END INICIO

Programa No.3:

Link del programa: https://drive.google.com/open?id=1CpO0zNQ80aSTKuZ-npxtX8WCA6r0GYFh

Ejecución:


Código:

CR EQU 13
LF EQU 10

DATOS SEGMENT
    MENSAJE DB, CR, LF, 'Hola mundo traido por Ivan Gutierrez', CR, LF, '$'
   
DATOS ENDS

PILA SEGMENT STACK
    DB 64 DUP('PILA')
PILA ENDS

CODIGO SEGMENT
    HMF PROC FAR
    ASSUME CS: CODIGO, DS: DATOS, SS: PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, MENSAJE
   
    CALL ESCRIBE
    MOV AX, 4C00H
    INT 21H
   
    HMF ENDP
   
    ESCRIBE PROC
    MOV AH,9
    INT 21H
    RET
    ESCRIBE ENDP
   
CODIGO ENDS
END HMF

Programa No.4:

Link del programa: https://drive.google.com/open?id=11Sw82U12hNgsZbvG000kLgfow_pTTO_c

Ejecución:


Código:

CR EQU 13
LF EQU 10

DATOS SEGMENT
    LINEA1 DB CR, LF, 'Ivan Gutierrez', CR, LF, '$'
    LINEA2 DB 'Tecnologico de Matamoros', CR, LF, '$'
    LINEA3 DB 'Ing. Sistemas Computacionales', CR, LF, '$'
   
DATOS ENDS

PILA SEGMENT STACK
DB 64 DUP('PILA')
PILA ENDS

CODIGO SEGMENT
    LN PROC FAR
   
    ASSUME CS: CODIGO, DS: DATOS, SS: PILA
    MOV AX, DATOS
    MOV DS, AX
    LEA DX, LINEA1
    CALL ESCRIBE
    LEA DX, LINEA2
    CALL ESCRIBE
    LEA DX, LINEA3
    CALL ESCRIBE
    MOV AX, 4C00H
    INT 21H
   
    LN ENDP
   
    ESCRIBE PROC
    MOV AH, 9
    INT 21H
    RET
    ESCRIBE ENDP
   
CODIGO ENDS
END LN 

Unidad No.3: Mejora programa # 9: Letras de colores(Versión Ingrid Sauceda)

Ejecución del programa: Código: include 'emu8086.inc' Mostrar Macro Mensaje     LEA DX,Mensaje ;mandamos el mensaje a leer     MO...