Ensamblador
7
Las soluciones y archivos fuente de todos los ejercicios podéis obtenerlos escribiéndome
un e-mail para pedírmelos.
- Hallar el valor de AX tras la instrucción "mov ax,[bp+1]":
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,pila
mov ss,ax
mov cx,37FFh
xor bx,bx
push cx
push bx
mov bp,sp
mov ax,[bp+1]
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Hallar el valor de AX tras la instrucción "mov ax,[bp+1]":
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,pila
mov ss,ax
mov ax,3759h
xor bx,bx
push ax
push bx
mov bp,sp
mov ax,[bp+1]
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Hallar el valor de AX tras la instrucción "stosb":
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento extra
;------------------------------------------------------------------------------
EXTRA SEGMENT
RESULT DW 0,0
EXTRA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume CS:code,ES:extra,SS:pila
;------------------------------------------------------------------------------
; Procedimiento inicial
;------------------------------------------------------------------------------
START PROC
mov si,40h
cld
mov byte ptr ds:[si],0Fh
xor cx,cx
mov al,0F0h
rep scasb
std
mov di,si
mov bx,ds
mov es,bx
stosb
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Hallar el valor de AX tras la instrucción "rep lodsw":
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
texto db "Cadena_de_texto"
DATOS ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ds:datos,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,datos
mov ds,ax
mov ax,pila
mov ss,ax
mov si,offset texto
cld
mov cx,5
rep lodsw
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Otro ejercicio como el anterior:
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
texto db "Esto_es_una_cadena_de_texto",0
DATOS ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ds:datos,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,datos
mov ds,ax
mov ax,pila
mov ss,ax
mov si,offset texto
add si,19h
std
mov cx,5
rep lodsw
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Y otro más. Las instrucciones de cadena son bastante potentes y
como podreis ver es mejor saber manejarlas con soltura:
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
texto db "Cadena_de_texto"
DATOS ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ds:datos,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,datos
mov ds,ax
mov ax,pila
mov ss,ax
mov si,offset texto
add si,0Dh
std
mov cx,5
rep lodsw
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Hallar el valor de AX tras salir del bucle:
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h DUP(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code,ss:pila
START PROC
;Inicializamos los registros de segmento
mov ax,pila
mov ss,ax
mov bx,10h
xor ax,ax
mov cx,0FFFFh
L1:
add ax,bx
loop L1
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
|
|