【运行环境】Linux 64bit操作系统,x86_64指令集。
在一篇入门的基础上,我们来数组求和。
%macro write_string 2
mov eax, 4
mov ebx, 1
mov ecx, %1
mov edx, %2
int 80h
%endmacro
section .data
array db 1,2,3,0,0,0
len db $-array
theSum db 0x0
msg1 db 'Hello, programmers!',0xA,0xD
len1 equ $ - msg1
section .text
global _start
_start:
;mov esi,array
;mov ecx,len
write_string msg1, len1
mov ebx,0
mov eax,6
mov ecx,array
L1:
add ebx,[ecx]
add ecx,1
dec eax
jnz L1
add ebx,'0'
mov [theSum],ebx
;mov theSum,eax
write_string theSum,1
mov eax,0xA
mov [theSum],eax
write_string theSum,1
mov eax,1
xor ebx,ebx
int 0x80
一、说明
本文中将输出字符串定义成了一个宏,在汇编代码中就可以直接使用,跟C语言中使用函数的用法一样,不需要invoke来显示调用。
数组array中的元素为1,2,3,0,0,0共计6个元素。
二、循环求和
mov ebx,0
mov eax,6
mov ecx,array
L1:
add ebx,[ecx]
add ecx,1
dec eax
jnz L1
三、打印结果
打印输出结果并换行,换行也是打印,只是打印0xA。
add ebx,'0'
mov [theSum],ebx
write_string theSum,1
mov eax,0xA
mov [theSum],eax
write_string theSum,1