请教个汇编语言的问题

jy251 2019-09-17 06:04:21
win32 asm 在某个函数中,有个byte数组的指针比如ptr1,首地址存在edi中 操作 add edi,2 //应该是指针右偏移了2byte mov ebx,[eax] mov ebp,edi mov ecx,[eax] 这mov是不是将栈底与这个指针对齐了? 如果是这样的话,那么ebx和ecx是不是同一个数据? 再就是 mov eax,[ffae] add ebp,2 mov ebx,[ffae] ebx是不是数组中,eax偏移了两位后的数据?
...全文
184 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2019-09-19
  • 打赏
  • 举报
回复
ebp 只是在用它来进行函数的参数和局部变量时才起到栈基的意义,其余时候和普通寄存器无异,所以,对 ds:[eax] 的访问没有影响。至于 [ffae] 若是 #4 说的是直接地址(定义在 .data 或 .data? 里),当然也无影响,若是在子程里用 local 定义,通常实际是通过 [ebp-??] 来访问的,ebp 的变化就直接相关了。
jy251 2019-09-19
  • 打赏
  • 举报
回复
引用 7 楼 zara的回复:
ebp 只是在用它来进行函数的参数和局部变量时才起到栈基的意义,其余时候和普通寄存器无异,所以,对 ds:[eax] 的访问没有影响。至于 [ffae] 若是 #4 说的是直接地址(定义在 .data 或 .data? 里),当然也无影响,若是在子程里用 local 定义,通常实际是通过 [ebp-??] 来访问的,ebp 的变化就直接相关了。
好的,谢谢大佬,明白了
zara 2019-09-18
  • 打赏
  • 举报
回复
晕,竟然没看出来罗列的指令和说的问题有什么关系
jy251 2019-09-18
  • 打赏
  • 举报
回复
引用 2 楼 zara的回复:
晕,竟然没看出来罗列的指令和说的问题有什么关系
额。。。 我主要是想问问栈基与ds的取值有没有太大关系
jy251 2019-09-18
  • 打赏
  • 举报
回复
引用 3 楼 早打大打打核战争的回复:
mov ebx,[eax]
mov ecx,[eax]
mov eax,[ffae]
mov ebx,[ffae]
这都是基于DS的访问,和栈没什么关系,虽然win32架构中SS和DS指向同一段,但是段限制不一样
呵呵,大神,我主要是想问问ebp这个栈基如果被修改了,那么[ffae]这同一个取值方式,在ebp被修改前后是否是一样的
jy251 2019-09-18
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay的回复:
ebx和ecx跟栈并没有直接关系吧?它们数据是同样的[eax]指向的内存空间 ebp就是指向ptr1+2 [ffae]是直接寻址的,它是不是就是ptr1呢?你这个前提要说明的,而且ebx寻址跟eax没什么关系吧?
抱歉,没说清楚,我主要是想问ebp作为栈基本指针的寄存器,没有被修改前ds:[eax]的值,是否与mov ebp,edi栈基被修改后的再次取值ds:[eax]相同,期间eax没有任何变化 ffae只是我随便打的一个地址,可以视同直接寻址,其实也就是想问,栈基变化后,ds的取值是否会跟着变化
  • 打赏
  • 举报
回复
mov ebx,[eax]
mov ecx,[eax]
mov eax,[ffae]
mov ebx,[ffae]
这都是基于DS的访问,和栈没什么关系,虽然win32架构中SS和DS指向同一段,但是段限制不一样
铖邑 2019-09-17
  • 打赏
  • 举报
回复
ebx和ecx跟栈并没有直接关系吧?它们数据是同样的[eax]指向的内存空间 ebp就是指向ptr1+2 [ffae]是直接寻址的,它是不是就是ptr1呢?你这个前提要说明的,而且ebx寻址跟eax没什么关系吧?
炎热的夏季已经过去,家乡想必也要开始落叶了。如果我是小学生,让我以《秋》为题目作文,开头一定是“秋天是收获的季节”。是的,经过了春天的骚动,夏季的彷徨,来到了秋。这是新生报到的季节,动物贮藏食物的季节,马上就到十一长假的季节,这个季节更是收获的季节。 我们在播种时,势必首先考虑收成。种庄稼如此,学习语言更是如此。于是,“语言之争”是各个编程论坛必定讨论的话题,很多甚至是“X经”话题。对此,我的观点是:语言没有好坏之分,只有顺手不顺手和你能发挥到什么程度的问题。我们没有必要追求最新,“最先进”的编程方式,只需要学习好力所能及的语言。 VC的无所不能缺点是繁杂,稍有不慎就不知道什么地方出了包;VB常常被人耻笑过于简单,发布之后要带上一个“仓库”;Delphi虽然有快速开发的优势,但却姥姥不疼舅舅不爱的日渐西山…… 其实对于大多数人来说,我们使用什么应该是需求决定而不是语言本身决定需求,比如:我们希望自动根据数据生成表格,没有必要非用Delphi VC 调用 COM ,我们用用VBA就好了。因此,眼中只有那三种基本结构:判断 循环 跳转就差不多了,再高级一点,弄清楚什么是面向对象面向过程,随便一门语言都不会逃出这点东西。 我很佩服俄罗斯的软件,他们就是将语言工具发挥到极致的例子。比如:我在网上搜索到DOS下硬盘速度测试软件,竟然是Pascal编写的。 至于“学习好力所能及的语言”,我的意思是如果你身边有C语言的高手不妨向他请教或者同他切磋;如果你有学好数据结构的理想,不妨买一本Java描述数据结构的图书慢慢啃;如果你有网络数据库+界面的需求不妨考虑一下Delphi…… 因此,我的观点就是“语言没有好坏之分”,关键是你能掌握到什么程度。 当然,如果你能掌握汇编语言,这一切就更不在话下了。我很希望各位能够将学习语言当作乐趣,我们的杂志也将会以如何让读者在阅读中感到快乐感到成就感为目的。
基于AT89C51单片机的抢答器设计 硬件设计: 项目要求: 基于AT89C51单片机设计制作一个抢答器,晶振采用12MHZ,具体设计要求如下: 1.设计一个智力竞赛抢答器,可同时供8名选手参加比赛,编号为1、2、3、4、5、6、7、8,各用一个按钮。 2.给节目主持人设置一个控制开关,用来控制系统的清零和抢答开始 3.抢答器具有所锁存功能、显示功能和声音提示功能。抢答开始后若选手按动抢答按钮,编号立即锁存,并在LED数码管上显示选手编号,同时亮灯伴随声音提示。此外要封锁输入电路,禁止其他选手抢答,最先抢答选手的编号一直保持到主持人将系统请0. 框图设计: 基于AT89C51单片机抢答器由控制核心AT89C51单片机、复位电路、电源电路、选手按键、主持人按键、声音提示和数码显示等部分构成,系统框图如图示 电源电路AT89C52单片机声音提示数码显示复位电路选手按键主持人按键 电源电路 AT89C52 单片机 声音提示 数码显示 复位电路 选手按键 主持人按键 基于AT89C51单片机的抢答器设计全文共8页,当前为第1页。 基于AT89C51单片机的抢答器设计全文共8页,当前为第1页。 基于AT89C51单片机抢答器系统框图 本项目需要通过学习和查阅资料,掌握和了解如下知识: +5V电源原理及设计 单片机复位电路工作原理及设计 单片机晶振电路工作原理及设计 按键电路设计 蜂鸣器驱动电路设计 数码管特性及使用 AT89C51单片机引脚 单片机汇编语言及程序设计 电路原理图: 基于AT89C51单片机的抢答器设计全文共8页,当前为第2页。其工作原理为:电源电路为单片机以及其他模块提供标准5V电源。晶振模块为单片机提供时钟标准,使系统各部分协调工作。复位电路模块为单片机系统提供复位功能。单片机作为主控制器,根据输入信号对系统进行相应的控制。选手按下相应的键,蜂鸣器发出提示音,直到按键释放。数码管显示最先按下选手的编号。选手回答完毕,主持人按下准备按钮,数码管清零,蜂鸣器停止发声,可以进入下一题的抢答。 基于AT89C51单片机的抢答器设计全文共8页,当前为第2页。 基于AT89C51的单片机抢答器元件清单如下: 序号 元件名称 规格 数量 用途 1 51单片机 AT89C51 1个 控制核心 2 晶振 12M立式 1个 晶振电路 3 集成电路 74LS245(8路总线接收/发送器) 1个 驱动 4 八段数码管 一位共阴极 1个 显示电路 5 三极管 9015 1个 蜂鸣器机器驱动电路 6 起振电容 30pF瓷片电容 2个 晶振电路 7 复位电容 10uF/10V 1个 复位电路 8 复位电阻 10K欧 1个 复位电路 限流电阻 500欧 1个 限流电路 9 喇叭 8欧/05W 1个 蜂鸣器及其驱动电路 10 按键 1个 主持人按键 按键 8个 选手按键 11 电源 5V/05A 1个 提供+5V 软件设计: 上电复位后数码管清零,P2.0置高电平,蜂鸣器不发声,循环扫描P3口,看是否有按键按下,如果有按键按下,则转入判断是哪个选手按下按键,并在数码管上显示选手号;P2.0置低电平,蜂鸣器发生,主持人按键按下,系统重新进入主程序继续进行下一轮抢答。程序流程图如下 基于AT89C51单片机的抢答器设计全文共8页,当前为第3页。 基于AT89C51单片机的抢答器设计全文共8页,当前为第3页。 开始初始化有选手按键判断选手显示选手号蜂鸣器发生主持人按键按下程序流程图: 开始 初始化 有选手按键 判断选手 显示选手号 蜂鸣器发生 主持人按键按下 小结: 程序调试参考了好多资料,也请教了同学,最后编程问题都得到了解决 在Protus中画图失败,以至于不能仿真出来结果 理论联系实际,培养自学能力,和动手能力,学会了怎么更好的处理知识和实践相结合的问题 为以后有关单片机只是的学习积累宝贵经验 附: 源程序代码如下: ORG 0000H JMP BEGIN TABLE: ;共阴极数码管显示代码表 基于AT89C51单片机的抢答器设计全文共8页,当前为第4页。 DB 3FH,06H,5BH,4FH,66H, ;01234 基于AT89C51单片机的抢答器设计全文共8页,当前为第4页。 DB 6DH,7DH,07H,7FH ;6789 DELAY:MOV R5,#20 LOOP4:MOV R6,#50H LOOP5:MOV R7,#100H ;延时20*20ms DJNZ R7,$ DJNZ R6,LOOP5 DJNZ R5,LOOP4 RET BEGIN:MOV P2,#0FFH ;P2口置高电平,准备接收信号 MOV R4,#0 MOV A,R4 ;R4位 标志值送A寄存器 AGIN:MOV DPTR,#TABLE MOVC A,@A+DPTR MO

21,458

社区成员

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

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