Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Loops Asm汇编程序-CX循环永久循环_Loops_Assembly_Infinite Loop - Fatal编程技术网

Loops Asm汇编程序-CX循环永久循环

Loops Asm汇编程序-CX循环永久循环,loops,assembly,infinite-loop,Loops,Assembly,Infinite Loop,我使用的是emu8086,www.emu8086.com,代码如下: data segment five equ 5 VET db 5 dup (1,2,3,4,5) w2 db 0 ends stack segment dw 128 dup(0) ends code segment start: mov ax,data mov ds, ax mov es,ax ;sum xor AX,AX xor BX,BX xor CX, CX mov cl,five mov si

我使用的是emu8086,www.emu8086.com,代码如下:

data segment

five equ 5
VET db 5 dup (1,2,3,4,5)
w2 db 0

ends

stack segment
dw   128  dup(0)
ends

code segment
start:

mov ax,data
mov ds, ax
mov es,ax



;sum
xor AX,AX
xor BX,BX
xor CX, CX


mov cl,five
mov si,0

sum:
add al,vet[si]
inc SI
dec cx
loop sum

mov w2,al
;end sum



ends

end start
问题是当CX达到0时,sum循环应该停止,并且sum的结果保存到w2变量中

由于某种原因,这种情况不会在程序中发生,并且会永远循环


我的代码有什么问题?有人能帮我一下吗?

问题是您要将CX递减两次—一次显式递减,一次在
循环
指令中递减。因此,在每次循环迭代中,CX的值从
5->3->1->-1->…
开始,您有一个无限循环

更改:

sum:
    add al,vet[si]
    inc SI
    dec cx           ; decrement CX
    loop sum         ; decrement CX and branch if not zero
致:


问题是您要将CX递减两次—一次是显式递减,一次是在
循环
指令中递减。因此,在每次循环迭代中,CX的值从
5->3->1->-1->…
开始,您有一个无限循环

更改:

sum:
    add al,vet[si]
    inc SI
    dec cx           ; decrement CX
    loop sum         ; decrement CX and branch if not zero
致:


8086循环指令递减CX,如果CX非零,则循环。在您的代码中:

sum:
add al,vet[si]
inc SI
dec cx
loop sum

首先递减CX,然后执行循环,循环将再次递减CX。如果以奇数值(例如5)开始,则循环执行时CX将为零,这将使其递减到零以上,循环将继续。

8086循环指令将递减CX,如果CX为非零,则循环。在您的代码中:

sum:
add al,vet[si]
inc SI
dec cx
loop sum

首先递减CX,然后执行循环,循环将再次递减CX。如果以奇数值(例如5)开始,则循环执行时CX将为零,这将使其减小到零以上,循环将继续。

谢谢你们!你的贡献同样宝贵。幸运的是,我只能接受一个答案…谢谢你们两个!你的贡献同样宝贵。幸运的是,我只能接受一个答案。。。