装配如果AND

时间:2011-10-25 00:28:38

标签: assembly

我的装配分配有问题:

  

编写一个程序,在数据段中写入数字7-15,   从偏移量200h开始,然后使用循环并将它们进行比较   从内存中读取数据,DX将插入数字之和   可被4整除。

这是我的代码,它不起作用。我是汇编语言的初学者。有人可以帮助我吗?

mov ax,data
mov ds,ax
mov cl,07d 
mov ch,015d
mov [bx],200h

c:
mov [bx] ,cl
inc cl
inc bx
cmp cl,ch
jne c

c1:
mov cl,[bx]
if
AND ax, 3h
add dx, ax
inc cl
inc bx 
else
jmp c1
end if

2 个答案:

答案 0 :(得分:6)

在...... well ... 任何汇编语言中没有IFELSE指令。如果要在汇编中使用等效的if / else块,则需要编写正确的指令序列。

例如,考虑这个C代码:

if (a == 0)
{
    b = 1;
}
else
{
    b = 2;
}

适当的汇编代码如下所示:

    cmp eax, 0
    jne anotzero
aiszero:
    mov ebx, 1
    jmp endifblock
anotzero:
    mov ebx, 2
    jmp endifblock
endifblock:
    nop

答案 1 :(得分:0)

您正在c循环中递增BX寄存器,然后忘记再次分配200h。然后它继续进行icrementing并变成209h以上,但你需要它再次从200h开始。

jne c
**mov [bx],200h** add this.
c1:
mov cl,[bx]