标题:新手问数据逆序存放问题
只看楼主
kd83kdi93
Rank: 2
等 级:论坛游民
帖 子:65
专家分:52
注 册:2011-9-18
结帖率:70%
已结贴  问题点数:20 回复次数:4 
新手问数据逆序存放问题
assume cs:code

a segment
    dw 1,2,3,4,5,6,7,8
a ends

b segment
    dw 0,0,0,0,0,0,0,0
b ends

code segment
start:
    mov ax,b
    mov ss,ax
    mov sp,16
    mov ax,a
    mov ds,ax
    mov bx,0
    mov cx,8
  s:    push ds:[bx]
    add bx,2
    loop s
      mov ax,4c00h
    int 21h
   

code ends
end start

想实现a段数据逆序存放在b段但是出现两个问题

1.把sp设置为16的时候调试会出错  我在执行第一和第二次-t命令的时候a段和b段的数据都是对的 a为1 2 3 4。地址1447:0000-000f    b为0 0 0 。地址1448:0000-000f
  但是在执行第三次-t命令的时候就发现b段的1448:0006就不是0了   

2.我把mov sp,16 改成mov sp,16h错误就没了  数据也被逆序存放了 但是逆序存放的地址变成1448:0006-0010    就不是b段了   

出错信息是  the NTVDM  CPU has encountered an illegal instruction.  
             CS:011e IP:018a OP:0f 00 0a 00 a7 choose 'close' to terminate the application

1448:0000 000f这个段好像没执行一条指令里面数据就会变一次就好像每次都会自己写入固定的数据一样

请高手帮帮我

[ 本帖最后由 kd83kdi93 于 2012-12-30 13:10 编辑 ]
搜索更多相关主题的帖子: start 
2012-12-30 12:46
zerolzb
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2012-12-29
得分:5 
你是不是直接在debug中用-a命令输入汇编的?debug中的数值默认是16进制,所以若在debug中就要输入10,若在文本编辑器中就要输入16或10h
2013-01-02 11:47
朱三哥
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:311
专家分:359
注 册:2012-12-11
得分:5 
楼主有个length的伪指令可以求得当前定义的 数据的长度n
你用这个长度n-1递减到0  来应用offset伪指令的地址 来进行数据的传输
逆序可以通过设置DF 这个标志来实现,这个地方自己查手册
movsw 这个指令 是针对字符串使用的,你用这个就好了
rep这个指令 可以形成循环

回答完毕,照你上面的搞法太麻烦


[ 本帖最后由 朱三哥 于 2013-1-2 19:31 编辑 ]

哥,破你无线很难的,不要老是改,少看路由器上的灯,你会死啊
2013-01-02 19:28
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3450
专家分:19340
注 册:2012-3-31
得分:5 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2013-01-03 13:36
mutouren123
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2012-7-5
得分:5 
呵呵,我今天也看到这里 呵呵,那个 sp 应该是 32 把,...
2013-01-05 22:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-394548-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022295 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved