x86 linux 程序集中是否有已经实现的堆栈?

问题描述 投票:0回答:1

我正在 Linux 上使用

Nasm 
Debian 12
)学习 x86 汇编。 我已经知道什么是堆栈,所以我想当我们用汇编编码时,我们自己实现它。 但我看到了像push和pop这样的指令,它们是用于堆栈操作的。那么是否有一个已经实现并可以使用的堆栈?如果是,那么它是如何使用的以及我们如何使用它。我在 asm 中创建了一个
strlen
函数

section .data
hello db "Hello World!",10,0

section .text
global _start

_start:
    mov rax,hello
    call strlen
    mov rax,1
    mov rdi,1
    mov rsi,hello
    syscall
    mov rax,60
    mov rdi,0
    syscall

strlen:
    mov rdx,0

strlen_loop:
    cmp byte[rax],0
    jz strlen_finished
    inc rdx
    inc rax
    jmp strlen_loop
strlen_finished:
    ret

这会计算字符串的长度并打印它。我可以使用

push rax
rax
的值放入堆栈中,这样
rax
中已有的值就不会丢失。那么我们只以这种方式使用这个已经实现的堆栈,或者处理器是否也以其他方式使用这个堆栈?这个堆栈和我们自己创建的堆栈有什么区别?

我期望我们自己必须实现堆栈来跟踪函数的局部变量和东西。

assembly x86 stack nasm
1个回答
0
投票

操作系统创建一个进程来运行应用程序。  在该进程中,最初有一个线程,在处理器运行该进程中的第一条指令之前,该线程具有工作堆栈和堆栈指针寄存器。  之后,应用程序可以创建更多的线程,操作系统也会为其提供工作堆栈和寄存器。

以及我们将自己创建的堆栈? 我期望我们自己必须实现堆栈来跟踪函数的局部变量和其他东西。

我们自己不创建堆栈,我们只是使用操作系统给定的堆栈来堆栈事物 - 应用程序对事物进行“堆栈”,但它们通常不会创建/准备这些堆栈以进行堆栈。

© www.soinside.com 2019 - 2024. All rights reserved.