0

我正在尝试循环此代码,该代码将字符“Q”写入由 es:[di] 指定的视频内存段 b800 中的地址

在这里,我尝试将循环增加 2(因为每个屏幕位置都包含两个字节、颜色和属性),但代码仅在第一个位置产生字符。我想我不明白如何使用 cx,因为我认为这应该循环 100 次。

.model small
.stack
.code
main:

sub cx, cx
mov cx, 100

dates:

mov ax,0B800h          
mov es,ax               
sub di, di               
mov di, 200
add di, 2 
mov ah, 5               
mov al, 'Q'              
mov es:[di], ax 

loop dates


mov ax,4C00h           
int 21h

end main
4

1 回答 1

1

OMG,好久没做汇编编程了,但是有一些明显的错误:

  • 初始sub cx,cx将 cx 设置为 0,但这没用,因为你mov cx,100下一行

  • 您为每个循环周期设置es dietc new 的值,因此所有迭代都写入相同的位置。解决方案:移动日期:标签之前add di,2

  • 你没有合适的循环计数器,所以你应该loop dates用类似的东西替换

十二月

jnz日期

于 2013-04-07T21:59:35.533 回答