(1)写程序,对给出的8个数,将相邻的数求和(最后写第一个数与最后一个数的和),并把结果写在其后。在下面的示例中,求和的结果为3 5 7 9 11 13 15 9。
datasg segment
dw 1, 2, 3, 4, 5, 6, 7, 8
dw 0,0,0,0,0,0,0,0
datasg ends
提示1:相邻的两数,若前一数用[si]指示,相邻的后面一数则为[si+2]
提示2:前7个和数可以用统一的规则做出,最后一个和数,呃,要回头去找,不妨特殊处理。
源代码:
assume cs:code ,ds:data
data segment
dw 1,2,3,4,5,6,7,8
dw 0,0,0,0,0,0,0,0
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,7
mov dx,0
mov si,0
mov di,0
s: mov dx,[bx+si]
add dx,[bx+si+2]
mov [bx+si+16],dx
add si,2
loop s
mov di,[bx+14]
add di,[bx]
mov [bx+30],di
mov ax,4c00h
int 21h
code ends
end start
(2)若要求将结果写在提供源数据的位置上,而不是在随后的空间中呢?
assume cs:code ,ds:data
data segment
dw 1,2,3,4,5,6,7,8
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,0
mov cx,7
mov si,0
mov di,0
mov dx,[bx+si]
s: mov ax,[bx+si]
add ax,[bx+si+2]
mov [bx+si],ax
add si,2
loop s
mov di,[bx+si]
add di,dx
mov [bx+si],di
mov ax,4c00h
int 21h
code ends
end start