添加数组8086时遇到麻烦

时间:2020-06-02 15:57:58

标签: assembly emu8086

start :
    mov ax, @data
    mov ds, ax 
    MOV BL, 00H 
        MOV DL, 00H
    LEA SI, ARX
    LEA DI, ARY
    PRINTF MSG1
X:  
    MOV CL,05
    mov ah, 01h
    int 21h
    MOV BL,AL
    INC BL
    DEC CL
    JZ Y
    JNZ X

Y:  
    MOV CL,05
    mov ah, 01h
    int 21h
    MOV DL,AL
    INC DL
    DEC CL
    JZ A
    JNZ Y

A:  MOV ARX,BL
    MOV ARY,DL
    JMP Z       

Z:  PRINTF MSG3
    MOV CL,05H
    MOV AL,[SI]
    ADD AL,[DI]
    ADD AL,48H
    mov dl,al
    mov ah,02h
    int 21h
    DEC CL
    INC SI
    INC DI
    JZ EXIT
    JNZ Z   
EXIT:   mov ah, 4ch
    int 21h
    end start

我无法结束循环,并且还有其他问题,有人可以帮助我纠正这些错误。还不太复杂的答案还在大学里,所以请帮忙。我使用计数器(05)停止循环,但是无论什么都没有停止。

问题:编写一个用于8086微处理器的汇编级程序,以读取两个单独的数组,每个数组各10个字节,并显示一个求和数组,该数组给出相应元素的总和。下面给出示例:

输入数组1:

01

02

03

04

输入数组2:

01

02

03

04

求和数组为:

02

04

06

08

1 个答案:

答案 0 :(得分:1)

递减循环计数器后,您依靠的是正确设置的标志,但是您执行了一些指令,这些指令将在递减和检查标志之间更改标志。

具体来说,dec cl指令应该在第三个循环结束时恰好在jnz之前:

    INC SI
    INC DI
    DEC CL
    JNZ Z

您可以删除其他一些条件检查,因为可以取消跳过JZ的{​​{1}}。您可以为标签使用更好的名称。