PROBLEMA CON LA MEMORIA DE VIDEO
Estoy haciendo unos procedimientos que escriben en la memoria de video en modo texto direccionando ES en la posicion 08B00 y para calcular la direccion de la memoria (Desplazamiento) a partir de una posicion en pantalla es Desplazamiento=(filax80+columna)x2, ese desplazamiento se mete en SI y en ES:[SI] estara esa posicion de pantalla.
Mi problema es que cuando avanzo en la escritura en las columnas no hay problema pero cuando aumento las filas los caracteres no aparecen en otra fila aparecen en la misma pero mas separados¿como hago para que se incrementen las filas en pantalla cuando calculo el desplazamiento habiendo incrementado la fila? espero que hayais entendido la explicacion y gracias por leer esto
Mi problema es que cuando avanzo en la escritura en las columnas no hay problema pero cuando aumento las filas los caracteres no aparecen en otra fila aparecen en la misma pero mas separados¿como hago para que se incrementen las filas en pantalla cuando calculo el desplazamiento habiendo incrementado la fila? espero que hayais entendido la explicacion y gracias por leer esto
Una fila tiene 80 columnas y el byte de atributo es el siguiente al de la letra o posición a escribir o leer.
ES = 0b800h
si = ((fila - 1) * 160) + ((columna - 1) * 2)) para el carácter
y para el atributo
si = (((fila - 1) * 160) + ((columna - 1) * 2)) + 1)
OJO CON LOS PARENTESIS. TE PUEDEN DAR ERROR SI NO LOS PONES CORRECTAMENTE.
ES = 0b800h
si = ((fila - 1) * 160) + ((columna - 1) * 2)) para el carácter
y para el atributo
si = (((fila - 1) * 160) + ((columna - 1) * 2)) + 1)
OJO CON LOS PARENTESIS. TE PUEDEN DAR ERROR SI NO LOS PONES CORRECTAMENTE.
Espero que esto le sirva es lo que tengo vale.
.Model small
.Stack 256
.Data
posicion db 'Entre la posicion (fila, columna):$'
x db 0 ; aqui se guarda el valor de la columna
y db 0 ; aqui se guarda el valor de la fila
Temp db 0
ENTRAR MACRO
LOCAL DALE ; Define las etiquetas que se usan dentro de la macro
DALE: MOV AH,7h
INT 21h
CMP AL,'0'
JL DALE ; salta si menor
CMP AL,'9'
JG DALE ;salta si mayor
MOV AH,2h
MOV DL,AL
INT 21h
ENDM
ENTRARNUM MACRO
ENTRAR
SUB AL,30h
MOV BL,10
MUL BL
MOV Temp,AL; primer dígito
ENTRAR
SUB AL,30h
ADD AL,Temp
ENDM
PANTALLA MACRO DIR_CARTEL ; sacar carteles por pantalla
PUSH AX
PUSH DX
MOV AH, 9
MOV DX, OFFSET DIR_CARTEL
INT 21H
POP DX
PUSH AX
ENDM
SACAR MACRO CAR; sacar carácter por pantalla
PUSH AX
PUSH DX
MOV DL, CAR
MOV AH, 2
INT 21H
POP DX
PUSH AX
ENDM
.Code
Main Proc
mov AX,@Data
mov DS,AX
mov AX,0003 ; Seleccion del modo3 Texto 80x25
int 10h
Pantalla posicion
;Para las filas
entrarnum
mov y,al
mov al,';'
sacar al
;Para las Columnas
entrarnum Temp
mov x,al
mov AH,7 ; Espera
INT 21H
mov AX,0003 ; Seleccion del modo3
int 10h
mov AX,0b800h
mov ES,AX
;Calculo del dezplazamiento
xor AX,AX
mov AL,y
mov BL,160
mul BL
mov DI,AX
xor AX,aX
mov Al,x
mov BL,2
mul BL
add DI,AX
;Seleccion del caracter y del atributo
mov AL,'A'
mov AH,01001010b
;Escribo en mem video
mov es:[DI],AX
mov AH,7 ; Espera
INT 21H
;Salir al sist operativo
mov AX,4C00h
Int 21h
Main EndP
End
.Model small
.Stack 256
.Data
posicion db 'Entre la posicion (fila, columna):$'
x db 0 ; aqui se guarda el valor de la columna
y db 0 ; aqui se guarda el valor de la fila
Temp db 0
ENTRAR MACRO
LOCAL DALE ; Define las etiquetas que se usan dentro de la macro
DALE: MOV AH,7h
INT 21h
CMP AL,'0'
JL DALE ; salta si menor
CMP AL,'9'
JG DALE ;salta si mayor
MOV AH,2h
MOV DL,AL
INT 21h
ENDM
ENTRARNUM MACRO
ENTRAR
SUB AL,30h
MOV BL,10
MUL BL
MOV Temp,AL; primer dígito
ENTRAR
SUB AL,30h
ADD AL,Temp
ENDM
PANTALLA MACRO DIR_CARTEL ; sacar carteles por pantalla
PUSH AX
PUSH DX
MOV AH, 9
MOV DX, OFFSET DIR_CARTEL
INT 21H
POP DX
PUSH AX
ENDM
SACAR MACRO CAR; sacar carácter por pantalla
PUSH AX
PUSH DX
MOV DL, CAR
MOV AH, 2
INT 21H
POP DX
PUSH AX
ENDM
.Code
Main Proc
mov AX,@Data
mov DS,AX
mov AX,0003 ; Seleccion del modo3 Texto 80x25
int 10h
Pantalla posicion
;Para las filas
entrarnum
mov y,al
mov al,';'
sacar al
;Para las Columnas
entrarnum Temp
mov x,al
mov AH,7 ; Espera
INT 21H
mov AX,0003 ; Seleccion del modo3
int 10h
mov AX,0b800h
mov ES,AX
;Calculo del dezplazamiento
xor AX,AX
mov AL,y
mov BL,160
mul BL
mov DI,AX
xor AX,aX
mov Al,x
mov BL,2
mul BL
add DI,AX
;Seleccion del caracter y del atributo
mov AL,'A'
mov AH,01001010b
;Escribo en mem video
mov es:[DI],AX
mov AH,7 ; Espera
INT 21H
;Salir al sist operativo
mov AX,4C00h
Int 21h
Main EndP
End