目录
数组是在内存中连续的一串变量。我这样说,可能你已经想到的大致的定义了:
NUMBERS DW 34, 45, 56, 67, 75, 89
现在我们就定义了一个Number数组,里面存放的连续的六个数字:34, 45, 56, 67, 75, 89。回忆我们处理字符串的方式,拿到第N个字符的位置是取出偏移地址量N - 1个元素大小
mov ax, [NUMBERS + 2]
取出了第三个元素56来。就是这个意思。
当然,有人可能希望写出
int all_zero[8] = {0}; // 全部为0
的等效代码,可以定义:
all_zero DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
太麻烦了,其实这样:
all_zero DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0
或者使用TIMES指令:
all_zero TIMES 8 DW 0
是比较常见的定义数组的方式。
实践:相加连续的数
内存中设定连续的数字1,2,3,对他们做相加而且打印出来
charliechen@Charliechen:~/demo/demo12$ ./result 6
效果如上即可!不需要提示!
; --------------------------------------------------
; Program written in 10.20 2024
; Author: Charlie chen
; Functionality: Add Continious number
; --------------------------------------------------
section .data
SOURCE db 1, 2, 3
SUM db 0
section .text
global _start
_start:
xor eax, eax
mov ecx, 3
do_add:
add eax, [SOURCE + ecx - 1]
loop do_add ; loop promised the auto decline of cx
or al, 0x30
mov [SUM], al
mov edx, 1
mov ecx, SUM
mov ebx, 1
mov eax, 4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80