4
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

1er Parcial de Assembler

Embed Size (px)

DESCRIPTION

examen de assemblre

Citation preview

Page 1: 1er Parcial de Assembler

NOMBRE: mmmmmmmmmmmFECHA: 08/05/14

POTENCIAS DE DOS USANDO SOLO SUMAS HASTA LA POTENCIA 16La lógica que se sigue es que debemos obtener:1 2 4 8 16 32 64 .......................... 32768 65536y si tenemos un dato a que iniciamos en 1 entonces

1+1 2+2 4+4 8+8 16+16 32+32 ......................... 32768+32768vemos que la potencia deseamos obtener es la el doble del anterior en otras palabras sumamos dos veces la anterior potencia

SOLUCIONinclude libgen.asm.model small.stack 256.dataa dw 1cad db 3 dup("$")resultado db 55,0,54 dup("$")nro dw 0base 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 cadlea si,[cad+2]call cad_realentermov cx,nrofor:

mov bx,aadd bx,bxmov a,bx

loop formov ax,alea si,resultadocall real_cadmostrar_cad resultado

final;Procedimiento para llevar una cadena a un número realcad_real Proc Nearsal_reg MOV AX,0000h MOV nro,AX

Page 2: 1er Parcial de Assembler

XOR BX,BX while: MOV BL,byte PTR [SI] MOV AX,nro

CMP BL,13JE fin

SUB BL,30h MUL base ADD AX,BX MOV nro,AX INC SI JMP whilefin: res_reg RETcad_real EndP

;procedimiento para llevar un numero real a una cadenareal_cad Proc Nearsal_regXOR CX,CXwhile1: CMP AX,0 JE fin1 XOR DX,DX DIV base PUSH DX INC CXJMP 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 RETreal_cad EndPend

Nota: Los macros INICIO, FINAL, LEER_CAD, MOSTRAR_CAD, SAL_REG y RES_REG están en otro archivo denominado libgen.asm

Page 3: 1er Parcial de Assembler

librería que usaremos

INICIO MACROMOV AX,@DATAMOV DS,AXENDM

FINAL MACROMOV AH,4CHINT 21HENDM

MOSTRAR_CAD MACRO CAD PUSH AX PUSH DX MOV AH,09H

LEA DX,CAD INT 21H POP DX POP AXENDM

LEER_CAD MACRO CADENA PUSH DX PUSH AX MOV AH,0AH

LEA DX,CADENA INT 21H POP AX POP DXENDM

SAL_REG MACRO PUSH AX PUSH BX

PUSH CXPUSH DXPUSH SIPUSH DI

ENDM

RES_REG MACRO POP DI POP SI POP DX POP CX

POP BX

POP AXENDM

ENTER MACRO PUSH AX PUSH DX MOV DL,13

MOV AH,02INT 21HMOV DL,10INT 21HPOP DXPOP AX

ENDM