stjas 发表于 2013-5-25 19:25:16

检测点3.2分析

本帖最后由 s0512 于 2013-5-27 22:44 编辑

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


图3.17 逆序复制示意图




mov ax, 1000H
mov ds, ax
mov ax, 2000H
mov ss, ax
mov sp, 0010H
push
push
push
push
push
push
push
push

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

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

第二步空的栈的顶部
======================
push
push
push
push
push
push
push
push

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

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


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

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

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

冰封丶茶 发表于 2013-5-25 19:25:17

push的时候是从大到小的,而你想把1000的逆序复制到2000,那就只要顺序的把1000的数据push进去2000:10 - - - -2000:0了

push操作时,是先sp = sp - 2,然后再mov

a328166443 发表于 2013-5-26 00:07:02

楼主不用知道push指令是怎么来的 ,只用知道 push 指令是 将 push 后面的 地址内容 压入栈 、

冷峻花开 发表于 2013-5-26 00:32:41

push指令的意思就是:SP=SP+2;MOV DS:,SS:

s0512 发表于 2013-5-26 00:52:19

无回帖,不论坛,这才是人道。
酒喝晕了,加鱼C汇编群,找#917,明天我讲到你清楚哈

s0512 发表于 2013-5-26 14:54:15

然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
=====================================
估计是压进去的,通过PUSH,把数据放入栈中。。ss:=2000h,sp:=***

stjas 发表于 2013-5-27 20:56:18

s0512 发表于 2013-5-26 14:54 static/image/common/back.gif
然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
==================================== ...

{:5_109:}学到后面了,才知道这样写是错误的····

汇编小白菜 发表于 2013-6-26 15:23:10

push是sp=sp-2,再放入数据。pop是先提取数据,再sp=sp+2。。记住这个即可。

zhuzhuwqa 发表于 2013-7-29 22:55:35

经过深思熟虑 我发现 这个倒置数据最本质的想法
第一题 把左边的数据列 当做数据段 右边的数据列当做栈段 根据栈的原则 先进后出 直接push操作 就是倒置
第二题 把左边的数据列当做栈段 右边的数据列当做数据段 把栈中的数据Pop出来也是可以倒置数据列的
push pop 后边的内存单元里的数据都是数据段中的 第二题 我就犯迷糊了。还有栈指针sp永远指向栈顶的数据(空栈除外)。

菜鸟一个a 发表于 2013-12-25 21:09:59

学习学习再学习
页: [1]
查看完整版本: 检测点3.2分析