检测点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:}
push的时候是从大到小的,而你想把1000的逆序复制到2000,那就只要顺序的把1000的数据push进去2000:10 - - - -2000:0了
push操作时,是先sp = sp - 2,然后再mov 楼主不用知道push指令是怎么来的 ,只用知道 push 指令是 将 push 后面的 地址内容 压入栈 、 push指令的意思就是:SP=SP+2;MOV DS:,SS: 无回帖,不论坛,这才是人道。
酒喝晕了,加鱼C汇编群,找#917,明天我讲到你清楚哈 然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
=====================================
估计是压进去的,通过PUSH,把数据放入栈中。。ss:=2000h,sp:=*** s0512 发表于 2013-5-26 14:54 static/image/common/back.gif
然后是不是后面的这些数据是怎么从10000H给移动到20000H里面去的?
==================================== ...
{:5_109:}学到后面了,才知道这样写是错误的···· push是sp=sp-2,再放入数据。pop是先提取数据,再sp=sp+2。。记住这个即可。 经过深思熟虑 我发现 这个倒置数据最本质的想法
第一题 把左边的数据列 当做数据段 右边的数据列当做栈段 根据栈的原则 先进后出 直接push操作 就是倒置
第二题 把左边的数据列当做栈段 右边的数据列当做数据段 把栈中的数据Pop出来也是可以倒置数据列的
push pop 后边的内存单元里的数据都是数据段中的 第二题 我就犯迷糊了。还有栈指针sp永远指向栈顶的数据(空栈除外)。 学习学习再学习
页:
[1]