Вы находитесь на странице: 1из 5

Lenguajes de Interfaz

Segmentos
1. segmento de pila
Pila segment para public 'stack'
db 64 dvp ('stack')
pila ends
2.segmento de datos
Datos segment para public 'data'
valor1 dw 100
valor2 dw 00
valor dw !
Datos "nds
.segmento codigo
#odigo segment para public 'code'
Principal proc $ar
assume cs%codigo& ss%pila& ds%datos
pus' ()
sub ()&()
pus' ()&()
Registros de uso general
()% (cumulador ((*%(+)
,)% -egistro base (,*%,+)
#)% -egistro contador (#*%#+)
D)% -egistro de datos (D*%D+)
-egistros de segmento (.olo se pueden usar para los usos mencionados a e/cepci0n de ".)
D.% -egistro del segmento de datos
".% -egistro del segmento e/tra
..% -egistro del segmento de pila
#.% -egistro del segmento de c0digo
-egistros punteros (1ambi2n pueden tener uso general)
,P% -egistro de apuntadores base
.3% -egistro 4ndice $uente
D3% -egistro 5ndice destino
-egistros especiales (.olo se pueden usar para los usos mencionados)
.P% -egistro apuntador de la pila
3P% -egistro apuntador de la siguiente instrucci0n
6% -egistro de banderas (7 bits)
*a parte ba8a del registro () se llama (* 9 la parte alta (+. *a parte ba8a del registro
,) se llama ,* 9 la parte alta ,+& 9 tambi2n ocurre lo mismo con el registro #) 9 D).
Movimientos de valores
:;< (*& ,*
"n este caso se copia el valor de ,* a (*
3gualmente se puede copiar el valor de la parte ba8a de un registro a la parte alta de otro registro
:;< #+& D*
(s4 como tambi2n operar con las partes altas
:;< (+& D+
3nclusive se puede copiar el valor de un registro a una direcci0n de memoria
:;< =1000>& (*
3gualmente apuntada la direcci0n de memoria a D3
:;< =D3>& (*
Dirrecionamientos
Dado ?ue es necesario trans$erir datos& e/isten los siguientes tipos de direccionamiento%
<alor de un registro "8emplo% :;< ()& D)
#onstante "8emplo% :;< ,)& 1(,
<alor apuntado por una constante "8emplo% :;< ()& =1000>
(puntado por un registro de segmento 9 uno de o$$set (.olo puede ser ,)& ,P& D3 o .3)
"8emplo% :;< #)& ".%=D3>
(puntado por D. 9 la suma de ,) con una constante o apuntado por .. 9 la suma de ,P con
una constante "8emplo% :;< D)& D.%=,P@1000>
(puntado por D. 9 la suma de D3 o .3 con una constante "8emplo% :;< ,)& D.%=.3@66A>
(puntado por D. 9 la suma de ,) 9 .3 o ,) 9 D3 con una constante o apuntado por .. 9 la
suma de ,P 9 .3 o ,P 9 D3 con una constante
Teoria
Bn segmento es un Crea especial en un programa ?ue inicia en un limite de un pCrra$o& estoes& en una
localidad de regularmente divisible entre 16& o 10+.
*os tres segmentos principales son los segmentos de c0digo& de datos 9 de la pila.
#ode .egment (.egmento de #0digo)
#ontiene las instrucciones de mC?uina ?ue son e8ecutadas por lo comDn la primera
instrucci0ne8ecutable estC en el inicio del segmento& 9 el sistema operativo enlaEa a esa localidad
parainiciar la e8ecuci0n del programa. el registro del #. direcciona el segmento de c0digo.
Data segment (.egmento de Datos)
#ontiene datos& constantes 9 Creas de traba8o de$inidos por el programa. "l registro D.direcciona el
segmento de datos.
.tack .egment (.egmento de pila)
"n t2rminos sencillos& la pila contiene los datos 9 direcciones ?ue usted necesita guardartemporalmente
o para uso de sus FllamadasF subrutinas. "l registro de segmento de la pila (..)direcciona el segmento
de la pila.
Ejemplo de programas
Desarrollar un programa en ensamblador ?ue me permita detectar los siguientes datos& ?ue sume la
variable 1 con la 4 9 almacene el resultado en la variable 6& ?ue sume la variable 2 9 la variable ! ?ue
sea almacenado en la variable G.
pila segment para stack 'stack'
db 64 dvp ('stack')
pila ends
Datos segment para public 'data'
valor1 dw 00
valor2 dw 200
valor dw 100
valor4 dw 20
valor! dw H
valor6 dw H
valorG dw H
#odigo segment para public 'code'
principal pro $ac
assume cs%codigo& ss%pila& ds%datos
pus' D.
sub ()&()
mov ()& seg datos
mov D.&()
mov ()& 0
mov ()& <ar1
add ()& var4
mov var6& ()
mov ()&0
mov ()& var2
add ()& var!
mov ()& 4c00'
int 21'
principal "ndp
codigo "nds
"nd principales
:odo de dirrecionamiento
pila segment para stack 'stack'
dv 64 dvp ('stack')
pila ends
Data segment para public 'data'
dddd dw 0
dddw dw 00
ddd/ dw 200
ddd9 dw 1!0
dddE dw 12!
ddd? dw 100
dddr dw 70
ddds dw G0
ddd8 dw 60
dddv dw !0
codigo segment para public 'code'
principal proc $ar
assume es%codigo& ss%pila& ds%datos
pus' D.
sub ()&()
pus' ()
mov ()&seg datos
mov D.& ()
mov ()& dddw
mov ,) o$$set ddd/
mov ()=,)>
mov ()& =,)@2>
mov si&2
mov ()&dddE =si>
mov ,)& o$$set dddw
mov si&7
mov () =,)> =si@2>
mov ()& 4c00'
int 21'
principal endp
codigo ends
end principal
pila segment para public 'stack'
dv 64 dvp ('stack')
pila ends
datos segment para public 'data'
valor1 dw 100
valor2 dw 00
valor dw !
datos ends
codigo segment para public 'code'
principal proc $ar
assume cs%codigo& ss%pila& ds%datos
pus' D.
sub ()&()
pus' ()
mov ()& seg datos
mov D.& ()
sub ()& ()
mov ()& valor1
add ()& valor2
mov valor& ()
principal endp
codigo ends
end principal

Вам также может понравиться