2013-04-07 73 views
0

我想这个循环的代码,在显存段B800写入字符“Q”到一个地址,由指定ES:[二]循环在大会:TASM 8086(DOSBox中)

这里我试图将循环加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 

回答

1

OMG,都没有做了好半天汇编编程,但也有一些明显的错误:

  • 初始sub cx,cx台CX为0,但是这是无用的,因为你mov cx,100的下一行

  • 您设置的值为esdi等新的每个循环,因此所有的迭代写入相同的位置。解决方案:之前add di,2

  • 你没有一个合适的循环计数器

    标签,所以你应该与成才取代loop dates

月CX

JNZ日期

+0

感谢,:移动日期这就说得通了。我没有装配经验,所以这真的很有帮助。如果循环需要这样一个计数器,那么循环指令有什么用处? – user2241226 2013-04-07 22:04:01

+0

惊人的它完美地工作 – user2241226 2013-04-07 22:08:44

+0

好吧,好吧,玩得开心:-)让我想起了这样的错误杀死整个机器的日子。但是,那些那些时间,当PC有一个真正的重置按钮和MS-DOS从软盘启动比现在的Windows从固态硬盘更快;-) – 2013-04-07 22:12:19