GLOBAL start
SECTION .text
start:
mov rdx, output; 把字符串基地址存入rdx
mov r8, 1; 初始化第一行的长度为1
mov r9, 0;用于存储当前这一行已经打印了几个*了
line:
mov byte [rdx], '*'; 写一个*
inc rdx ; 往后偏移一个
inc r9 ; r9 增加一个
cmp r9, r8; 判断一下*个数是不是小于行号
jne line; 否则继续写
lineDone:
mov byte [rdx], 10; 写一个换行符
inc rdx; rdx向后偏移一个
inc r8; r8行号增加一个
mov r9, 0 ;初始化当前行写的*个数为0
cmp r8, maxlines ;检查是不是达到了最大行数
jng line; 如果是就跳出,否则跳到line位置
done:
mov rax, 0x02000004; rax里面存放写函数地址
mov rdi, 1; file handle 1 is stdout rdi存放参数,1表示stdout
mov rsi, output; rsi 存放字符串参数
mov rdx, dataSize; rdx传递字符串长度
syscall ;调用系统调用 int 60h
mov rax, 0x2000001; exit
system ;call for exit
xor rdi, rdi
syscall
SECTION .bss 定义bss段
maxlines equ 8
dataSize equ 44
output: resb dataSize