0

在下面的代码中

data segment
    ; add your data here!
    num db 0,0,0,0 
    sum db 0 
    str db "Sum is : $"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    ;;read array from input     
    mov cx,4;set loop counter
    L1:
    mov ah,7;interupt 7 use for reading character without echo
    int 21h  
    mov num,al;mov al to num 
    add sum,al
    inc num;nex element
    LOOP L1 
    sub num,4;go to first position
    ;;;;;;;;;;;;;;;;;;;;;;;;

    ;;show sum  
    lea dx,str;;-----------------I'm changing this line-----------------------
    mov ah,9;interupt 9 for writing string
    int 21h 
    ;;;;;;;;;;;           

    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

如果我将 dx 更改为 ax

lea dx,str --> lea ax,str

输出变成1 'Sum is 但是如果我使用lea ax,str它是正确的>Sum is :

我想不通原因!

为什么将 dx 更改为 ax 会导致错误的输出?

4

1 回答 1

1

您不应随意将 AX 换成 DX。打印字符串的 DOS 函数使用 DX,这是最终的!
从您的程序中,我看到您对输入和求和所做的任何操作都不会对您之后显示的字符串产生任何影响。
如果你的汇编器mov num,al改变了'num'地址处的内容,那么该行inc num;nex element肯定不会前进到下一个元素,而是将内容增加1。同样适用于sub num,4;go to first position

于 2014-08-03T14:31:50.543 回答