You are on page 1of 2

.MODEL SMALL ; Tipo .COM, este modelo de memoria ; significa que SS, DS, ES y CS son iguales al ; comenzar el programa.

Y que los datos y el stack ; estn sobre el mismo segmento pero claro, en ; distinto offset. .CODE ; Para decirle al Assembler que aqu ; comienza el cdigo. En otros modelos, como .HUGE ; hay que definir la parte de datos, con .DATA y ; la parte de Stack, con .STACK. ORG 100h ; Esta orden, para el compilador tambin ; le dice que comience el programa en el offset ; 100h. Todos los .COMs deben comenzar en el ; offset 100h. Mas adelante voy a explicar bien el ; funcionamiento de esta orden. ; Y luego completar el programa con lo que sea. EJEMPLO: ; Esta es una etiqueta, es un nombre que ; se le da a una posicin para, luego, poder ; referirnos a ella por su nombre. Esta es una ; ayuda que nos da el Assembler para no tener que ; referirnos a nmeros todo el tiempo. Ac hace ; falta para que el compilador sepa que todo ; comienza all. No es necesario que sea el nombre ; del programa, puede ser cualquier otra cosa pero ; yo acostumbro esto. ; La orden MOV (MOVE), lleva dos parmetros. Lo ; que hace es copiar el contenido del segundo ; parmetro al primero mov di,offset mensaje ; Esta orden, significa poner en DI el offset de ; la posicin que representa mensaje. (mirar mas ; abajo para ver mensaje). ; DI = Offset Mensaje Repetir: ; Pongo un 'label' o etiqueta, para ; usarlo luego. mov al,byte ptr [di] ; Pongo en AL el contenido de la posicin que ; indica [DI]. ; Recordemos que [DI] solo, significa DS:[DI], ; porque el segmento por omisin para DI es DS. ; Con 'byte ptr' indico que DS:[DI] es un ; puntero a un BYTE. AL = DS:[DI] add al,40h ; le sumo a AL 40h. ; AL+=40h (AL=AL+40h) mov byte ptr [di],al ; Pongo en DS:[DI] (lo que apunta DS:DI) el ; contenido de AL. DS:[DI]=AL inc di ; Incrementa DI en 1. ; DI++ (DI=DI+1) cmp al,'$' ; !!! Compara AL con '$', es decir ; con el valor ASCII de '$'. El resultado de la

; comparacin es guardado en los flags del micro. ; AL??'$' jne Repetir ; Salta si el resultado de la ltima ; comparacin fue que son iguales. ; Jump if Not Equal. Si no eran iguales salta a ; Repetir, el label que habamos puesto al ; principio. AL=='$' ? Go Repetir mov ah,09h ; Pongo en AH un 09h ; AH=09h mov dx,offset mensaje ; DX = Offset Mensaje int 21h ; !!! Ejecuto la Interrupcin 21h mov ax,4c00h ; AX=4C00h int 21h ; INT 21h Mensaje db 08h, 2Fh, 2Ch, 21h, 0E1h, 0E1h, 0E1h ; Aca estoy definiendo una lista de nmeros, ; cada uno es un byte. (DB = Define Byte). El ; primer byte de la lista esta bajo el nombre ; mensaje. Tambin podra haber puesto: ; Mensaje db 'El da esta lindo!' ; Se toma cada caracter como un byte. db 0CDh, 0CAh, 0E4h ; Esta lnea es la continuacin de la anterior. ; Es necesario volver a poner DB. END EJEMPLO ; assembler ; El nombre ; mismo del ; Con esta orden, le digo al que mi programa termina ac. despus de END tiene que ser el principio.

You might also like