鱼C论坛

 找回密码
 立即注册
查看: 2042|回复: 9

检测点3.2分析

[复制链接]
发表于 2013-5-25 19:25:16 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 s0512 于 2013-5-27 22:44 编辑

(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。

1.jpg
图3.17 逆序复制示意图




mov ax, 1000H
mov ds, ax
mov ax, 2000H  
mov ss, ax  
mov sp, 0010H  
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]

一直弄不明白这个是怎么个运算的,数据混合在一起真不好弄啊!!
================
mov ax, 1000H
mov ds, ax

第一步,得到DS的值:
DS=1000
=================
mov ax, 2000H  
mov ss, ax  
mov sp, 0010H  

第二步空的栈的顶部
======================
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]

然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
=====================================
我迷惑呢
然后我看了下前面的章节(3.9 push 丶pop指令 )
mov ax, 1000H
mov ds, ax

push [0]
这样就可以压栈
然后怎么去的20000H的列表呢····
我迷惑啊迷惑!!!网上搜啊搜的也没找到
仔细在那么一想···麻麻的,上面第二步,不有那个什么空堆栈的地址??难道就····
把10000H的字取出来在放到20000H去?姑且这么想吧····
混乱混乱!!!


(2) 补全下面的程序,使其可以将 10000H~1000FH 中的8个字,逆序复制到20000H~2000FH中。
mov ax, 2000H
mov ds, ax
mov ax, 1000H  
mov ss, ax  
mov sp, 0000H  
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
然后这里也跟上题一样的分析
========================
mov ax, 2000H
mov ds, ax

得到DS的值
DS=2000
==========================
mov ax, 1000H  
mov ss, ax  
mov sp, 0000H  

空栈的顶部
==========================
因为是POP嘛
所以要从上往下?
我也不知道什么分析了······
不明白!!
这种数据类型公用的,应该怎么个运算流程呢?
求大神大牛,指导,给个思路!!
小朋友不才,问题实在太多了

最佳答案

查看完整内容

push的时候是从大到小的,而你想把1000的逆序复制到2000,那就只要顺序的把1000的数据push进去2000:10 - - - -2000:0了 push操作时,是先sp = sp - 2,然后再mov
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-25 19:25:17 | 显示全部楼层
push的时候是从大到小的,而你想把1000的逆序复制到2000,那就只要顺序的把1000的数据push进去2000:10 - - - -2000:0了

push操作时,是先sp = sp - 2,然后再mov
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 00:07:02 | 显示全部楼层
楼主不用知道push指令是怎么来的 ,只用知道 push 指令是 将 push 后面的 地址内容 压入栈 、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 00:32:41 | 显示全部楼层
push指令的意思就是:SP=SP+2;MOV DS:[BX],SS:[SP]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 00:52:19 | 显示全部楼层
无回帖,不论坛,这才是人道。
酒喝晕了,加鱼C汇编群,找#917,明天我讲到你清楚哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 14:54:15 | 显示全部楼层
然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
=====================================
估计是压进去的,通过PUSH,把数据放入栈中。。ss:=2000h,sp:=***
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-27 20:56:18 | 显示全部楼层

学到后面了,才知道这样写是错误的····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-26 15:23:10 | 显示全部楼层
push是sp=sp-2,再放入数据。pop是先提取数据,再sp=sp+2。。记住这个即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 22:55:35 | 显示全部楼层
经过深思熟虑 我发现 这个倒置数据最本质的想法
第一题 把左边的数据列 当做数据段 右边的数据列当做栈段 根据栈的原则 先进后出 直接push操作 就是倒置
第二题 把左边的数据列当做栈段 右边的数据列当做数据段 把栈中的数据Pop出来也是可以倒置数据列的
push pop 后边的内存单元里的数据都是数据段中的 第二题 我就犯迷糊了。还有栈指针sp永远指向栈顶的数据(空栈除外)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-25 21:09:59 | 显示全部楼层
学习学习再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 18:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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