1
« en: Sábado 24 de Noviembre de 2012, 05:06 »
Hola, necesito ayuda con este código de asembler que supuestamente debe sumar una matriz de 2x2
el problema es que aprece el mensaje A11: yo ingreso un numero x ejemplo 12
luego aparece A12: ingreso 14 y luego no aparece nada más
mi sistema operativo es windows 7 32bits e intale el turbo assembler 5.0
si pudieran ayudarme se los agradecira mucho nose mucho sobre asembler
no he llevado el curso pero un profesor nos dejo de tarea buscar codigos de assembler de diferentes temas a mi me toco de operaciones aritmeticas de matrices
y tratar de explicar lo que entendamos.
TITLE MATRICES
.MODEL SMALL
.STACK 64
.DATA
;MATRIZ A
A11 DB ?
A12 DB ?
A21 DB ?
A22 DB ?
;MATRIZ B
B11 DB 12
B12 DB 12
B21 DB 12
B22 DB 12
;MATRIZ RESULTANTE
R11 DB ?
R12 DB ?
R21 DB ?
R22 DB ?
ASCVAL DB '00','$'
DIVR DB ?
;MENSAJES PARA INGRESO MATRIZ
MSG11 DB 'A11: ','$'
MSG12 DB 'A12: ','$'
MSG21 DB 'A21: ','$'
MSG22 DB 'A22: ','$'
MSGB11 DB 'B11: ','$'
MSGB12 DB 'B12: ','$'
MSGB21 DB 'B21: ','$'
MSGB22 DB 'B22: ','$'
MSG DB 'MATRIZ RESULTADO','$'
MSG2 DB 'DERECHOS RESEVADOS POR REFLEX','$'
;VARIABLES PARA LEER DEL BUFFER DEL TECLADO
NAMEPAR LABEL BYTE
MAXLEN DB 3
ACTLEN DB ?
NAMEFLD DB 3 DUP('')
.CODE
BEGIN PROC FAR
MOV AX,@DATA
MOV DS,AX
;IMPRIMIR EN PANTALLA MENSAJE MSG11
MOV AH,09H
LEA DX,MSG11
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE A11
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV A11,AL
MOV AX,10
MUL A11
MOV A11,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD A11,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSG12
MOV AH,09H
LEA DX,MSG12
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE A12
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV A12,AL
MOV AX,10
MUL A12
MOV A12,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD A12,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSG21
MOV AH,09H
LEA DX,MSG21
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE A21
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV A21,AL
MOV AX,10
MUL A21
MOV A21,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD A21,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSG22
MOV AH,09H
LEA DX,MSG22
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE A22
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV A22,AL
MOV AX,10
MUL A22
MOV A22,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD A22,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSGB11
MOV AH,09H
LEA DX,MSGB11
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE B11
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV B11,AL
MOV AX,10
MUL B11
MOV B11,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD B11,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSGB12
MOV AH,09H
LEA DX,MSGB12
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE B12
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV B12,AL
MOV AX,10
MUL B12
MOV B12,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD B12,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSGB21
MOV AH,09H
LEA DX,MSGB21
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE B21
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV B21,AL
MOV AX,10
MUL B21
MOV B21,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD B21,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;IMPRIMIR EN PANTALLA MENSAJE MSGB22
MOV AH,09H
LEA DX,MSGB22
INT 21H
;LEE DESDE TECLADO Y LO TRASPASA A LA VARIABLE B22
MOV AH,0AH
LEA DX,NAMEPAR
INT 21H
LEA SI,NAMEFLD
MOV AL,[SI]
SUB AL,48
MOV B22,AL
MOV AX,10
MUL B22
MOV B22,AL
LEA SI,NAMEFLD(1)
MOV AL,[SI]
SUB AL,48
ADD B22,AL
;LIMPIA PANTALLA
MOV AH,08H
INT 10H
MOV BH,AH
MOV AX,0600H
MOV CX,0000
MOV DX,184FH
INT 10H
;SUMA LAS MATRICES A Y B
MOV AH,A11
ADD AH,B11
MOV R11,AH
MOV AH,A12
ADD AH,B12
MOV R12,AH
MOV AH,A21
ADD AH,B21
MOV R21,AH
MOV AH,A22
ADD AH,B22
MOV R22,AH
;IMPRIMIR EN PANTALLA MENSAJE MSG
MOV AH,09H
LEA DX,MSG
INT 21H
;TRANSFORMA LA VARIABLE R11 A ASCII
MOV AL,R11
CBW
MOV DIVR,10
DIV DIVR
ADD AL,48
ADD AH,48
MOV ASCVAL(0),AL
MOV ASCVAL(1),AH
;UBICA EL CURSOR EN LA POSICION 2,1
MOV AH,02H
MOV BH,00H
MOV DH,2
MOV DL,1
INT 10H
;IMPRIME LA VARIABLE R11 EN PANTALLA
MOV AH,09H
LEA DX,ASCVAL
INT 21H
;TRANSFORMA LA VARIABLE R12 A ASCII
MOV AL,R12
CBW
MOV DIVR,10
DIV DIVR
ADD AL,48
ADD AH,48
MOV ASCVAL(0),AL
MOV ASCVAL(1),AH
;UBICA EL CURSOR EN LA POSICION 2,4
MOV AH,02H
MOV BH,00H
MOV DH,2
MOV DL,4
INT 10H
;IMPRIME LA VARIABLE R12 EN PANTALLA
MOV AH,09H
LEA DX,ASCVAL
INT 21H
;TRANSFORMA LA VARIABLE R21 A ASCII
MOV AL,R21
CBW
MOV DIVR,10
DIV DIVR
ADD AL,48
ADD AH,48
MOV ASCVAL(0),AL
MOV ASCVAL(1),AH
;UBICA EL CURSOR EN LA POSICION 3,1
MOV AH,02H
MOV BH,00H
MOV DH,3
MOV DL,1
INT 10H
;IMPRIME LA VARIABLE R21 EN PANTALLA
MOV AH,09H
LEA DX,ASCVAL
INT 21H
;TRANSFORMA LA VARIABLE R22 A ASCII
MOV AL,R22
CBW
MOV DIVR,10
DIV DIVR
ADD AL,48
ADD AH,48
MOV ASCVAL(0),AL
MOV ASCVAL(1),AH
;UBICA EL CURSOR EN LA POSICION 3,4
MOV AH,02H
MOV BH,00H
MOV DH,3
MOV DL,4
INT 10H
;IMPRIME LA VARIABLE R22 EN PANTALLA
MOV AH,09H
LEA DX,ASCVAL
INT 21H
;UBICA EL CURSOR EN LA POSICION 3,4
MOV AH,02H
MOV BH,00H
MOV DH,10
MOV DL,1
INT 10H
MOV AH,09H
LEA DX,MSG2
INT 21H
;FINALIZA EL PROGRAMA Y VUELVE A DOS
MOV AX,4C00H
INT 21H
BEGIN ENDP
END BEGIN