Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SOLUCION
LITERAL A
.MODEL SMALL
.DATA
.CODE
.STARTUP
MOV COCI,AX;guardamos
MOV AX,0
CWD
IDIV CX
MOV RESF,AX
.EXIT
END
LITERAL B
1
.MODEL SMALL
.DATA
COSASCII DW ?
RES DW ?
.CODE
.STARTUP
;VALORES DE PRUEBAS
MOV DIVIS,1H
MOV DIVID,10H
MOV BL,DIVIS
MOV AX,DIVID
AAD;AJUSTAMOS LA DIVISION
DIV BL
MOV AH,0
.EXIT
END
2
SOLUCION
ORG 100H
;PUBLIC TABLA1
;PUBLIC TABLA2
;PUBLIC COCIENTE
;PUBLIC RES
COCIENTE DD ?
RES DW ?
DATOS_S ENDS
;PUBLIC OPERAR
3
PUSH DS
MOV AX,DATOS_S
MOV DS,AX
MOV ES,AX
MOV BX,0
LODSW
SBB AX,TABLA2[BX]
STOSW
MOV DX,TABLA2[BX]
MOV CX,0
RESTA:
SBB DX,5
CMP DX,5
INC CX
JA RESTA
MOV COCIENTE,CX
MOV RES,DX
4
SOLUCION
;PUBLIC NUMS
;PUBLIC OFFS
DATOS ENDS
;PUBLIC LTECLA
MOV AX,0
MOV AH,01H
CMP AL,32H
JE GUARDAR1
CMP AL,34H
5
JE GUARDAR2
DESPL2:
MOV BX,AX
MOV AX,0H
MOV AH,02H
MOV DL,BL
INT 21H
RET
GUARDAR1:
MOV NUM,AL
RET
GUARDAR2:
MOV NUM+1,AL
RET
LTECLA ENDP
CODIGO ENDS
SOLUCION
6
;PUBLIC MIN
;PUBLIC SUSTR
;PUBLIC RESTAX8
DATOS ENDS
;PUBLIC RESTA
MOV AX,0H
MOV DS,AX
MOV ES,AX
MOV CX,4H
CLD;AUTO INCREMENTO
SBB AX,SUSTR[BX]
ADD BX,2H
LOOP REST
XOR BX,BX;REESTABLECEMOS A BX
7
MOV CX,3
DESPLAZAMIENTO:
PUSH CX
MOV CX,3H
ROTACION
RCL RESTAX8[SI],1
ADD SI,2H
LOOP ROTACION
POP CX
ADD BX,2H
LOOP DESPLZAMIENTO
RET
RESTA ENDP
CODIGO ENDS
SOLUCION
LITERAL A
CLC
8
N2 DB (4H);NO PORQ EN AMBOS IRIA EL SIGNO ?
PASCI DW ?
COCI DB ?
RES DB ?
MOV AL,N1
MUL N2
MOV PASCI,AX
DIV DL
MOV COCI,AL
MOV RES,AH
LITERAL B
COCI DW ?
RESF DW ?
;INICIALIZACION DE REGISTROS
MOV AX,13
MOV SI,0
;REALIZA DIVISION
;RESIDUO FRACCIONARIO
MOV AL,0
9
DIV BYTE PTR[SI]
LITERAL C
NUMEROS DB ?
ENE DB ?
CLD
MOV SI,0H
MOV DL,0H
MOV DI,0H
COMPARA:
MOV AX,0
MOV AL,NUMEROS[SI+1000H]
CMP DL,AL
JAE COPIADO
COPIADO:
MOV DL,NUMEROS[SI+1000H]
INC SI
LOOP COMPARA
RET
NMAX ENDP
10
SOLUCION
DATOSE DB ?
ENE DB ?
DATSEG ENDS
ASSUME CS:CODSEG,DS:DATOSEG
;PUBLIC PROME
MOV SI,0
LEER:
INC SI
11
LOOP LEER
CMP ENE,8H
JE PROMEDIO
JB NOT_FUND
NOT_FUND:
RET
PROMEDIO:
MOV DL,0H
CLC
MOV CX,4H
SUMA:
INC BX
LOOP SUMA
MOV DATOSE[SI],DL
INC SI
EXTER:
DEC SI
SHR DATOSE[SI],1
PUSH CX
PUSH SI
MOV CX,3
INTER:
RCR DATOSE[SI-1],1
DEC SI
LOOP INTER
POP SI
12
POP CX
LOOP EXTER
PROME ENDP
CODSEG ENDS
END
PROBLEMAS VARIOS
1- Escriba un procedimiento ASCIBIN que suma dos nmeros de 10 dgitos ASCII cada uno.
La tabla NUM1 contiene uno de los nmeros. La tabla NUM2 el otro nmero. El
resultado de la suma debe quedar en binario en la tabla SUMAB, para cada byte que se
suma. Despus de este resultado, si el bit de acarreo es cero se retorna si no lo es se
pone un uno en la localidad CARRY y luego se comprueba sii el bit menos significante de
la suma es 1. Si es, se pone 1 en la localidad IMPAR y se retorna si no lo es, se retorna.
(AYUDA: no sumar 3030, usar AAA y AAD).
SOLUCION
;PUBLIC NUM1
;PUBLIC NUM2
;PUBLIC SUMAB
;PUBLIC CARRY
;PUBLIC IMPAR
NUM1 DW ?
NUM2 DW ?
SUMAB DW ?
CARRY DW ?
IMPAR DW ?
DATOS ENDS
;PUBLIC ASCIBIN
13
MOV SI,0H
MOV AX,NUM1[SI]
MOV BX,NUM2[SI]
AAA;AJUSTAMOS A ASCII
ADC AX,BX
MOV SUMAB[SI],AX
JAE RETORNO
JB COLOCAR
RETORNO:
RET
COLOCAR:
MOV CARRY[SI],1H
JE COLOCAR1
RET
COLOCAR1:
MOV IMPAR[SI],1H
RET
ASCIBIN ENDP
CODIGO ENDS
14
SOLUCION
;PUBLIC A
;PUBLIC B
;PUBLIC C
;PUBLIC RESTA
A DW 3 DUP (?)
B DW 3 DUP (?)
C DW 3 DUP (?)
RESTA DW ?
DATOS ENDS
;PUBLIC CDIV
CLC
MOV SI,0H
MOV CX,3H
COMPARAR:
MOV AX,A[SI]
MOV BX,B[SI]
CMP AX,BX
JE SALIR
INC SI
LOOP COMPARAR
SALIR:
STC
RET
15
MOV SI,0H
MOV CX,0H
RESTAR:
MOV AX,A[SI]
MOV BX,B[SI]
SBB AX,BX
MOV RESTA[SI],AX
INC SI
JA RESTAR
MOV C,CX
3- Para un microprocesador 8086 escriba las instrucciones necesarias para multiplicar una
doble palabra almacenada en memoria en el segmento DS, desde la posicin VALOR, por
2(32k+1), usando instrucciones de rotacin y desplazamiento. El resultado debe quedar
almacenado en el mismo lugar donde estaba la doble palabra original con 3 bytes
adicionales a continuacin se pueden usar registros intermedios.
SOLUCION
;VALOR*2(32K+1)=VALOR*64K+VALOR*2
VALOR DD 12345678H
copia DD ?
mov si,offset VALOR
mov di,offset copia
mov ax,[si]
mov bx,[si+2]
mov [di],ax
mov [di+2],bx
mov ax,0h
mov bx,0h
mov ax,2
CWD
mov cx,15
ELEVAR:
shl bx,1;bx es el menos significante
rcl ax,1;palabra mas signicante
loop ELEVAR
add bx,2
VALORPOR2:
clc
adc VALOR,word ptr[di]
sbb ax,1
cmp ax,0
16
ja VALORPOR2
sbb bx,1
cmp bx,0
ja VALORPOR2
17
5- Ordenar una lista de n nmeros dentro de una tabla LISTANS de bytes en orden
ascendiente el valor de n se encuentra en la palabra total
SOLUCION
.model small
.data
total dw 7
listans db 7 dup(?)
temp db ?
.code
.startup
;lellendo numeros
mov si,offset listans
mov cx,total
mov ah,1
llenar:
int 21h
mov [si],al
inc si
loop llenar
;ordenando datos
mov si,offset listans
mov cx,total
loop1:
push cx
push si
mov dx,total
sub dx,1
mov cx,dx
loop2:
mov al,[si]
cmp al,[si+1]
jb seguir
mov temp,al
mov al,[si+1]
mov [si],al
mov al,temp
mov [si+1],al
seguir:
inc si
loop loop2
pop si
pop cx
loop loop1
;mostrando numeros
18
mov si,offset listans
mov cx,total
mov ah,2
mostrar:
mov dl,[si]
int 21h
inc si
loop mostrar
.exit
End
.MODEL SMALL
.DATA
MN DB 'ESTE PROGRAMA MULTIPLICA NUMEROS CUYO RESULTADO MAXIMO ES
99',0AH,0DH,'$'
MN1 DB 'INGRESE EL PRIMER NUMERO:$'
MN2 DB 0AH,0DH,'INGRESE EL SEGUNDO NUMERO:','$'
MN3 DB 0AH,0DH,'EL RESULTADO DE LA MULTIPLICACION ES:','$'
.CODE
.STARTUP
LEA DX,MN
MOV AH,09H
INT 21H
LEA DX,MN1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H
MOV BL,AL;GUARDO EL PRIMER NUMERO EN 1000H
LEA DX,MN2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H
MOV AH,0H
MUL BL; Multiplicamos 1000H * 1001H y el contenido se almacena
en AX por ser el . ;resultado de la multiplicacin de un byte por
otro byte.
PUSH AX;GUARDO EN LA POSICION SIGUIENTE DE DONDE FUERON
TOMADOS LOS DATOS EL RESULTADO
LEA DX,MN3
MOV AH,09H
INT 21H
MOV DX,0H
POP DX
CMP DL,9H
19
JG DECENAS
JMP MUESTRA
MOV CX,2
DECENAS:
SUB DL,0AH
ADD DH,1
CMP DL,0AH
JG DECENAS
MOV BL,DL
MOV DL,DH
ADD DL,30H
MOV AH,02H
INT 21H
ADD BL,30H
MOV DL,BL
MUESTRA:
MOV AH,02H
INT 21H
.EXIT
END
MOV BUFFER2,30
MOV CX,2
RECIBE:
20
LEA DX,BUFFER2
MOV AH,0AH
INT 21H
LOOP RECIBE
MOVDL,11;DL CONTIENE LA FILA
MOVDH,10;DH CONTIENE COLUNMA
MOVAH,02H;INSTRUCCION PARA POSICIONAR CURSOR
INT10H;INTERRUCION QUE USA FUNCIONES DE VIDEO
LEADX,MN1
MOVAH,09H
INT21H
MOV BUFFER,30;LE DECIMOS AL BUFFER EL # DE CARACTERES QUE
LEERA
LEA DX,BUFFER
MOV AH,0AH;CAPTURA DE CADENA CON ECO
INT 21H
MOV CX,30
MOV SI,OFFSET BUFFER
ADD SI,2
MOV AL,[SI]
MOV DI,OFFSET BUFFER2
CLD
COMPARA:
REPE SCASB
JNZ SIGUIENTE
JMP OTRO
SIGUIENTE:
INC SI
CMP SI,30
JA COMPARA
CMP CX,0
JNZ VALIDO
JMP INVALIDO
OTRO:
ADD DI,29
CMP DI,30
JB COMPARA
JMP INVALIDO
VALIDO:
LEA DX,MN2
MOV AH,09H
INT 21H
INVALIDO:
LEA DX,MN3
MOV AH,09H
INT 21H
.EXIT
END
21
PARA VERIFICAR SI LA CADENA EN MEMORIA ES IGUAL A LA CADENA
INGRESADA, MOSTRANDONOS EL MENSAJE 'SON IGUALES', SI LA
CADENA INGRESADA ES IGUAL A LA CADENA ALMACENADA EN MEMORIA Y
EL MENSAJE 'SON =!', SI LA CADENA INGRESADA DESDE TECLADO ES
DIFERENTE A LA CEDANA ALMACENADA EN MEMORIA.
SOLUCION
.model tiny
.code
jmp inicio
msj db 'muerto$'
msj1 db 'muerto$'
msj2 db 'son =$'
msj3 db 'son =!$'
buffer db 6 dup(?)
inicio:
lea si,buffer
mov cx,6
recibir:
mov ah,07h
int 21h
mov [si],al
inc si
loop recibir
fin2:
mov ah,09h
mov dx, offset msj3
int 21h
jmp salir
fin:
mov ah,09h
mov dx, offset msj2
int 21h
jmp salir
salir:
end
22