? Estoy escribiendo un juego en C++ para MS-DOS y estoy incluyendo un ensamblado en línea para la velocidad. Este bloque de código particular dibujaría una estrella en la memoria de video (0A000h). El problema con mi código es que solo dibuja un píxel en cualquier color en el que esté establecido dh. Por lo que sé, mov dx, 00007h es equivalente a establecer dh a 0 y dl a 7. ¿Qué pasa?¿Cuál es el problema con mi código de ensamblaje
El código C/C++ equivalente (o al menos mi intención) se comenta al lado de cada línea. Mi compilador es turbo C++ 3.0. Intento usar solo las instrucciones 8086/8088.
También sé qué tan antiguo es MS-DOS así que no me diga que escriba código para un compilador/sistema operativo más nuevo. Escribir código para dos es una afición mía.
pixelOffset = x + (y << 6) + (y << 8);
_asm {
mov ax, WORD PTR pixelOffset
mov di, ax
mov ax, 0A000h ;pointer to the video memory
mov es, ax
mov dx, 00007h ;indexed color 00 and 07
mov cx, 0000Fh ;indexed color white 0F
add ax, 2 ;pixelOffset += 2;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 319 ;pixelOffset += 319;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 317 ;pixelOffset += 317;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], cx ;videomem[pixelOffset] = WHITE;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 317 ;pixelOffset += 317;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 319 ;pixelOffset += 319;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
}
¿Estás escribiendo * un ** DOS ** juego? Eso es tan asombroso. –
+1 para la nostalgia de los juegos de MS-DOS! –
@John Dibling: ya lo voy a poner en sourceforge cuando haya terminado – PgrAm