Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instrucciones Básicas:
mov eax, 3 ; almacena 3 en el registro EAX (3 es el operando inmediato)
mov bx, ax ; almacena el valor de AX en el registro BX
add eax, 4 ; eax = eax + 4
add al, ah ; al = al + ah
sub bx, 10 ; bx = bx - 10
sub ebx, edi ; ebx = ebx – edi
inc ecx ; ecx++
dec dl ; dl—
L1 db 0 ; byte etiquetado como L1 con valor inicial 0
L2 dw 1000 ; palabra etiquetada como L2 con valor inicial de 1000
L3 db 110101b ; byte con valor inicial binario de 110101 (53 en decimal)
L4 db 12h ; byte con valor inicial hex de 12 (18 en decimal)
L5 db 17o ; byte con valor inicial octal de 17 (15 en decimal)
L6 dd 1A92h ; plabra doble con valor inicial hex de 1A92
L7 resb 1 ; un byte sin valor inicial
L8 db "A" ; byte con valor inicial del c´odigo ASCII para A (65)
L9 db 0, 1, 2, 3 ; define 4 bytes
L10 db "w", "o", "r", ’d’, 0 ; define una cadena tipo C = "word"
L11 db ’word’, 0 ; igual que L10
L12 times 100 db 0 ; equivalente a 100 veces db 0
L13 resw 100 ; reserva lugar para 100 palabras
1mov al, [L1] ; copia el byte que está en L1 en AL
2 mov eax, L1 ; EAX = dirección del byte en L1
Prog.1:
Descripció n: Este programa ilustra es uso de las operaciones para transferencia de datos.
*MODEL TINY
.DATA
Array1 db 10 dup (0) ;Arreglo de 10 elementos inicializados en cero.
.CODE
inicio: ;Punto de entrada al programa
mov AX,10 ;Copiar el nú mero 10 dentro de AX
mov BX,5 ;Copiar le nú mero 5 dentro de BX
lea DX,Array1 ;DX contiene la direcció n efectiva de Array1[0]
xchg AX,BX ;Intercambiar los valores contenidos en AX y BX
mov ax,4C00h ;Terminar programa y salir al DOS
int 21h
END inicio
END
Prog.2:
Descripció n: Este programa ilustra el uso de las instrucciones ADD, SUB, INC y DEC.
*MODEL TINY
.DATA
Var1 DW 10 ;Declaració n de una variable de tipo entero; inicializada con 10.
.CODE
Inicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX=10
Add AX,BX ;AX=AX+BX
Mov CX,8 ;CX=8
Add CX,Var1 ;CX=CX+Var1
Inc AX ;AX=AX+1
Dec BX ;BX=BX-1
Inc Var1 ;Var1=Var1+1
Dec Var1 ;Var1=Var1-1
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END
Prog.3:
Prog.4:
Prog.5:
Prog.6:
Prog.7:
Descripció n: Este programa ilustra el uso de las instrucciones
AND, OR, XOR y NOT.
*.MODEL TINY
.DATA
Mascara1 db 11111110b
Mascara2 db 00000001b
Dato1 db 11111111b
Dato2 db 00000000b
.CADE
INICIO:
Mov cx,0000h ;CX=0;
Mov al,dato1 ;al=dato1
And al,mascara1 ;al=al and mascara1
Mov ah,dato2 ;ah=dato2
Or ah,mascara2 ;ah=ah or mascara2
Xor bx,bx ;bx=0
Not cx ;cx=not cx
Mov ax,4c00h
Int 21h
END INICIO
END
Prog.8:
Algunos ejemplos:
SHL AX,1 ; Desplaza el contenido de AX una posició n a la izquierda
MOV CX,3 ; Nú mero de veces
SHR AX,CL ; Desplaza AX 3 veces hacia la derecha
SHL BX,4 ; Desplaza BX 4 veces hacia la izquierda
Prog.9:
Descripció n: Este programa demuestra el uso de las instrucciones para el manejo de la
pila, implementando la instrucció n XCHG con Push y Pop
*.
MODEL tiny
.CODE
Inicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX=10
Push AX ;Pila=5
Mov AX,BX ;AX=10
Pop BX ;BX=5
Mov AX,4C00h ;Terminar programa y salir al DOS
Int 21h ;
END Inicio
END
Prog.11:
Descripció n: Imprime una cadena de caracteres en la pantalla por medio de la funció n 09h
de la interrupció n 21h del DOS.
*.
MODEL tiny
.DATA
Mensaje db 'Interrupciones 21h del DOS',13,10,'$'
.CODE
Inicio:
Lea DX,Mensaje
Mov Ah,09h
Int 21h
Mov ax,4C00h
Int 21h
END Inicio
END
Prog.13:
Prog.14:
Archivo: first.asm
Este programa pide dos enteros como entrada e imprime su suma
Para crear el ejecutable usando djgpp:
nasm -f coff first.asm
gcc -o first first.o driver.c asm_io.o
%include "asm_io.inc"
; Los datos iniciados se colocan en el segmento .data
segment .data
; Estas etiquetas se refieren a las cadenas usadas para la salida
prompt1 db "Digite un n´umero: ", 0 ; no olvide el fin de cadena
prompt2 db "Digite otro n´umero: ", 0
20 outmsg1 db "Ud. ha digitado ", 0
29 ; Estas etiquetas señalan a palabras dobles usadas para almacenar los datos
30 ; de entrada
31 ;
32 input1 resd 1
33 input2 resd 1
34
35 ;
36 ; El código se coloca en el segmento .text
37 ;
38 segment .text
39 global _asm_main
40 _asm_main:
42 pusha
43
44 mov eax, prompt1 ; print out prompt
45 call print_string
46
47 call read_int ; lee un entero
48 mov [input1], eax ; lo almacena en input1
49
50 mov eax, prompt2 ; print out prompt
51 call print_string
52
53 call read_int ; lee un entero
54 mov [input2], eax ; lo almacena en input2
55
56 mov eax, [input1] ; eax = dword en input1
57 add eax, [input2] ; eax += dword en input2
58 mov ebx, eax ; ebx = eax
59
60 dump_regs 1 ; imprime los valores de los registros
61 dump_mem 2, outmsg1, 1 ; imprimer la memoria
62 ;ahora, se imprimen los resultados en una serie de pasos
64 ;
82 ret first.asm