assembly 如何更改程序集中的保留字节数?

ukdjmx9f  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(238)

我刚刚开始学习汇编,我想知道如何改变保留字节的数量,如果可能的话。
我创建了以下代码,它将根据底部的max变量创建一个长度递减的直角三角形。然而,为了确保不保留多余的字节,我想计算它(我相信在calculateBytes中是有效的),然后保留这些字节。
如果这是不可能的,请解释。如果没有,是否有其他方法可以帮助实现这一目标?

bits 64

global  _start

section .text
    _start:     
        mov        rdx, output
        mov        r8, max
        mov        r9, r8
        mov        r10, r8
        mov        r11, r8

    calculateBytes:
        add        r11, r10
        dec        r10
        jnz        calculateBytes

    line:
        mov        byte [rdx], '*'
        inc        rdx
        dec        r9
        
        jnz        line

    lineDone:
        mov        byte [rdx], 10
        inc        rdx
        dec        r8
        mov        r9, r8
        jnz        line
        
    done:
        mov        rax, 1 ; initiate writing
        mov        rdi, 1 ; to stdout
        mov        rsi, output; use output
        mov        rdx, size ; with this size
        syscall
        mov        rax, 60
        xor        rdi, rdi
        syscall

section .bss
    size      equ     1000
    output    resb    size
    max       equ     30
j2qf4p5b

j2qf4p5b1#

calculateBytes:
    add        r11, r8
    dec        r10
    jnz        calculateBytes

这产生了max * (max + 1),这太多了。
你想要的是(第一个数字是星号,第二个数字是换行符):

(30 + 1) + (29 + 1) + (28 + 1) ... (2 + 1) + (1 + 1)

在装配中:

calculateBytes:
    add        r11, r10
    dec        r10
    jnz        calculateBytes

    ...

    mov        rdx, r11
    syscall

相关问题