Las instrucciones o nemónicos con las que cuenta el lenguaje ensamblador se encuentran clasificadas de acuerdo con su función en instrucciones de transferencia, aritméticas, saltos, lógicas y misceláneas. • Instrucciones de transferencia: permiten el movimiento, carga y descarga de los registros. • Instrucciones aritméticas: encargadas de la aplicación de las pocas operaciones aritméticas que contiene el lenguaje. • Instrucciones lógicas: encargadas de la aplicación de las operaciones lógicas, generalmente utilizan un solo operador. • Instrucciones de salto: se caracterizan porque el operador contiene una dirección de memoria en la cual debe continuar la ejecución en el caso que la instrucción así lo determine. • Instrucciones misceláneas: este pequeño conjunto de instrucciones consta de la instrucción para finalización del programa, la instrucción para el llamado a subrutinas de interrupción y la instrucción para leer una dirección efectiva. MOV Transfiere datos entre celdas de memoria y registros. Sintaxis: MOV Destino,Fuente Ejemplo: MOV AX,0006h MOV DX,AX MOVS (MOVSB) (MOVSW) Mueve cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI. Sintaxis: MOVS Este comando no necesita parametros ya que toma como dirección fuente el contenido del registro SI y como destino el contenido de DI. Ejemplo: MOV SI, OFFSET VARIABLE1 MOV DI, OFFSET VARIABLE2 MOVS Primero se inicializan los valores de SI y DI con las direcciones de las variables VARIABLE1 y VARIABLE2 respectivamente, despues al ejecutar MOVS se copia el contenido de VARIABLE1 a VARIABLE2. Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el segundo una palabra. LODS (LODSB) (LODSW) Carga cadenas de un byte o palabra al acumulador. Sintaxis: LODS Toma la cadena que se encuentre en la dirección especificada por SI, la carga al registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la transferencia es de bytes o 2 si la transferencia es de palabras. Ejemplo: MOV SI, OFFSET VARABLE1 LODS La primer linea carga la dirección de VARIABLE1 en SI y la segunda linea lleva el contenido de esa localidad al registro AL. Los comandos LODSB y LODSW se utilizan de la misma forma, el primero carga un byte y el segundo una palabra (utiliza el registro completo AX). NEG Genera el complemento a 2 Sintaxis: NEG destino Genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Ejemplo, si AX guarda el valor de –2 (FFFE), entonces: NEG AX Dejaría como resultado en AX el valor 0002. ADD Adición de los operandos. Sintaxis: ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino. Ejemplo: ADD R1,R2 SUB Substracción Sintaxis: SUB destino, fuente Resta el operando fuente del destino. SUB R1,R2 INC Sintaxis: INC reg INC mem Incrementa (suma 1 a) el contenido de un registro o de una posición de memoria. Ejemplos: INC AX ; AX=AX+1 INC DL ;DL=DL+1 INC WORD PTR ES:[DI+4] ; Increm. palabra contenida ; en ES:DI+4 DEC Sintaxis: DEC reg DEC mem Decrementa (resta 1 a) el contenido de un registro o de una posición de memoria. Ejemplos: DEC AX ; AX=AX-1 DEC DL ; DL=DL-1 DEC BYTE PTR ES:[DI+4] ; Decrem. byte contenido en ; ES:DI+4 NOT Sintaxis: NOT reg NOT mem Realiza un NOT lógico, bit a bit, con el operando, es decir, que invierte el valor de cada uno de los bits del operando. Ejemplos: NOT DI NOT BYTE PTR [BX] AND Sintaxis: AND reg,reg AND reg,mem AND reg,inmediato AND mem,reg AND mem,inmediato Realiza un AND lógico, bit a bit, entre el operando destino y el operando fuente, almacenando el resultado en el operando destino. Como la filosofía de esta operación es "valor 1 si los dos bits son 1", se puede utilizar como máscara, filtrando sólo aquellos bits (1) del primer operando que coincidan con los bits (1) del segundo operando. Ejemplos: AND AX,BX ; AX=AX AND BX OR Sintaxis: OR reg,reg OR reg,mem OR reg,inmediato Realiza un OR lógico, bit a bit, entre el operando destino y el operando fuente, almacenando el resultado en el operando destino. La filosofía de esta operación es "valor 0 si los dos bits son 0". Su utilidad es poner algunos bits a 1, inalterando el resto. Ejemplos: OR AL,BL ; AL=AL OR BL OR DI,[BX] ; DI=DI OR [BX] OR CL,34 ; CL=CL OR 34
El formato del set de instrucciones se caracteriza por un nemónico que determina
el código de operación y una serie de operandos sobre los que se ejecutan dichas operaciones. Ejemplo: El siguiente ejemplo muestra 1 línea bicolor en el centro de la pantalla en modo de video, que puede ser movida por los cursores del teclado. Dosseg .Model small .Data Col1 DW 0 Col2 DW 1 MACROS ******************************** Entrar Macro mov ah, 7 int 21H endm Modo MACRO VALOR PUSH AX XOR AH, AH MOV AL, VALOR INT 10H POP AX ENDM Paleta MACRO VALOR PUSH AX PUSH BX Mov AH, 0BH MOV BL, VALOR MOV BH, 01H Int 10h POP BX POP AX ENDM Linea MACRO Columna, Color LOCAL Volver PUSH AX PUSH BX PUSH CX MOV AX, 0B800H MOV ES, AX MOV AH, Color MOV DI, Columna MOV CX, 100 ; OJO VER CUAL ES EL NUMERO DE FILAS Volver: MOV ES: [DI], AH MOV ES: [DI+2000H], AH ADD DI, 80 LOOP Volver POP CX POP BX POP AX ENDM Linea1 MACRO Columna, Color LOCAL Volver PUSH AX PUSH BX PUSH CX MOV AX, 0B800H MOV ES, AX MOV AL, Color MOV DI, Columna MOV CX, 100 ; OJO VER CUAL ES EL NUMERO DE FILAS Volver: MOV ES: [DI], AL MOV ES: [DI+2000H], AL ADD DI, 80 LOOP Volver POP CX POP BX POP AX ENDM BorrarPantalla MACRO LOCAL Borrar PUSH AX PUSH BX PUSH CX MOV AX, 0B800H MOV ES, AX MOV DI, 00H XOR AX, AX MOV CX, 2000H REP STOSW POP CX POP BX POP AX ENDM .Code .386 Main proc near MOV AX, @Data MOV DS, AX Modo 4 ; Modo Gráfico Paleta 2 ; Paleta Caliente MOV Col1, 39 ; Ubicamos la primera línea una posición antes del centro MOV Col2, 40 ; Ubicamos la primera línea una posición en el mismo centro Linea Col1, 00000010B ; Pintamos las dos líneas, la primera con AH Linea1 Col2, 01000000B ;y la otra con AL, para que den la sensación de que son una sola vuelvo: Entrar cmp al, 1BH ;verifico que si la tecla que presiona el usuario es ESC je Salto ;si es así termina la aplicación mov ah, 06H ;este servicio lo utilizamos para leer una tecla mov dl, 0FFH Int 21H ; leemos la tecla presionada JE vuelvo cmp AL, 4BH JE izquierda ;Si presiona la flecha izquierda lo mandamos a cmp AL, 4DH ;mover las lineas hacia la izq JE derecha ;Si presiona la flecha derecha lo jmp vuelvo ; mandamos a mover las lineas hacia la der Int 21H STC Salto: jmp Salir -----------***-----------*** izquierda: BorrarPantalla ;aquí borramos la ubicación de las dos lineas anteriores cmp Col1, 0 ;comparamos en caso de que la primera linea llegue al principio de la pantalla je asignar1 cmp Col2, 0 ;comparamos en caso de que la primera linea llegue al principio de la pantalla je asignar2 jmp colorear1 ;sino cumple con las anteriores asecciones pinta normal decreciendo en 1 asignar1: mov Col1, 79 ;si la primera linea llego al inicio de la dec Col2 ;y la segunda toma la posición que tenia la primera Linea Col1, 00000010B pantalla pues debe pasar al final de la misma Linea1 Col2, 01000000B ; pintamos con las nuevas posiciones jmp vuelvo ;regreso a espera aque se presione una tecla asignar2: mov Col2, 79 ;si la segunda linea llego al inicio de la pantalla pues ;debe pasar al final de la misma dec Col1 ;la primera continua moviendose a la izquierda Linea Col1, 00000010B Linea1 Col2, 01000000B ;pintamos con las nuevas posiciones jmp vuelvo ;regreso a espera aque se presione una tecla colorear1: dec Col1 ;este es el caso en el que las lineas solo se dec Col2 ;van moviendo hacia la izquierda Linea Col1, 00000010B Linea1 Col2, 01000000B jmp vuelvo -----------***-----------*** -----------***-----------*** derecha: BorrarPantalla ;aquí borramos la ubicación de las dos lineas anteriores cmp Col1, 79 ;comparamos en caso de que la primera linea llegue al final de la pantalla je asignar3 cmp Col2, 79 ;comparamos en caso de que la primera linea llegue al final de la pantalla je asignar4 jmp colorear2 ;sino cumple con las anteriores asecciones pinta normal incrementando en 1 asignar3: mov Col1,0 ;si la primera linea llego al final de la pantalla pues debe pasar al inicio de la misma inc Col2 ;y la segunda toma la posición que tenia la primera Linea Col1, 00000010B Linea1 Col2, 01000000B ; pintamos con las nuevas posiciones jmp vuelvo ;regreso a espera aque se presione una tecla asignar4: mov Col2, 0 ;si la segunda linea llego al final de la pantalla pues debe pasar al inicio de la misma inc Col1 ;la primera continua moviendose a la derecha Linea Col1, 00000010B Linea1 Col2, 01000000B ;pintamos con las nuevas posiciones jmp vuelvo ;regreso a espera aque se presione una tecla colorear2: inc Col1 ;este es el caso en el que las lineas solo se van moviendo hacia la derecha inc Col2 Linea Col1, 00000010B Linea1 Col2, 01000000B jmp vuelvo ;regreso a espera aque se presione una tecla -----------***-----------*** Salir: MOV AX, 4C00H Int 21H Main endp End Bibliografía https://www.ecured.cu/Lenguaje_ensamblador#Ejemplos_de_lenguaje_ensamblador http://virtual.umng.edu.co/distancia/ecosistema/odin/odin_desktop.php?path=Li4vb3Zhc y9pbmdlbmllcmlhX2luZm9ybWF0aWNhL2FycXVpdGVjdHVyYV9kZV9jb21wdXRhZG9y ZXMvdW5pZGFkXzQv#slide_3