operaciones aritmeticas en assembler

katy
19 de Julio del 2004
Por favor es urgente.
Necesito realizar operaciones matematicas con numeros decimales en assembler para pic pues estoy resalizando un brazo mecanico.
Quien me pueda ayudar muchas gracias

cesardlpv
19 de Julio del 2004
exactamente cual necesitas de la operaciones matematicas, para mandartelas, yo hago controles industriales y las uso mucho, pero son demasiadas, dime cual en particular
[email protected]

cesardlpv
19 de Julio del 2004
me olvidaba , que chip usas y muchas algoritmos matematicos las encuentras en las AN de microchip

felipe
19 de Julio del 2004
te envio un programa que hice, el cual realiza operaciones con numeros en forma decimal, espero que te sea de utilidad

MODEL SMALL

.DATA

ERROR DB '...SIGNO DESCONOCIDO, INTENTA DE NUEVO','$'
OPERA1 DB 'INTRODUZCA EL PRIMER OPERADOR: ','$'
OPERA2 DB 'INTRODUZCA EL SEGUNDO OPERADOR: ','$'
OPERAC DB 'OPERACION A REALIZAR: ','$'
ERRDIG DB '...OPERADOR EXEDE DE 4 DIGITOS,INTENTA DE NUEVO','$'
RESULT DB 'RESULTADO: ','$'

MENU DB 10,13,09,'+',10,13,09,'-',10,13,09,'*',10,13,09,'/',10,13,'$'
DIGITOS DB 7,?,7 DUP('$'),'$'
SIGNO DB 3,?,3 DUP('0'),'$'

BASE DW 1
CAMB DW 0
EXCH DW ?

.CODE

CALCULA PROC NEAR
MOV AX,@DATA
MOV DS,AX
CALL CLEAR

PROC1: CALL UBICA1
MOV AH,09H
LEA DX,OPERA1
INT 21H

MOV AH,0AH
LEA DX,DIGITOS
INT 21H

CMP DIGITOS[1],06H
JAE MAL1
CMP DIGITOS[2],2DH
JNE PROC4
MOV SIGNO[2],01H
JMP PROC4

MAL1: CALL UBICA6
MOV AH,09H
LEA DX,ERRDIG
INT 21H
JMP PROC1

PROC4: CALL BINARIO
MOV AX,CAMB
MOV EXCH,AX

PROC2: CALL UBICA2
MOV AH,09H
LEA DX,OPERA2
INT 21H
MOV AH,0AH
LEA DX,DIGITOS
INT 21H
CMP DIGITOS[1],06H
JAE MAL2
CMP DIGITOS[2],2DH
JNE PROC5
MOV SIGNO[3],01H
JMP PROC5

MAL2: CALL UBICA5
MOV AH,09H
LEA DX,ERRDIG
INT 21H
JMP PROC2

PROC5: MOV CAMB,0000H
CALL BINARIO

INIC: CALL UBICA3
MOV AH,09H
LEA DX,OPERAC
INT 21H
CALL SALIDA
MOV AH,02H
MOV DL,AL
INT 21H
MOV SI,0003H
MOV CX,04H

INIC2: CMP AL,MENU[SI]
JE INIC1
ADD SI,0004H
LOOP INIC2
MOV AH,09H
LEA DX,ERROR
INT 21H
JMP INIC

INIC1: CMP AL,2BH
JNE OPERAC1
CMP SIGNO[2],01H
JNE SIGNO1
NEG EXCH

SIGNO1: CMP SIGNO[3],01H
JNE SIGNO2
NEG CAMB

SIGNO2: MOV AX,EXCH
ADD AX,CAMB
JNS SIGNO3
NEG AX
MOV SIGNO[4],01H
JNC SIGNO3
MOV DIGITOS[3],1

SIGNO3: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC1: CMP AL,2DH
JNE OPERAC2
CMP SIGNO[2],01H
JNE RE1
NEG EXCH

RE1: CMP SIGNO[3],01H
JNE RE2
NEG CAMB

RE2: MOV AX,EXCH
SUB AX,CAMB
JNS RE3
NEG AX
MOV SIGNO[4],01H
JNC RE3
MOV DIGITOS[3],1

RE3: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC2: CMP AL,2AH
JNE OPERAC3
CMP SIGNO[2],01H
JNE SELEC1
MOV SIGNO[4],01H

SELEC1: CMP SIGNO[3],01H
JNE SELEC2
MOV DL,SIGNO[3]
CMP SIGNO[4],DL
JE SELEC3
MOV SIGNO[4],01H
JMP SELEC2

SELEC3: MOV SIGNO[4],00H

SELEC2: MOV AX,EXCH
MUL CAMB

SELEC4: CALL ASCII
CALL RESULTA
JMP FINAL1

OPERAC3: CMP AL,2FH
JNE FINAL1
CMP SIGNO[2],01H
JNE DETER1
MOV SIGNO[4],01H

DETER1: CMP SIGNO[3],01H
JNE DETER2
MOV DL,SIGNO[3]
CMP SIGNO[4],DL
JE DETER3
MOV SIGNO[4],01H
JMP DETER2

DETER3: MOV SIGNO[4],00H

DETER2: MOV AX,EXCH
XOR DX,DX
DIV CAMB

DETER4: CALL ASCII
CALL RESULTA
JMP FINAL1

FINAL1: CALL SALIDA
MOV AX,4C00H
INT 21H

CALCULA ENDP

CLEAR PROC NEAR
MOV AX,0600H
MOV BX,1A00H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
CLEAR ENDP

UBICA1 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0606H
INT 10H
RET
UBICA1 ENDP


UBICA2 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0806H
INT 10H
RET
UBICA2 ENDP

UBICA3 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,0A06H
INT 10H
RET
UBICA3 ENDP

UBICA4 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1010H
INT 10H
RET
UBICA4 ENDP

UBICA5 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1106H
INT 10H
RET
UBICA5 ENDP

UBICA6 PROC SUBSYS
MOV AH,02H
MOV BH,00H
MOV DX,1206H
INT 10H
RET
UBICA6 ENDP

BINARIO PROC NEAR
MOV BX,10
MOV CH,00H
MOV CL,DIGITOS[1]
MOV DI,CX
INC DI
CMP DIGITOS[2],2DH
JNE BINA
DEC CX
BINA: MOV AL,DIGITOS[DI]
AND AX,000FH
MUL BASE
ADD CAMB,AX
MOV AX,BASE
MUL BX
MOV BASE,AX
DEC DI
LOOP BINA
MOV BASE,0001H
RET
BINARIO ENDP

ASCII PROC NEAR
MOV CX,06
MOV SI,0002
ASC3: MOV DIGITOS[SI],00H
INC SI
LOOP ASC3
MOV CX,0010
MOV SI,0007
ASC1: CMP AX,CX
JB ASC2
XOR DX,DX
DIV CX
OR DL,30H
MOV DIGITOS[SI],DL
DEC SI
JMP ASC1
ASC2: OR AL,30H
MOV DIGITOS[SI],AL
RET
ASCII ENDP

RESULTA PROC NEAR
CALL UBICA4
MOV AH,09H
LEA DX,RESULT
INT 21H
CMP SIGNO[4],01H
JNE RES1
MOV DIGITOS[2],2DH
RES1: LEA DX,DIGITOS[2]
INT 21H
RET
RESULTA ENDP

SALIDA PROC NEAR
MOV AH,10H
INT 16H
RET
SALIDA ENDP


.STACK

END CALCULA


densimitre
19 de Julio del 2004
Hola

Puedes convertir este codigo a asembly para PIC 16F628???

Gracias