在 Keil 启动文件中声明 STACK 段时,问为什么要保留 1 个字节的空间?

发布于 科技 2024-06-29
15个回答
  1. 匿名用户2024-01-30

    防止溢出,同时确保堆栈中至少有一个空间。

  2. 匿名用户2024-01-29

    正如你在下面看到的。

    --类型---基址---长度---定位方式---段名称。

    --数据空间--

    --寄存器---0000h---0008h---绝对---"在小组中工作"

    --寄存器---0008h --0008h---绝对---"第2工作组。

    --0010h---0010h---三组或四组***

    --i 区域中的位区域,位于 main 中。

    --一个字节只用1位,其他7位是空闲的***

    --data---0021h---002fh---unit -- 局部变量占用(函数中变量占用的RAM)

    --data---0050h---002bh---unit---00-7fh 的 RAM 使用情况 在主全局变量中。

    --idata---007bh---0022h---unit---80 到 main 中的 RAM 使用情况,全局变量。

    --idata---009dh---0001h---unit --stack 这是堆栈底部的位置。

    大约*m51 文件可以在工作文件夹中打开,也可以双击项目窗口中的项目名称将其打开)。

    区域 D 00-7f = 区域 I 00-7F 可以直接或间接解决。

    D区80-8F:这是SFT区,只能直接解决。

    Zone 80-8F:是一个通用的数据内存,只能间接寻址。

    00-1f 的 32 个字节是 I 和 D 区域,它们是四个 8 字节寄存器工作组。 C51只使用前16组,即前两组,使用具体的组,哪一组由PSW的RS位的状态决定。

    mov sp,#?stack-1

    sp = 9dh-1 = 9c

    这里有一个问题 9c:33 9b:44,这里栈的顶部是 3344h 的 pc 指针,也是全局变量的最后两个字节,在进入 mian 函数时,这个 3344h 不会用来给 pc 赋值,例如,从 main 跳转到 sub, 当前 pc = c:0x68e,则会添加一个堆栈层,sp = 9eh

    9e = 06h,9d = 8e;

    当潜艇返回时,PC 从潜艇的位置 C:9adh 返回到 68e。

  3. 匿名用户2024-01-28

    编译器会根据您在程序中使用的内存量自动设置堆栈大小。

  4. 匿名用户2024-01-27

    安装的时候是不是没有破解,如果不破解,只能用一会儿。

  5. 匿名用户2024-01-26

    让我们重新安装它! 安装时断开网络。

  6. 匿名用户2024-01-25

    应该是安装的软件缺少文件,重新安装软件。

  7. 匿名用户2024-01-24

    您使用什么操作系统? 配置环境是什么?

  8. 匿名用户2024-01-23

    在顶部附近的启动 stm32f10x 中,有一个可以改写的段落。

    stack_size equ 0x00000200

  9. 匿名用户2024-01-22

    1 系统重置默认 sp = 0x07

    2 在编写 C51 程序时,有一个启动文件,上面写着 mov sp, ?stack-1

    这句话根据静态内存使用情况将 sp 定位到所有全局或局部变量的末尾。

    3 ?stack 是一个数据段的段名,因为这个段名很特殊,所以这个段永远是连接器的最后一个位置,也就是说,在确定了你所有变量的存储地址之后,这个段的存储就自然而然地确定了堆栈也在最后,因为先加SP再用,所以有

    stack-1 没有问题,地址?stack-1 包含有关某个变量的信息。

    4 当第一次函数调用发生时,16 位地址将有 ?stack 和 ?stack+1,其中 sp = ?stack+1

  10. 匿名用户2024-01-21

    “我使用的微控制器有 512 字节的空间”。

    即使有额外的SRAM,通常也需要将寄存器设置为打开。 而且,只有 256 字节的模型一般会映射到页面中的空间,需要通过 MOVX 和 @ri 来访问。 所以你可以试试 pdata 方式。

    我不会在我的程序中使用超过 114 字节的变量进行编译。

    应将某些变量分配给内部间接寻址区域,如下所示:

    unsigned char idata ucmyvariable;

  11. 匿名用户2024-01-20

    可以看出你是选择单片机型号是选择51系列还是52系列,也许这里选错了有冲突。 此外,程序中使用了 114 字节的变量? 写编译还是c?

    如果这些变量不经常变化,只是一个数组,就应该放在程序内存中,如果你真的需要用这么多变量,那么你的程序真的很好。 而xdata似乎被定义为片外扩展数据RAM,这应该不是你想用的初衷吧? 我也是初学者,所以让我们多谈谈吧!

  12. 匿名用户2024-01-19

    (1)数据段的位置从0e000h开始,段内定义了5字节数据、3字数据、2个双字数据,字节数据需要从偏移地址0000h开始,字数据从偏移地址0010h开始,双字数据从偏移地址0020h开始。 其定义如下:

    org 0e0000h

    data segment

    org 0000h

    db 5 dup(0)

    org 0010h

    dw 3 dup(0)

    org 0020h

    dd 2 dup(0)

    data ends

    2) 堆栈段定义 100 字节的空间。其定义如下:

    stack segment

    db 100 dup(0)

    stack ends

    3)**段的起始位置给相关段寄存器赋值,在程序结束时可以返回DOS定义,如下所示:

    code segment

    assume cs:code, ds:data, ss:stack

    start:

    mov ax, data

    mov ds, ax

    mov ax, stack

    mov ss, ax

    mov sp, 100

    mov ax, 4c00h

    int 21h

    code ends

    end start

  13. 匿名用户2024-01-18

    主题需求只是汇编语言程序的框架。

    如下:(1)数据段的位置从0e000h开始,段中定义了5字节数据、3字数据、2个双字数据,字节数据需要从偏移地址0000h开始,字数据从偏移地址0010h开始,双字数据从偏移地址0020h开始。 其定义如下:

    org 0e0000h

    data segment

    org 0000h

    db 5 dup(0)

    org 0010h

    dw 3 dup(0)

    org 0020h

    dd 2 dup(0)

    data ends

    2) 堆栈段定义 100 字节的空间。其定义如下:

    stack segment

    db 100 dup(0)

    stack ends

    3)**段的起始位置给相关段寄存器赋值,在程序结束时可以返回DOS定义,如下所示:

    code segment

    assume cs:code, ds:data, ss:stack

    start:

    mov ax, data

    mov ds, ax

    mov ax, stack

    mov ss, ax

    mov sp, 100

    mov ax, 4c00h

    int 21h

    code ends

    end start

  14. 匿名用户2024-01-17

    在楼上,这是正确的事情。

    如果要做单片机,还是要了解它的存储结构,至少要知道数据idata xdata所指的存储区域。

    idata 指向的片上 RAM 的大小范围为 256 字节,因此您可以在 idata 段中定义一个数组,并且不能超过 256 字节。

    XData 指向片外 RAM,其大小范围为 64KB,您可以在该段内定义所需的大型阵列。

  15. 匿名用户2024-01-16

    将其缓存到 xdata 并尝试一下。

    unsigned char xdata huancun[320];

相关回答
18个回答2024-06-29

您可以不使用上述配方师的配方师。 直接在行中输入上面的公式并画一个大括号。 至于下标和大于小于符号,如果你不知道如何输入,你可以在我的空间找到它。 以下是输入大括号的方法: >>>More

15个回答2024-06-29

记忆棒,靠近CPU,两端都有夹子,拔下后使用橡皮擦。

17个回答2024-06-29

假声教导消除平衡,抓住并保持清朝的封锁。

6个回答2024-06-29

需要安装通用的松河状态解码器来拍摄巡演。 在勾沟**中,它不大,它很小。 Wild Shadow 根本不需要更改会声会影的版本。 我以前遇到过这个问题,所以最好安装它。

5个回答2024-06-29

1.最容易引起此问题的情况:杀毒软件,很多时候杀毒软件会把系统的正常文件当成病毒(因为很多病毒经常把自己伪装成普通文件,在这种情况下,个别不完善的病毒库会让杀毒软件在分析病毒时无法正确区分病毒和普通文件)。 >>>More