Examen Da Assembler
Enviado por qci271284 • 15 de Mayo de 2015 • 513 Palabras (3 Páginas) • 206 Visitas
NOMBRE: mmmmmmmmmmm
FECHA: 08/05/14
POTENCIAS DE DOS USANDO SOLO SUMAS HASTA LA POTENCIA 16
La lógica que se sigue es que debemos obtener:
1 2 4 8 16 32 64 .......................... 32768 65536
y si tenemos un dato a que iniciamos en 1 entonces
1+1 2+2 4+4 8+8 16+16 32+32 ........................ . 32768+32768
vemos que la potencia deseamos obtener es la el doble del anterior en otras palabras sumamos dos veces la anterior potencia
SOLUCION
include libgen.asm
.model small
.stack 256
.data
a dw 1
cad db 3 dup("$")
resultado db 55,0,54 dup("$")
nro dw 0
base dw 10
; cad introducida por teclado es una cadena y lo debemos convertir en número natural
;a es dw 32 pero internamente se verá como 3h2h y debemos llevarlo a numero 30h unir 32h=30h32h
;resultado-->3h2h-->3h+30h=33h, 2h+30h=32h-->30h32h
.code
inicio
leer_cad cad
lea si,[cad+2]
call cad_real
enter
mov cx,nro
for:
mov bx,a
add bx,bx
mov a,bx
loop for
mov ax,a
lea si,resultado
call real_cad
mostrar_cad resultado
final
;Procedimiento para llevar una cadena a un número real
cad_real Proc Near
sal_reg
MOV AX,0000h
MOV nro,AX
XOR BX,BX
while:
MOV BL,byte PTR [SI]
MOV AX,nro
CMP BL,13
JE fin
SUB BL,30h
MUL base
ADD AX,BX
MOV nro,AX
INC SI
JMP while
fin:
res_reg
RET
cad_real EndP
;procedimiento para llevar un numero real a una cadena
real_cad Proc Near
sal_reg
XOR CX,CX
while1:
CMP AX,0
JE fin1
XOR DX,DX
DIV base
PUSH DX
INC CX
JMP while1
fin1:
while3:
CMP CX,0
JE fin3
POP BX
ADD BX,30h
MOV [SI],BX
DEC CX
INC SI
JMP while3
fin3:
res_reg
RET
real_cad EndP
end
Nota: Los macros INICIO, FINAL, LEER_CAD, MOSTRAR_CAD, SAL_REG y RES_REG están en otro archivo denominado libgen.asm
librería que usaremos
INICIO MACRO
MOV AX,@DATA
MOV DS,AX
ENDM
FINAL MACRO
MOV AH,4CH
INT 21H
ENDM
MOSTRAR_CAD MACRO CAD
PUSH AX
...