计算出数组元素的和,并存入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