在以下代码中
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会导致输出错误?
答案 0 :(得分:0)
您不应随意交换AX for DX。用于打印字符串的DOS函数使用DX和那个最终的!
从你的程序中我看到,输入和求和所做的任何事情都不会影响你之后显示的字符串
如果您的汇编程序mov num,al
更改了' num'地址的内容。然后,行inc num;nex element
肯定不会前进到下一个元素,而是将内容增加1.这同样适用于sub num,4;go to first position