【发布时间】:2023-03-08 14:19:01
【问题描述】:
我有一个向量,我必须将大于 50 ( > 50 ) 的数字的总和放入 AX 寄存器中。
我不明白为什么我的循环在运行时不起作用。首先它将 100 与 50 进行比较,在 adunare 处跳转,将 100 添加到 AX 但随后退出循环并终止程序。
.MODEL SMALL
.STACK 10h
.DATA
vect DB 100,70,3,10,60,200,30
len DB 7
.CODE
begin:
mov ax,@DATA
mov ds,ax
mov ax,0
mov cl,len
mov ch,0
mov si, -1
bucla:
inc si
cmp vect[si],50
ja adunare
jb mic
adunare:
add ax, word ptr vect[si]
mic:
loop bucla
mov ah,4ch
int 21h
END begin
【问题讨论】:
-
您的向量是字节,但您添加了单词。但这与问题无关。我怀疑你使用错误的调试器,它可能会循环回来,只是它没有为你显示。确保使用单步功能。
-
要将字节添加到字寄存器,您可以使用这样的中间寄存器:
xor dx, dx --- mov dl, byte ptr vect[si] --- add ax, dx。 -
感谢它现在可以正常工作了 :)