鱼C论坛

 找回密码
 立即注册
查看: 1688|回复: 11

新人求助汇编栈的问题!

[复制链接]
发表于 2014-2-27 12:27:53 | 显示全部楼层 |阅读模式
4鱼币



1.单纯入栈中的数据,不用pop,可以用其他方法读取里面的数据么?
2.如何查看栈中的数据?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-27 13:39:16 | 显示全部楼层
本帖最后由 swsm 于 2014-2-27 14:09 编辑

     
  1. assume cs:code
  2. stack segment        
  3.     db 16 dup (0)
  4. stack ends            ;栈段
  5. code segment
  6.     start:
  7.         mov ax,stack   
  8.         mov ss,ax
  9.         mov sp,16    ;设置栈段的长度
  10.         
  11.         mov ax,0ffffh    ;先准备测试数据放ax
  12.         push ax            ;将ax放进栈里
  13.         mov bx,0        ;准备bx先将bx置0
  14.         mov bp,sp        ;使用寄存器间接寻址要准备bp即将sp栈指针给bp
  15.         mov bx,ss:[bp]    ;获得栈顶的元素放bx
  16.         
  17.         pop dx            ;传统的pop指令获得栈顶数据放dx
  18.                         
  19.                         ;这样bx为不用pop指令或得栈顶数据
  20.                         ;dx为pop指令获得的栈顶数据
  21.                         ;ax为放进栈顶的数据
  22.         mov ax,4c00h
  23.         int 21h
  24. code ends
  25.     end start

复制代码

;程序可以达到目的,楼主看看,有问题,再交流。


        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-27 17:04:20 | 显示全部楼层
:lol:帮顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-27 17:13:31 | 显示全部楼层
我顶一下:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-27 17:37:02 | 显示全部楼层
本帖最后由 oggplay 于 2014-2-27 18:58 编辑

用esp或者ebp间接寻址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-28 09:00:01 | 显示全部楼层
帮顶一下:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-28 09:14:23 From FishC Mobile | 显示全部楼层
栈不是一段独立的内存段   其实和平时的内存段是一体的   所以知道他的地址就可以查看他
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-28 18:34:37 | 显示全部楼层
栈也是一块普通的内存区域,所以可以用访问内存的方式访问栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-1 09:45:05 | 显示全部楼层
呵呵,C语言就是这样做的。
你可以把 BP指向栈顶。
这样读取:
mov ax,[bp-2]
mov cx,[bp-4]
栈只是一种读取方式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-3 22:06:36 | 显示全部楼层
知道栈的内存地址,然后就可以访问里面的数据了么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-8 11:42:42 | 显示全部楼层

难道就是用单步跟踪查看他的内存地址,然后进行寻址取值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-8 11:44:39 | 显示全部楼层
无名侠 发表于 2014-3-1 09:45
呵呵,C语言就是这样做的。
你可以把 BP指向栈顶。
这样读取:

你的意思是把他复制出来!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-10 11:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表