计算出数组元素的和,并存入sum变量中。
首先在数据段定义数组内容x
、数组长度len
、求和结果sum
,均使用16位双字节dw
类型。
x dw 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h
len dw 08h
sum dw 00h
我们将使用循环进行累加求和,其中cx
保存循环计次,si
指向当前数组元素、ax
作为临时累加和。
初始化它们,将x
数组起始地址移入si
,再使用xor
位异或指令清零寄存器。
lea si, x ; 数组元素指针
xor cx, cx ; 清零计数
xor ax, ax ; 清零和
随后进入循环体,使用add
累加当前元素[si]
至ax
。
将si
指针向后移动2个字节,因为x
内的元素是双字节dw
类型。
自增循环计数器cx
。
使用cmp
进行比较,如果当前循环次数cx
不等于数组长度len
,则继续循环。
_loop:
add ax, [si]
add si, 2
inc cx
cmp cx, len ; 循环判断
jnz _loop
data segment
x dw 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h
len dw 08h ; 数组长度
sum dw 00h
data ends
stack segment stack
dw 512 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax, data
mov ds, ax
lea si, x ; 数组元素指针
xor cx, cx ; 清零计数
xor ax, ax ; 清零和
_loop:
add ax, [si] ; 求和
add si, 2 ; 向后移动两个字节,因为数据段的 x 是双字节 dw 类型
inc cx ; 循环计数
cmp cx, len ; 循环判断
jnz _loop
mov sum, ax ; 计算结果存入 sum 中
mov ax, 4c00h ; 退出
int 21h
code ends
end start