ensamblador 8086
tengo un problea cn el 8086, intento hacer que en modo grafico me aparezca la letra 'A', pero me sale la 'H'. alguna ayuda!!!!
aqui os dejo lo que tengo hecho:
.MODEL SMALL
.STACK 100h
.DATA
pixfila_a dw 80
pixcol_a dw 140
.CODE
macro_letra_a MACRO pixf,pixc
local pinta1a,pinta2a,pinta3a,pinta4a
MOV DL, 0
MOV DH,0
MOV ax,pixf
MOV bx,320
MUL bx
ADD ax,pixc
MOV DI,ax
MOV AL,15
MOV cx, DI
ADD cx, 30
pinta1h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta1h
MOV ax,320
MOV bx,10
MUL bx
SUB DI,ax
MOV AL,15
pinta2h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta2h
MOV DL, 0
MOV DI,cx
pinta3h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta3h
MOV DL, 0
MOV DI,cx
pinta4h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta4h
ENDM
MOV AX,@DATA
MOV DS,AX
MOV ah,0
MOV al,13h
int 10h
MOV AX, 0A000h
MOV ES, AX
macro_letra_a pixfila_a,pixcol_a
MOV AH,0
INT 16h
CMP AX, 011Bh
JE SALIR
SALIR:
MOV AH,4ch
INT 21h
END
aqui os dejo lo que tengo hecho:
.MODEL SMALL
.STACK 100h
.DATA
pixfila_a dw 80
pixcol_a dw 140
.CODE
macro_letra_a MACRO pixf,pixc
local pinta1a,pinta2a,pinta3a,pinta4a
MOV DL, 0
MOV DH,0
MOV ax,pixf
MOV bx,320
MUL bx
ADD ax,pixc
MOV DI,ax
MOV AL,15
MOV cx, DI
ADD cx, 30
pinta1h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta1h
MOV ax,320
MOV bx,10
MUL bx
SUB DI,ax
MOV AL,15
pinta2h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta2h
MOV DL, 0
MOV DI,cx
pinta3h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta3h
MOV DL, 0
MOV DI,cx
pinta4h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta4h
ENDM
MOV AX,@DATA
MOV DS,AX
MOV ah,0
MOV al,13h
int 10h
MOV AX, 0A000h
MOV ES, AX
macro_letra_a pixfila_a,pixcol_a
MOV AH,0
INT 16h
CMP AX, 011Bh
JE SALIR
SALIR:
MOV AH,4ch
INT 21h
END
tu codigo es muy extenso, si lo unico que quieres es mostrar una letra en modo grafico. yo hice un programa que muestra un pentagono en modo grafico e inclui un letrero en el mismo modo, esta es una parte del codigo:
.data
msg db 'para salir presiona enter ',13,10,'$'
.code
inicio:
mov ax, @data
mov ds, ax
mov si, offset msg
mov ah, 00
mov al, 13h
int 10h
write:
mov ah, 0eh
mov al, [si] ;esta linea se encarga del caracter a mostrar, de manera que si quieres mostrar la 'H' basta cambiar si por el ascii de la h
mov bh, 00
mov bl, 02
int 10h
inc si
cmp si, '$'
jne write
.data
msg db 'para salir presiona enter ',13,10,'$'
.code
inicio:
mov ax, @data
mov ds, ax
mov si, offset msg
mov ah, 00
mov al, 13h
int 10h
write:
mov ah, 0eh
mov al, [si] ;esta linea se encarga del caracter a mostrar, de manera que si quieres mostrar la 'H' basta cambiar si por el ascii de la h
mov bh, 00
mov bl, 02
int 10h
inc si
cmp si, '$'
jne write
hola Arcturus, he probado lo que me pusiste y funciona bien, pero no se si podrias o sabrias hacerlo con el codigo que yo he puesto, por que quedaria "muy descarado", si lo presento de tu forma y ami solo me lo explican de la otra manera, no se si me explico...:):)
SALUDOS.
SALUDOS.
ok, si te ayudo, solo dime en que parte de tu codigo estas mandando la H para saber mas o menos donde esta el error, y de pasada, si puedes explicarme que hace la macro macro_letra_a exactamente
OK, pues empieza aki:
macro_letra_a MACRO pixf,pixc
local pinta1a,pinta2a,pinta3a,pinta4a
MOV DL, 0
MOV DH,0
MOV ax,pixf
MOV bx,320
MUL bx
ADD ax,pixc
MOV DI,ax
MOV AL,15
MOV cx, DI
ADD cx, 30
A partir de aki se empieza a escribir las lineas de la 'a', 2 horizontales y 2 verticales ( pinta1h, pinta2h,pinta3h,pinta4h )
pinta1h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta1h
MOV ax,320
MOV bx,10
MUL bx
SUB DI,ax
MOV AL,15
pinta2h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta2h
MOV DL, 0
MOV DI,cx
pinta3h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta3h
MOV DL, 0
MOV DI,cx
pinta4h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta4h
macro_letra_a MACRO pixf,pixc
local pinta1a,pinta2a,pinta3a,pinta4a
MOV DL, 0
MOV DH,0
MOV ax,pixf
MOV bx,320
MUL bx
ADD ax,pixc
MOV DI,ax
MOV AL,15
MOV cx, DI
ADD cx, 30
A partir de aki se empieza a escribir las lineas de la 'a', 2 horizontales y 2 verticales ( pinta1h, pinta2h,pinta3h,pinta4h )
pinta1h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta1h
MOV ax,320
MOV bx,10
MUL bx
SUB DI,ax
MOV AL,15
pinta2h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta2h
MOV DL, 0
MOV DI,cx
pinta3h:
MOV ES:[DI], AL
ADD DI, 320
INC DL
CMP DL, 30
jbe pinta3h
MOV DL, 0
MOV DI,cx
pinta4h:
MOV ES:[DI], AL
INC DI
INC DH
CMP DH, 30
jbe pinta4h