IT工作室 发表于 2013-2-27 22:18:50

第三章 监测点3.2填空题求解

检测点3.2(2)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。mov ax,2000Hmov ds,ax —————————————————— pop pop pop pop pop pop pop pop 这个空我第三个不知道怎么写 希望前辈能给详细的讲下 解题过程 谢谢

风轻云淡_1/10 发表于 2013-2-27 22:18:51

本帖最后由 风轻云淡_1/10 于 2013-3-1 10:32 编辑

1.设置栈的段地址为1000H
2.将栈顶指向10000H,那么偏移地址就是0,
所以:设置栈段地址需要间接赋值,需要两行,设置栈顶需要一行
mov ax,1000H
mov ss,ax                设置栈段地址
mov sp,0H            栈顶指向数据顶端,

L]V[G 发表于 2013-2-28 08:30:51

本帖最后由 L]V

答案: mov ax,1000H
          mov ss,ax          ;把1000H设为栈段
          mov sp,0         ;SS:SP指向内存单元 1000H:0

pop ,其中 的默认段地址为ds,即2000H
pop ,意思是把此时SS:SP指向的字节内存单元中的值(23)和比它高一位的字节的内存单元中的值(01)放到ds:中(即地址 2000H:000E); 然后IP = IP + 2,   
            
主要:push 和pop指令处理的数据的大小都是字,即2个字节,这是汇编语言的规定

执行完 pop 之后,ss:sp指向的内存单元是 1000H:0002    ;然后执行下一条指令 pop,原理同上      

我本无罪 发表于 2013-2-28 23:05:14

本人新手    你那个既然用到POP指令势必得用到站 而且题干说吧1000的字逆序存放到 2000的段中 而且2000已经为数据段了 所以1000为站段MOV AX,1000H
MOV SS,AX
MOV SP,16

我本无罪 发表于 2013-2-28 23:06:55

看了 楼上自行残碎 sp 0

缓冲…… 发表于 2013-3-17 09:37:43

答案: mov ax,1000H
          mov ss,ax          ;把1000H设为栈段
          mov sp,0         ;SS:SP指向内存单元 1000H:0

中的mov sp,0是不是应该是 mov sp,这样的

zhuzhuwqa 发表于 2013-7-29 22:54:56

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