MOVS和MOVSB的问题

qlmi 2009-04-01 11:39:41
这两个字符串处理指令我在使用的时候,MOVS总是有问题,但是MOVSB就不会。
后来看资料,资料上也说MOVS的问题比较多,这究竟是什么原因呢?
...全文
2179 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancybit 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
实际上没有MOVS这条指令,只有MOVSB、MOVSW、MOVSD等,串操作需要明确数据类型,B表示BYTE,W表示WORD,D表示DWORD。
[/Quote]
话说有这个指令 在intel的手册里很清楚地写着
cnzdgs 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qlmi 的回复:]
那为什么能编译运行呢?
[/Quote]
这是编译器做的不好,没有严格检查。(可能做编译器的人没有想到会有人这样用movs)
cnzdgs 2009-04-01
  • 打赏
  • 举报
回复
实际上没有MOVS这条指令,只有MOVSB、MOVSW、MOVSD等,串操作需要明确数据类型,B表示BYTE,W表示WORD,D表示DWORD。
BAYNPU 2009-04-01
  • 打赏
  • 举报
回复
这两个字符串处理指令我在使用的时候,MOVS总是有问题;
在使用这种格式必须在操作数中表明是字节串还是字串操作例如:
MOVS ES:BYTE PTR[DI],DS:[SI]
这种格式中的DST及SRC只提供给汇编程序作类型检查用,并且不允许用其他寻址方式来确定操作数,目标操作数必用DI,源操作数必用SI,一般这种方式不常用.
qlmi 2009-04-01
  • 打赏
  • 举报
回复
那为什么能编译运行呢?
cnzdgs 2009-04-01
  • 打赏
  • 举报
回复
movs szMsg1, szMsg
这样写法不能达到你的目的,实际上是没有这样的指令的,必须给si、di赋值,然后才能movsb。
qlmi 2009-04-01
  • 打赏
  • 举报
回复
我的源程序如下:

stackseg segment stack
bBuffer byte 100 DUP(?)
stackseg ends
extraseg segment
eBuffer BYTE "LOVE"
szMsg1 BYTE "YOU"
extraseg ends
dataseg segment
szMsg BYTE 'Hello World!',13,10,'$'

dataseg ends

codeseg segment
assume cs:codeseg, ds:dataseg, es:extraseg, ss:stackseg
START:
mov ax, dataseg
mov ds, ax
mov ax, extraseg
mov es, ax

movs szMsg1, szMsg
push ds
mov ax, es
mov ds, ax
lea dx, eBuffer
mov ah, 9
int 21h
pop ds

;暂停,任意键关闭
mov ah,1
int 21h
mov ah,4ch ;结束,可以修改al设置返回码
int 21h
codeseg ends
END START

按道理
szMsg1
原来的内容应该被覆盖了,显示为:LOVEHello World!;
但实际上却是显示:LOVEYOU Hello World!。这是怎么回事?
cnzdgs 2009-04-01
  • 打赏
  • 举报
回复
movs byte ptr es:[di], byte ptr ds:[si]
编译出来就是movsb
movs word ptr es:[di], word ptr ds:[si]
编译出来就是movsw
qlmi 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
实际上没有MOVS这条指令,只有MOVSB、MOVSW、MOVSD等,串操作需要明确数据类型,B表示BYTE,W表示WORD,D表示DWORD。
[/Quote]
实际上没有是什么意思?实际上是有,可以编译使用呀!
linweipeng 2009-04-01
  • 打赏
  • 举报
回复
2楼正解
lin115406828 2009-04-01
  • 打赏
  • 举报
回复
LS的意思就是说在用到MOVS这条指令时最好根据当前的操作数类型来决定用MOVSB、MOVSW、MOVSD,而要尽量少用MOVS这条指令咯!

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧