| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 514 人关注过本帖
标题:谁帮我分析一下原因?
只看楼主 加入收藏
pardream
Rank: 1
等 级:新手上路
帖 子:16
专家分:8
注 册:2010-7-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
谁帮我分析一下原因?
如下题目与代码:
将40个字母a的字符串从源缓冲区传送到目的缓冲区。
程序代码:
data segment

 s_buf db 40 dup('a')
data ends
extra segment

 d_buf db 40 dup(?)
extra ends

cseg segment
main proc far
  assume cs:cseg, ds:data, es:extra
start:
  push ds
  xor ax, ax
  push ax
  mov ax, data
  mov ds, ax
  mov ax, extra
  mov es, ax

  mov cx,40
  lea si, s_buf
  lea di, d_buf
  cld
  rep movsb
  ret
main endp
cseg ends
  end start

编译后debug调试运行结果如下:
程序代码:
-u 0
0AB1:0000 1E            PUSH    DS
0AB1:0001 33C0          XOR     AX,AX
0AB1:0003 50            PUSH    AX
0AB1:0004 B8AB0A        MOV     AX,0AAB
0AB1:0007 8ED8          MOV     DS,AX
0AB1:0009 B8AE0A        MOV     AX,0AAE
0AB1:000C 8EC0          MOV     ES,AX
0AB1:000E B92800        MOV     CX,0028
0AB1:0011 8D360000      LEA     SI,[0000]
0AB1:0015 8D3E0000      LEA     DI,[0000]
0AB1:0019 FC            CLD
0AB1:001A F3            REPZ
0AB1:001B A4            MOVSB
0AB1:001C CB            RETF

-g1c
AX=0AAE  BX=0000  CX=0000  DX=0000  SP=FFFC  BP=0000  SI=0028  DI=0028
DS=0AAB  ES=0AAE  SS=0AAB  CS=0AB1  IP=001C   NV UP EI PL ZR NA PE NC
0AB1:001C CB            RETF
-d 0aab:0
0AAB:0000  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAB:0010  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAB:0020  61 61 61 61 61 61 61 61-00 00 00 00 00 00 00 00   aaaaaaaa........
0AAB:0030  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAB:0040  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAB:0050  61 61 61 61 61 61 61 61-00 00 00 00 00 00 00 00   aaaaaaaa........
0AAB:0060  1E 33 C0 50 B8 AB 0A 8E-D8 B8 AE 0A 8E C0 B9 28   .3繮斧.庁府.幚?
0AAB:0070  00 8D 36 00 00 8D 3E 00-00 FC F3 A4 CB 74 6F 20   .?..?..?にto
-d 0aae:0
0AAE:0000  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAE:0010  61 61 61 61 61 61 61 61-61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
0AAE:0020  61 61 61 61 61 61 61 61-00 00 00 00 00 00 00 00   aaaaaaaa........
0AAE:0030  1E 33 C0 50 B8 AB 0A 8E-D8 B8 AE 0A 8E C0 B9 28   .3繮斧.庁府.幚?
0AAE:0040  00 8D 36 00 00 8D 3E 00-00 FC F3 A4 CB 74 6F 20   .?..?..?にto
0AAE:0050  64 6F 20 72 65 71 75 65-73 74 65 64 20 63 6F 6D   do requested com
0AAE:0060  6D 61 6E 64 0D 0A 33 0D-0A 49 6E 66 69 6E 69 74   mand..3..Infinit
0AAE:0070  65 20 72 65 74 72 79 20-6E 6F 74 20 73 75 70 70   e retry not supp

运行结果确定是正确的,数据从0AAB:0000 copy到了0AAE:0000,可我疑惑的是,为什么程序
还附带拷贝了一份数据到0AAB:0030?
我用了Borland的tasm,微软的masm编译都得到了相同的运行结果。why?
搜索更多相关主题的帖子: 原因 字母 缓冲区 字符串 color 
2012-12-13 18:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
字符串以 0 结束   个人认为 0之后是啥都没关系了

DO IT YOURSELF !
2012-12-14 09:22
快速回复:谁帮我分析一下原因?
数据加载中...
 
   



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

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