64位汇编语言使用数组计算三位数的和

extern printf;
section    .text
global main;
main: 
  push rbp;
  mov rbp,rsp;
  push rbx;
  push rsi;
  push rdi;   
  mov  rax,3;
  mov  rbx,0;
  mov  rcx,x;
addNumber:  add  rbx, [rcx];
  add  rcx,8;
  dec  rax;
  jnz  addNumber;
showing:
  mov [sum],rbx;
  mov rdi,stringShowing;
  mov rsi,[sum];
  call printf
  add rsp,8;
  pop rdi;
  pop rsi;
  pop rbx;
  mov rsp,rbp;
  pop rbp;
  ret;
section    .data
global x
x:
  dq  2
  dq  4
  dq  3
sum: 
  dq  0
stringShowing db "%d",10,0;

把上边的代码保存到sumAndPrint86.asm文件中,nasm -f elf64 -g -F dwarf sumAndPrintX64.asm -o sumAndPrintX64.o进行汇编,gcc -o sumAndPrintX64 sumAndPrintX64.o进行链接,./sumAndPrintX64进行执行。
在这里插入图片描述
jnz addNumber; jnz,是“jump if not zero, or not equal”的缩写,这个指令会判断rflags中零标志。若是为不为零的话,则跳转到addNumber标号处;若是为零就会执行这个指令下边的指令。
此文章为3月Day 18学习笔记,内容来源于极客时间《操作系统实战 45 讲》。

你可能感兴趣的:(linux)