. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  为什么这样编写达不到我预期的效果呢?????请高手指点。。我觉得这么写没问题啊。。。。  [待解决] 回复[ 11次 ]   点击[ 633次 ]  
assemblyeaten
[帖 主]   [ 发表时间:2013-05-14 17:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-05-11 10:43
5.8将内存ffff:0~ffff:b段元中的数据拷贝到 0:200~0:20b单元中。
我自己编写的代码是
assume cs:code
code segment
  mov ax,0ffffh
  mov ss,ax
  mov sp,0
  mov ax,0020h
  mov ds,ax
  mov bx,0
  mov cx,6
s:pop ax
  mov ds:[bx],ax
  inc bx
  inc bx
  loop s

  mov ax,4c00h
  int 21h
code ends
end
但是用DEBUG调试的时候到执行完POP ax之后得到的结果不是预期的,AX这个时候的值不是内存单元ffff:0处的字型数据,我是想,把FFFF:0-FFFF:B这段当成栈来使用,以栈的方式来把其中的数据逐个字的经过寄存器AX传送到指定的内存空间,但是却达不到预期的效果,为什么????请高手指点问题到底出在哪里啊??程序代码结构我没有按照书上后面指定的方便阅读的结构来写,但我觉得这样也不应该影响程序运行的结果才对啊。。
assemblyeaten
[第1楼]   [ 回复时间:2013-05-15 11:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-05-11 10:43
补充:该程序运行前查看一下ffff:0-ffff:b内存里的数据,然后运行程序,的确是可以把ffff0h-ffffbh内的数据传送到00200h-0020bh内存空间中,但是有一点奇怪的是,程序运行完之后,原来的FFFF0H-FFFFBH内存空间存储的数据发生了变化,就不再是之前的数据了,但这个程序的运行的确是把原来的那些数据传送到了指定的内存空间,为什么程序运行前后ffff:0-ffff:b内存空间的数据会发生变化?
但是我写了下面这个程序来实现题目中说的数据传送目的却不会出现上述问题,为什么啊????
assume cs:code
code segment
    mov bx,0
    mov cx,12
 s: mov ax,0ffffh
    mov ds,ax
    mov dl,[bx]
    mov ax,0020h
    mov ds,ax
    mov [bx],dl
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end
到底有木有人在啊???求解答。。求解答。。。综上所述:两种程序代码都可达到题目中的要求,但不同的是第一个程序执行后ffff0h-ffffb内存中的数据发生了改变,原有数据传送成功,第二个程序执行后ffff0H-ffffbh内存中的数据却没有发生改变,为什么会出现这种差异呢????
dream1983
[第2楼]   [ 回复时间:2013-06-06 13:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-06-03 02:38
你sp=0指向的位置就不对了··书中要求··ffff:0~ffff:b的位置··注意看书里栈的使用方式了··
linyu0723
[第3楼]   [ 回复时间:2013-06-16 17:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54
SP=0CH
linyu0723
[第4楼]   [ 回复时间:2013-06-16 18:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-07 21:54
SP没错,我忘了你用的是POP了。
29960758
[第5楼]   [ 回复时间:2013-06-20 14:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-06-15 10:10
你的栈没有大小.或者说,大小为0
你说第一个程序能实现功能,是真的吗?
xxie
[第6楼]   [ 回复时间:2015-02-20 18:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-07-19 12:12
我觉得你应该再看看实验二的最后一问。
    DEBUG跟踪执行完一条指令后,会将一些寄存器的值存储在栈顶以外的空间中,而你又用的是POP指令,栈顶向高位推移,栈顶外(较低位)的数据就被覆盖了。
an543670357
[第7楼]   [ 回复时间:2015-07-19 14:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-07-18 18:26
你的栈出戒了吧
an543670357
[第8楼]   [ 回复时间:2015-07-19 14:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-07-18 18:26
栈顶是0ch吧
fy14
[第9楼]   [ 回复时间:2015-07-24 00:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-07-13 19:38
这个pop ax,你直接出栈是一个字单位,而现在需要是传送字节单位。这个你注意下,程序你本身传递数据没有错。还有栈的问题,汇编3版 74面,栈段的前面有ax,和cs,ip的储存的数据。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved