[etiqueta:] REP MOVSn

Documentos relacionados
ENSAMBLADOR DE ARCHIVO TASM MASM NASM GAS. Características de un Ensamblador de Archivo

Iniciación del mouse El servicio utilizado es el 00, este servicio inicializa el controlador del mouse como sigue:

REPERTORIO DE INSTRUCCIONES DEL MICROPROCESADOR 8086

Pregunta correcta= 0,3 Pregunta no contestada= 0 Pregunta incorrecta (tipo test)= -0,15

LENGUAJE ENSAMBLADOR PRÁCTICA 11 PRÁCTICA 11 CUATRO OPERACIONES FUNDAMENTALES EN NÚMEROS DE 8 BYTES

Intel Arquitectura. Programación en Ensamblador Ing. Marcelo Tosini

62/8&,21(6$/(;$0(1'( /$%25$725,2'((6758&785$6'(/26&20387$'25(6 &8562)(%5(52

MANUAL DE PROGRAMACIÓN EN ENSAMBLADOR 8086

P1.- Para facilitar la tarea, suponemos definido en el segmento de datos lo siguiente:

Buses y Periféricos. ITIS. Ensamblador y Turbo debugger

Resumen de las instrucciones del 8086/8088

LENGUAJE ENSAMBLADOR PRÁCTICA 16 PRÁCTICA 16

Conceptos de Arquitectura de Computadoras Curso 2015

SISTEMAS BASADOS EN MICROPROCESADOR 2º Grado Ingeniería Informática (EPS UAM) EXAMEN FINAL EXTRAORDINARIO JULIO 2013 ENUNCIADO DEL PROBLEMA

Arquitectura (Procesador familia 80 x 86 )

Repertorio de Instrucciones del 8086/8088

DIRECTIVAS DEL ASM86

El microprocesador de 16 bits 8086

Aprendiendo Sistemas Operativos: Programación de Procesadores de Arquitectura IA-32

MÓDULO III PROGRAMACIÓN DEL MICROPROCESADOR

Arquitectura de Computadores II 8086 Parte II

Intel 8086 modelo básico (primera parte) Registros:

Práctica 4. Lenguaje máquina y lenguaje ensamblador

Introducción al ensamblador 80x86

Instrucciones de Control de Flujo y Usos de la Pila

Parámetro de entrada. Un parámetro pasado del procedimiento que hace la llamada al procedimiento invocado.

Sobre cómo dividir un programa ensamblador x86 (modo Real) en módulos compilables por separado.

Tema 5: La pila, las macros y los procedimientos

Fig. 1: Tipos de datos que puede manejar el procesador

Tema 5. Presentación de datos por pantalla

INEL 4206 Microprocesadores Texto: Barry B Brey, The Intel Microprocessors:

SISTEMAS BASADOS EN MICROPROCESADORES

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1

Alternativas de programación

Tema 5.1: Presentación de datos en pantalla

Arquitectura intel Preámbulo de OSO para alumnos formados en el procesador MIPS. Asignatura Sistemas Operativos Murcia abril de 2005

Práctica 2. Registros y posiciones de memoria

Ensamblador. Introducción. Dpto. Física y Arquitectura de Computadores. Universidad Miguel Hernandez

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Instrucción De Salto Incondicional

Tema 4. Lenguaje máquina y lenguaje ensamblador

El Diseño de un Lenguaje Máquina

EL EMU8086 Y EL MICROPROCESADOR 8086.

8.4. El software en los μprocesadores

2 de septiembre de 2010 Hoja: 1 / 10. Solamente existe una opción válida en las preguntas de respuesta múltiple.

6-REGISTROS DEL 8086 Y DEL 80286

Tema 4. Lenguaje máquina y lenguaje ensamblador

Tema 2. Presentación de datos por pantalla. La ROM-BIOS

SISTEMAS BASADOS EN MICROPROCESADORES

Ensamblador para el 80x86


Apellidos Nombre DNI

Relación de Problemas I

UNIVERSIDAD NACIONAL DE INGENIERIA

1.2.- EL MICROPROCESADOR.

Contenido. Conjunto de Instrucciones. Formato de la Instrucción. Instrucciones de 1 byte. Formato de la Instrucción 28/09/2011

Todos los comandos de DEBUG se invocan usando una sola letra y son los siguientes:

ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 1/32 14-DIRECTIVAS

Práctica 4. Organización del Computador 1 12 de septiembre de Algunas consideraciones preliminares:

Registros de la CPU. IP Registro de apuntador de siguiente instrucción

TAREA 1 ARITMETICA PARA BCD Y ASCII.

Desarrollo de Programas Residentes en base a un TSR genérico

Trabajo Práctico Nro 3: Assembler

CAPÍTULO 3 PROGRAMACIÓN EN AMBIENTE DE PC

El nivel ISA (II)! Conjunto de Instrucciones

Comparaciones en lenguaje ensamblador

SISTEMAS BASADOS EN MICROPROCESADORES

Programas Residentes En Lenguaje Ensamblador

Curso basico de Emsamblador. Conceptos Basicos

Examen de Arquitectura de Computadores 2 22 de febrero del 2011

Es importante tener esto en cuanta a la hora de acceder a los datos para operar con ellos.

EJEMPLOS EN ENSAMBLADOR

Programación Avanzada en Lenguaje Ensamblador

Macro posicionado de cursor PAMCUR

APÉNDICE D. Directivas, Operadores e Instrucciones del Lenguaje Ensamblador

control de Luces por el Puerto Paralelo 378H (16 Luces 4 bloques de 4)

Organización del Computador I 1er. Parcial 17-Mayo Turno:

LENGUAJE ENSAMBLADOR PRÁCTICA 1 PRÁCTICA 1 PROGRAMA PARA EXHIBIR EN PANTALLA EL CÓDIGO DE BARRIDO DE LA TECLA OPRIMIDA

LENGUAJE ENSAMBLADOR DEL MICROPROCESADOR

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL SAN NICOLÁS INGENIERIA EN ELECTRÓNICA

Práctica 1. Introducción a la programación en ensamblador

Ingeniería en Sistemas. Sistemas Operativos. Trabajo Práctico: Repaso de Interrupciones, direccionamiento de memoria y registros del procesador.

Direccionamiento en STEP 7

Asignatura: ASSEMBLER INF-153 LABORATORIO 1

Tema 4: Lenguaje máquina - Lenguaje ensamblador

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

Operaciones para Pantalla II

Entorno de Ejecución del Procesador Intel Pentium

SISTEMAS BASADOS EN MICROPROCESADORES (2º - GRADO ING. INFORMÁTICA) EJERCICIO CLASE

INSTRUCCIONES ARITMÉTICAS.

APUNTES DE LENGUAJE ENSAMBLADOR. Lenguaje ensamblador

Fundamentos de Informática 2. Conceptos Básicos. El ordenador. Contenidos. El ordenador. El ordenador. El ordenador. Tema 2.

Práctica 3: El teclado del PC

UNIVERSIDAD NACIONAL DE INGENIERIA. Programación en Lenguaje Ensamblador

Programas de ordenador (software)

Organización n del Computador. CPU (ISA) Conjunto de Instrucciones de la Arquitectura

Construyendo Programas más Complejos

PRONTUARIO I. INFORMACIÓN GENERAL

Procesadores de 64 bits

Transcripción:

INSTRUCCIONES DE CADENA Instrucción MOVSn MOVS mueve un byte, palabra o palabra doble desde una localidad en memoria a otra. Se carga la dirección de los operandos en los registros DI (Apuntador a la cadena receptora) y SI (Apuntador a la cadena emisora ) Operación Instrucción Básica Operandos Mover un byte MOVSB ES:DI, DS:SI Mover una palabra MOVSW ES:DI, DS:SI Mover una palabra doble MOVSD ES:DI, DS:SI No se codifican los operandos, pero la instrucción decrementa o incrementa a DI y SI en 1 para un byte, en 2 para una palabra y en 4 para una palabra doble, dependiendo de la bandera de dirección, para definir el estado de la bandera de dirección (DF) se usan las instrucciones: DF=0 Recorrido de Izq a Der, incrementa a los apuntadores STD DF=1 Recorrido de Der a Izq, decrementa a los apuntadores Para realizar el movimiento repetido de un localidad de memoria a otra, se necesita de la ayuda del prefijo REP antes de la instrucción MOVSn, la instrucción queda asi: [etiqueta:] REP MOVSn El prefijo REP proporciona un ejecución repetida con base a un contador inicial que se establece en Cx, haciendo que en cada iteración disminuya Cx y repite la operación hasta que Cx= 0. Para hacer uso de esta instrucción se necesita que el programa.exe generado inicialice el registro ES (en general, pero no necesario) con la misma dirección de DS, algunas otras instrucciones de cadena también lo requieren, estas son: STOS, CMPS, SCAS, para obtener esta alineación solo basta con añadir la siguiente línea al protocolo : MOV ES,AX. La instrucción equivalente a la instrucción REP MOVSB son: COMPARA: CMP CX,0 JE SAL MOV AL,[SI] MOV [DI],AL INC DI INC SI DEC CX JMP COMPARA

SAL :... ; COPIA UNA SUBCADENA DE LA CADENA1 A LA 2 DIRECCION IZQ A DER CON MOVSW STACKSG SEGMENT PARA STACK 'STACK' DB 100H DUP(0) STACKSG ENDS DATASG SEGMENT PARA 'DATA' CAD1 DB 'PROGRAMA QUE IMPRIME UN MENSAJE$' CAD2 DB ' $' DATASG ENDS CODESG SEGMENT PARA 'CODE' PRINCI PROC FAR ASSUME SS:STACKSG, DS:DATASG, CS:CODESG SUB AX,AX MOV AX,SEG DATASG MOV DS,AX MOV ES,AX ; Linea que se añade para el uso de MOVS ; BANDERA DE DIRECCION DE IZQ A DER MOV CX,5 LEA DI,CAD2 LEA SI,CAD1 REP MOVSW LEA DX,CAD2 CALL LEE CALL FIN PRINCI ENDP MENSAJE PROC LEE PROC MOV AH,01 LEE ENDP FIN PROC MOV AH,4CH FIN ENDP CODESG ENDS END PRINCI

;Copia una subcadena de la cadena1 a la 2 usando MOVSB con dirección de ;derecha a izq STACKSG SEGMENT PARA STACK 'STACK' DB 100H DUP(0) STACKSG ENDS DATASG SEGMENT PARA 'DATA' CAD1 DB 'PROGRAMA QUE IMPRIME UN MENSAJE$' CAD2 DB ' $' DATASG ENDS CODESG SEGMENT PARA 'CODE' PRINCI PROC FAR ASSUME SS:STACKSG, DS:DATASG, CS:CODESG SUB AX,AX MOV AX,SEG DATASG MOV DS,AX MOV ES,AX ; LINEA QUE SE AÑADE AL PROTOCOLO STD ;DIRECCIÓN DE DERECHA A IZQUIERDA MOV CX,10 LEA DI,CAD2+9 LEA SI,CAD1+9 REP MOVSB LEA DX,CAD2 CALL LEE CALL FIN PRINCI ENDP MENSAJE PROC LEE PROC MOV AH,01 LEE ENDP FIN PROC MOV AH,4CH FIN ENDP CODESG ENDS END PRINCI

Repitiendo un patrón con MOVSW La razón de esta repetición se debe a que ES=DS y al traslapar los segmentos los apuntadores se alinean uno inmediatamente después del otro. * SI=PATRON * * * DI=MARQUESINA = SI = PATRON+6 * * DI=MARQUESINA+2 DI=MARQUESINA+4 * DI=MARQUESINA+6 * * DI=MARQUESINA+8 DI=MARQUESINA+10... ;programa para tasm QUE REPITE UN PATRON 7 VECES USANDO MOVSW ; Definicion de stack.model small.stack 100 ;DEFINICION DE AREAS DE TRABAJO.DATA patron DB '***' marquesina db 43 DUP(?).CODE PRINCI PROC FAR ;PROTOCOLO push ds sub ax,ax push ax MOV AX,@DATA MOV DS,AX MOV ES,AX ;INICIA PROGRAMA MOV CX,21 LEA DI,MARQUESINA LEA SI,PATRON

REP MOVSW MOV AL, '$' MOV [DI],AL LEA DX,MARQUESINA MOV AH,09 mov ah,01 int 21h PRINCI ENDP END PRINCI Instrucción LODSn LODS carga una cadena desde la memoria. Carga desde memoria un byte en el AL, una palabra en AX o una palabra doble en el EAX. La dirección de memoria esta sujeta a los registros DS:SI, dependiendo de la bandera de dirección se incrementa o decrementa. Operación Instrucción Básica Operandos Cargar un byte LODSB AL, DS:SI Cargar una palabra LODSW AX, DS:SI Cargar una palabra doble LODSD EAX, DS:SI Instrucciones equivalentes: MOV AL, [SI] INC SI / DEC SI Se pude utilizar para recorrer una cadena byte a byte, palabra por palabra o palabra doble por palabra doble, examinándola de forma sucesiva contra un valor particular. ;Carga de memoria los valores del dato tabla y los imprime en pantalla ;como caracteres STACKSG SEGMENT PARA STACK 'STACK' DB 100H DUP(0) STACKSG ENDS DATASG SEGMENT PARA 'DATA' tabla DB 1,2,3,4,5,6,7,8,9,10 conta db 10 DATASG ENDS CODESG SEGMENT PARA 'CODE' PRINCI PROC FAR ASSUME SS:STACKSG, DS:DATASG, CS:CODESG

SUB AX,AX MOV AX,SEG DATASG MOV DS,AX MOV CL,0 MOV SI, OFFSET TABLA OTRO: LODSB MOV DL,AL ADD DL,48 CALL ESCRIBE INC CL MOV DL,' ' CALL ESCRIBE CMP CL,CONTA JNE OTRO CALL FIN PRINCI ENDP ; MOV AL,[SI], INC SI ; SUMA PARA CONVERTIR DE BINARIO A ASCII= 30H MENSAJE PROC LEE PROC MOV AH,01 LEE ENDP ESCRIBE PROC MOV AH,02 ESCRIBE ENDP FIN PROC MOV AH,4CH FIN ENDP CODESG ENDS END PRINCI

; Programa ejemplo que muestra la cadena del 0 al 9 en forma inversa STACKSG SEGMENT PARA STACK 'STACK' DB 100H DUP(0) STACKSG ENDS DATASG SEGMENT PARA 'DATA' tabla DB '0,1,2,3,4,5,6,7,8,9',13,10,09,'$' TABLAB DB 20 DUP(20H) DATASG ENDS CODESG SEGMENT PARA 'CODE' PRINCI PROC FAR ASSUME SS:STACKSG, DS:DATASG, CS:CODESG SUB AX,AX MOV AX,SEG DATASG MOV DS,AX MOV DX, OFFSET TABLA MOV CX,13H MOV SI, OFFSET TABLA LEA DI, TABLAB+18 tabulador REGR: LODSB MOV [DI],AL DEC DI LOOP REGR ;almacenando caracteres, salto de línea y ;Esta es una forma para asignar el delimitador $ a la cadena ; MOV BH,00 ; MOV BL,18;12H ;MOV TABLAB[BX+1],'$' ; Direccionamiento de base :DS+bx+cte ;LEA BX, TABLAB ;MOV AL,'$' ;MOV [BX+19],AL ; [XXXX+BX+1] ;[XXXX+18] ;LO PUEDE RELIZAR COMO ;LEA SI,TABLAB+19 ;13H ;MOV AL, '$' ;MOV [SI],AL ; Direccionamiento indirecto: DS+SI CALL FIN PRINCI ENDP MOV SI,19 MOV AL, '$' MOV TABLAB[SI],AL ; Direccionamiento indexado directo: DS+SI+cte ;[si+xxxx] ;LEA SI, TABLAB ;MOV AL, '$' ;MOV [SI+19], AL ; [SI+19] LEA DX,TABLAB CALL LEE

MENSAJE PROC LEE PROC MOV AH,01 LEE ENDP ESCRIBE PROC MOV AH,02 ESCRIBE ENDP FIN PROC MOV AH,4CH FIN ENDP CODESG ENDS END PRINCI Instrucción STOSn Almacena una cadena de caracteres. Almacena los contenidos del registro AL, AX y EAX en un byte, en una palabra o palabra doble en memoria respectivamente. La dirección de memoria esta sujeta a los registros ES:DI, dependiendo de la bandera de dirección se incrementa o decrementa el registro DI en 1, 2 o 4 bytes. Operación Instrucción Básica Operandos Almacenar un byte STOSB ES:DI,AL Almacenar una palabra STOSW ES:DI,AX Almacenar una palabra doble STOSD ES:DI,EAX Para uso práctico de STOS se utiliza con un prefijo REP, esta instrucción ayuda a inicializar el área de datos a cualquier valor especificado, tal como limpiar el área de

despliegue a blancos. Puede establecer el número de bytes, palabras o palabras dobles en CX. Las instrucciones equivalentes a REP STOSB son: COMPARA: SALTA: CMP CX,0 JE SALTA MOV [DI], AL ; almacena AL en memoria INC/ DEC DI DEC CX JMP COMPARA ;--------------------------------------------------------------------- - ;ALMACENA 10 CARACTERES BLANCOS A LA CADENA MEN1 ;--------------------------------------------------------------------- -.model small.stack 100h.data MEN1 DB 'ENSAMBLADOR$'.code inicio proc far ;PROTOCOLO SUB AX,AX MOV AX,@data MOV DS,AX ; OBSERVESE QUE DS=ES MOV ES,AX ;*********** LEA DI,MEN1 MOV DX,DI MOV AX,2020H MOV CX,05 LEA DI,MEN1 REP STOSW LEA DX,MEN1 CALL FIN INICIO endp FIN proc push ax mov ah,4ch int 21h pop ax FIN endp MENSAJE PROC

end inicio Instrucción CMPSn Comparar cadenas. Compara el contenido de una localidad de memoria direccionada con DS:SI con el de otra localidad de memoria direccionada por ES:DI, dependiendo de la bandera de dirección incrementa o decrementa los registros SI, DI en 1, 2 o 4 bytes. Solo se utiliza para comparaciones alfanuméricas, compara de acuerdo con valores ASCII, no es adecuada para operaciones algebraicas. Operación Instrucción Básica Operandos Comparar un byte CMPSB DS:SI, ES:DI Comparar una palabra CMPSW DS:SI, ES:DI Comparar una palabra doble CMPSD DS:SI, ES:DI Comúnmente se utiliza con un prefijo: REPE (REPZ) o REPNE (REPNZ) Instrucción REPE (REPZ) Repite cuando sea igual, es decir, repite la operación mientras la bandera de cero (ZF) indique igual a 0. Se detiene cuando ZF 0 o cuando CX =0. Instrucción REPNE (REPNZ) Repite la operación mientras la bandera de cero (ZF) indique diferente a 0. Se detiene cuando ZF =0 o cuando CX =0. ;-------------------------------------------------------------------- -- ; Programa que COMPARA CADENAS,DE DOS EN DOS, USO DE CMPSB Y CMPSW ;--------------------------------------------------------------------- -.model small.stack 100h.data MEN1 DB 'ENSAMBLADOR$' MEN2 DB 'ENSAMBLADOR$' MEN3 DB 'Ensamblador$' MEN4 DB 'MEN1 ES IGUAL A MEN2$' MEN5 DB 'MEN1 ES IGUAL A MEN3$' MEN6 DB 'NO SON IGUALES$' SALTA DB 13,10,'$' BANDERA1 DB 0 BANDERA2 DB 0.code

inicio proc far ;PROTOCOLO SUB AX,AX MOV AX,@data MOV DS,AX ; DS=ES MOV ES,AX ;*********** MOV CX,06 LEA DI,MEN1 LEA SI,MEN2 REPE CMPSW JNE OTRA ;SALTA A COMPARAR CON LA OTRA CADENA MOV BANDERA1,01 ; BANDERA ACTIVADA OTRA: MOV CX,12 LEA DI,MEN1 LEA SI,MEN3 REPE CMPSB JNE EDO1 ; SALTA A COMPARAR ESTADO DE LAS BANDERAS MOV BANDERA2,01 EDO1: CMP BANDERA1,01 JNE MAL1 LEA DI,MEN4 MOV DX,DI LEA DX,SALTA JMP EDO2 MAL1: LEA DI,MEN6 MOV DX,DI LEA DX,SALTA EDO2: CMP BANDERA2,01 JNE MAL2 LEA DI,MEN5 MOV DX,DI JMP EXIT MAL2: LEA DX,MEN6 EXIT: CALL FIN INICIO endp FIN proc push ax mov ah,4ch int 21h pop ax FIN endp MENSAJE PROC end inicio

Instrucción SCASn Búsqueda en cadenas (Rastrear). Compara el contenido de la localidad de memoria direccionado por ES:DI con el contenido del registro AL, AX o EAX. Depende de la bandera de dirección para incrementar o decrementar DI en 1, 2 o 4 bytes. Útil para aplicaciones de edición de texto, en la que el programa tiene que buscar signos de puntuación, como puntos, comas y blancos Operación Instrucción Básica Operandos Rastrear un byte SCASB ES:DI, AL Rastrear una palabra SCASW ES:DI, AX Rastrear una palabra doble SCASD ES:DI, EAX ;--------------------------------------------------------------------- - ; Busca el caracter a en la cadena Ensamblador y la sustituye por 20h ;--------------------------------------------------------------------- -.model small.stack 100h.data MEN1 DB 'ENSAmBLADOR$'.code inicio proc far ;PROTOCOLO SUB AX,AX MOV AX,@data MOV DS,AX MOV ES,AX ;*********** MOV AL,'A' MOV CX,11 LEA DI,MEN1 REPNE SCASB JNE EXIT ; DS=ES DEC DI ; DECREMENTAR LA DIRECCION PARA HACER EL REMPLAZO MOV BYTE PTR[DI],20H ;mover un byte a la localidad apuntada por DI LEA DX,MEN1 CALL LEE EXIT:CALL FIN INICIO endp LEE proc push ax mov ah,01h int 21h pop ax ret LEE endp

FIN PROC push ax mov ah,4ch int 21h pop ax FIN ENDP MENSAJE PROC END INICIO