Ensamblador
10
- Hallar el valor de AX tras la instrucción div bl:
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume cs:code
START PROC
mov ah,1
mov al,0D7h
xor bx,bx
stc
rcr bx,1
rcr bx,1
div bl
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- De nuevo un ejercicio sencillito para dejar a un lado los exámenes (por el momento)
y relajarnos un poco y ver otra forma de inicializar variables.
Este programa muestra dos líneas, una llena de '5' y otra de '@':
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
Cadena1 db 80 dup("5"),"$"
Cadena2 db 80 dup("@"),"$"
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 dx,offset Cadena1
mov ah,9
int 21h
mov dx,offset Cadena2
mov ah,9
int 21h
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Volvemos con más instrucciones de cadena y otro ejercicio de examen.
Hallar el valor de CX tras la instrucción repnz scasb:
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
texto db "Esto es un texto",0,"Y este otro",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
push ds
pop es
cld
mov ax,4C00h
lea di,texto
mov cx,14h
repnz scasb
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- ¿Que es lo que encuentra el programa?
"to" de la palabra "Esto"
"ot" de la palabra "otra"
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
cadena db "Esto es otra cadena"
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
cld
mov ax,datos
mov es,ax
mov cx,100h
mov ax,"ot"
lea di,cadena
repnz scasw
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
- Hallar el valor de AX tras la instrucción mov al,byte ptr tabla[si]:
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
db 10,'A',32,45h,10001101b,16
tabla dw 15,'Dk','27',4F5h
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
xor si,si
mov ax,[si]
sub ax,[si]
mov al,byte ptr tabla[si]
mov ax,4C00h ;
int 21h ;Terminar el programa
START ENDP
CODE ENDS
END START
Espero que estos 50 programas os sirvan para entender un poco mejor la asignatura de ETC II.
Y ya sabéis, si queréis los archivos fuente y las soluciones escribid a
victorsanchez2 en gmail.com.
|
|