gpt4 book ai didi

assembly - 插入全栈 8086 组件

转载 作者:行者123 更新时间:2023-12-02 21:09:00 25 4
gpt4 key购买 nike

PUSH 到完整堆栈的物理结果是什么令人惊讶的是,当只为堆栈分配 2 个字节 [1 个字] 并 PUSH 三个字,然后将它们弹出到不同的寄存器时,它完成时没有任何错误当 PUSHing 第二个项目时,我能对堆栈内容说些什么

这是堆栈段定义:

Stack_segment_name segment para stack
db 2 dup(0) ;define your stack segment
Stack_segment_name ends

代码如下:

Code_segment_name segment
Main_prog PROC FAR

assume SS:Stack_segment_name,CS:Code_segment_name,DS:Data_segment_name,ES:Data_segment_name

MOV AX,Data_segment_name ; load the starting address of the data
MOV DS,AX ; segment into DS reg.

MOV AX,1715H
MOV BX,1518H
MOV CX,2944H
PUSH AX
PUSH BX
PUSH CX
POP SI
POP DI
POP DX



MOV AH,4CH
INT 21H


Main_prog endp
Code_segment_name ends
end Main_prog

执行代码后:

SI=2944H
DI=1518H
DX=1715H

最佳答案

您在程序中声明的堆栈与 CPU 如何看待堆栈不同。

在 8086 上,CPU 将从线性地址 SS*16 开始的 64KB 内存块视为堆栈。

当您声明一个只有 2 个字节的堆栈时,第一个 push 到达您预期的位置,但此后堆栈指针 SP 为 0。因此下一个 push 减去了 2 (给出 0xFFFE)并将其操作数存储在内存中。第三次推送也是如此。由于没有内存冲突,一切看起来都很好......

关于assembly - 插入全栈 8086 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com