中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: movsb=lodsb+stosb? NO! 上一主题 | 下一主题
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『楼 主』:  movsb=lodsb+stosb? NO!

movsb=lodsb+stosb?
NO!

学习汇编语言时我以为movsb就等于lodsb+stosb,当然后者编程变化更多,但最近竟然因此让我不得不升级“模载作坊”V.COM。

请DEBUG下面的程序:
code segment
  assume cs:code,ds:code,es:code
  org 100h
start:
  cld
  mov si,offset src
  mov di,offset tgt1
_1:movsb ;跟踪时发现AL的值根本不受影响,恒定为0!
  or al,al
  jnz _1
  int 3
;所以_1这段程序只传送了一个‘0’,就结束了。
;下面的程序段能够完成全部传送。
  mov si,offset src
  mov di,offset tgt2
_2:movsb
  cmp byte ptr [si-1],0 ;此行是不得已而为之!
  jnz _2
  int 3

  mov si,offset src
  mov di,offset tgt3
_3:lodsb ;此处获得AL值
  stosb
  or al,al
  jnz _3
  int 3

  mov ah,4Ch
  int 21h

even
src   db '012abcABC+-*/|}',0
tgt1 db 16 dup(1)
tgt2 db 16 dup(2)
tgt3 db 16 dup(3)
code ends
  end start

总之一句话:汇编语言的学习一定要多多DEBUG(不限于微软的DEBUG.EXE),如果接受命令行参数,更要DEBUG到每个字节的传送和确认。否则,程序很容易带上BUGS。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2008-11-12 09:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 2 楼』:  

串操作指令里面只有SCAS、LODS、STOS会影响或受影响AL/AX/EAX,MOVS、CMPS、INS、OUTS好像都没有提到AL...
另外MOVSB一般采用把源串长度放进CX来控制传送的次数,而不用判断目标单元的值。
code segment
  assume cs:code,ds:code,es:code
  org 100h
start:
  cld
  mov cx,src_len
  mov si,offset src
  mov di,offset tgt1
  repz movsb
  int 3
  mov ah,4Ch
  int 21h
even
src  db '012abcABC+-*/|}',0
src_len EQU $-src-1
tgt1 db 15 dup(1),0
code ends
  end start
[ Last edited by netwinxp on 2008-11-12 at 11:45 ]

2008-11-12 11:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 3 楼』:  

同意2楼说法,更明确地说,只有LODS能够影响(E)AL/X(当然最原始的MOV al/ax/eax,[si]也是可以的),SCAS/STOS涉及(E)AL/X,MOVS、CMPS、INS、OUTS与(E)AL/X无关。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2008-11-12 19:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: