可以把两个数分别压入两个栈吗

chimenghuanzhe 2016-08-22 11:00:49
用汇编语言,我想把一个数组a[10]压入第一个栈stack1,想把b[9]压入第二个栈stack2,然后分别从两个栈中弹出一个数进行计算。
问题是,第一如何申请两个不同的栈。第二,怎么把这两个数组压入两个栈。我记得入栈的语句就是push ax;啊,如果这样只是把两个数组压入了同一个栈啊。
...全文
1295 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2016-11-10
  • 打赏
  • 举报
回复
自己定义栈吧 push 和pop 也自己写,cpu的栈一般只一个地址。
Dozemin 2016-11-05
  • 打赏
  • 举报
回复
如果要用两个不同堆栈,就需要使用栈切换技术,同时,需要自己管理栈的内存分配了,系统不提供。 栈切换就是更改(R/E)SP的值而已。
chimenghuanzhe 2016-09-25
  • 打赏
  • 举报
回复
引用 4 楼 Dozemin 的回复:
为什么要压入栈? int a[10]; int b[10]; lea esi, a lea edi, b sub edi, esi mov ecx, 10 xxxx: loadsd sub [edi+esi+4], eax rep xxxx // 然后操作不行么? 这段代码等价于高级语言 for(int i = 0; i < 10; i++) { a[i] -= b[i] }; 如果非要压栈,就需要更改(E)SP操作, 这年头还用汇编写代码??
没办法,为了追求速度,尽可能的快点。再改进算法的同时,运算部分尽量的用汇编计算。一开始老师逼着我用汇编我还不理解,但是,现在我明白了,虽然不知道用汇编会不会加快,但是纯C语言的会导致计算2天还没算完呢。所以现在,汇编是必要的了
Dozemin 2016-09-11
  • 打赏
  • 举报
回复
为什么要压入栈? int a[10]; int b[10]; lea esi, a lea edi, b sub edi, esi mov ecx, 10 xxxx: loadsd sub [edi+esi+4], eax rep xxxx // 然后操作不行么? 这段代码等价于高级语言 for(int i = 0; i < 10; i++) { a[i] -= b[i] }; 如果非要压栈,就需要更改(E)SP操作, 这年头还用汇编写代码??
用户 昵称 2016-09-08
  • 打赏
  • 举报
回复
可以的,以前写程序,什么代码段,数据段,都可以混用,极端情况下,代码段都当堆栈用。
坐在窗户边 2016-09-02
  • 打赏
  • 举报
回复
push 完第一个 记录下堆栈指针,改变堆栈指针(sp)到你想压栈的位置,push第二个
zara 2016-08-22
  • 打赏
  • 举报
回复
数据结构里栈的使用,和汇编里的堆栈,不是完全一致的,数据结构里的更多的是使用的堆栈的先进后出这么个特性,往往并不使用 cpu 里的 ss:sp 来指向它,而是由自己定义的指针指定;需要多少个这样的栈,可以分配多少的这样的空间,使用多少个自己的指针分别指向它们,压栈、出栈操作由自己的函数来实现。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧