Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 组件中的回路:8086上的TASM(DosBox)_Memory_Video_X86 16_Tasm - Fatal编程技术网

Memory 组件中的回路:8086上的TASM(DosBox)

Memory 组件中的回路:8086上的TASM(DosBox),memory,video,x86-16,tasm,Memory,Video,X86 16,Tasm,我正在尝试循环这段代码,它将字符“Q”写入视频内存段b800中的一个地址,该地址由es:[di]指定 在这里,我尝试将循环增加2(因为每个屏幕位置都由两个字节、颜色和属性组成),但代码只在第一个位置生成字符。我想我不明白如何使用cx,因为我认为它应该循环100次 .model small .stack .code main: sub cx, cx mov cx, 100 dates: mov ax,0B800h mov es,ax sub

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

在这里,我尝试将循环增加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

天哪,很久没有做汇编编程了,但是有一些明显的错误:

  • 初始的
    sub-cx,cx
    将cx设置为0,但这是无用的,因为下一行是
    mov-cx,100

  • 您为每个循环周期设置新的
    es
    di
    等值,以便所有迭代都写入相同的位置。解决方案:移动日期:在添加di之前添加标签,2

  • 你没有一个合适的循环计数器,所以你应该用类似的东西来替换
    循环日期

十二月十二日


jnz约会

谢谢,这很有道理。我没有组装经验,所以这真的很有帮助。如果循环需要这样一个计数器,那么循环指令有什么用呢?好吧,好吧,祝你玩得开心:-)让我想起了这样的错误杀死整个机器的日子。但同样,当个人电脑有一个真正的复位按钮,MS-DOS从软盘启动的速度比现在的Windows从固态磁盘启动的速度要快;-)我很高兴当时没有参加比赛,但我非常尊重那些参加比赛的人。关于你的第一句话:你是对的,“循环约会”会很好。很抱歉在这里添加了混淆,只是忘记了“loop”是一条有效的8086指令。。。