小阿哥 发表于 2018-9-23 18:18:07

关于检测点3.2一个纠结的问题,已经迷糊了


(1)补全下面的程序,使其可以将10000H----1000FH中的8个字,逆序复制到20000H---2000FH中。
mov ax,1000H
mov ds,ax
mov ax,2000H
mov ss,ax
mov sp,10
push
push

push
push
push
push
push
第一题我的理解是,将20000H---2000FH看成一个栈段,push ,是将数据1000:0处数据0123,推入到20000H---2000FH的2000:E处
push是将数据1000:2处数据2266,推入到20000H---2000FH的2000:C处。剩下的以此类推,完成逆序复制

我觉得第二题的题目是不是错误了。我觉得应该是补全下面的程序,使其可以将20000H----2000FH中的8个字,逆序复制到10000---1000FH中。
我的代码是 mov ax,2000H
                   MOV ds,ax
                   mov ax,1000H
                   mov ss,ax
                   mov sp,10
                  POP
                  POP
                  POP
                  POP
                  POP
                     POP
                     POP
                     POP
第二题我的理解是将10000H---1000FH看成一个栈段,POP,是将数据2000:0处数据1133,推入到10000H---1000FH的1000:E处
以上就是我的理解,但是,我总感觉我这种想法是错的,而且越想越糊涂,有没有大神帮我指正,详细的帮我讲解一下

StoneDo 发表于 2018-10-27 23:07:20

我的理解,书里应该是第二个题目写错了,应该就是你说的从2000放到1000,还有就是第二个因为是要Pop出栈的存储数据,所以sp 应该是 0

bai111111 发表于 2021-1-11 16:02:56

pop 「e」是将栈sp指针出的数据 存入数据ds段 2000eH处,对吗

yixinwenxin 发表于 2021-1-19 23:00:26

[……]偏移地址
段前缀默认ds

lz5215560 发表于 2021-3-25 19:09:57

mov sp,10 有问题吧
我觉得是 mov sp,0
pop 就是 把 1000:sp sp+1 的数据复制到 2000:e f 之中,然后 sp = sp + 2,即 sp = 2
下一次
pop 1000:2 3 -复制-> 2000:c d , sp += 2, sp = 4
... ...
是这个过程吧,mov sp,10 是不是就有问题?

wuhui12138 发表于 2021-4-7 13:46:13

题目没错

qq113009 发表于 2021-10-10 17:54:00

要注意POP和PUSH命令对SP的转变,PUSH SP=SP-2,POP SP=SP+2,所以第二题SP,0
页: [1]
查看完整版本: 关于检测点3.2一个纠结的问题,已经迷糊了