我的汇编代码有什么问题

Pgr*_*rAm 5 c++ x86 assembly dos x86-16

所以我正在用C++编写一个用于MS-DOS的游戏,我还包括一些用于速度的内联汇编.这个特殊的代码块会将一个星形画入视频存储器(0A000h).我的代码的问题是它只绘制了dh所设置的任何颜色的一个像素.据我所知mov dx,00007h相当于将dh设置为0,dl设置为7.有什么问题?

每行旁边都注释了等效的C/C++代码(或者至少是我的意图).我的编译器是turbo C++ 3.0.我试图只使用8086/8088指令.

另外我知道MS-DOS有多老,所以不要告诉我为更新的编译器/操作系统编写代码.为dos编写代码是我的一种爱好.

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;
}
Run Code Online (Sandbox Code Playgroud)

ita*_*kel 5

我想你在更新ax之后忘记了更新di

add ax,1
mov di,ax ;don't forget this line
mov es:[di],dl
Run Code Online (Sandbox Code Playgroud)