一道送分题,可我不清楚

cisc 2001-08-27 08:20:27
那位兄弟能给我详细讲一下32位汇编中的数据的定义和赋值吗?尤其是如何定义一个字符串变量及给其赋值。
...全文
133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
emailcdh 2001-08-29
  • 打赏
  • 举报
回复
定义一个字符串变量(赋初值的),然后我想改变这个字符串的内容的话是不可能的?

为什么,我觉得可以。
蚊子王 2001-08-28
  • 打赏
  • 举报
回复
"字符串变量"应该是"字符串常量"
cisc 2001-08-28
  • 打赏
  • 举报
回复
也就是说我想只定义一个字符串变量(赋初值的),然后我想改变这个字符串的内容的话是不可能的,一定要把我想改的内容赋给另一个定义好的字符串变量中咯?否则光一个字符串变量是无法改变的是不是?
movs的用法我知道了,谢谢!看来要给你们一人一半分了!:)
蚊子王 2001-08-28
  • 打赏
  • 举报
回复
MOVS 把ds[si]/ds[esi]中的值传给es[di]/es[edi]
蚊子王 2001-08-28
  • 打赏
  • 举报
回复
兄弟,你大概学过C/C++吧。
在C/C++中可以lstrcpy(&TextB,"hello");是因为C/C++是高级语言,她的编译器会生成一个字符串变量,再把它的地址传给lstrcpy函数:
push addr TextB
push addr Hello
call lstrcpy
...
Hello db "Hello",00h
...
所以只能这样写:
.data
TextA db "hello",00h
...
.code
...
invoke lstrcpy, addr TextB,TextA
...
vBin 2001-08-28
  • 打赏
  • 举报
回复
有关MOVS,CUI大哥说得没错。
我再细说一下吧。
MOVS分MOVSB(字节传送)和MOVSW(字传送)
传送指令将SI所指的一个字节或一个字,传送到寄存器DI所指的内存单元中。
根据高向标志符决定SI和DI的值分别增1(字是2)或减1(字是2)
SI的段寄存器是DS,DI的段寄存器是ES

一般这样用:
cld ;使SI和DI的值是增加
mov cx,100 ;循环100次
next:movsw ;字传送
loop next
cisc 2001-08-27
  • 打赏
  • 举报
回复
invoke lstrcpy, addr TextB,"hello" ;为什么这样不行? :(
cisc 2001-08-27
  • 打赏
  • 举报
回复
呵呵!先谢了,那MOVS有什么用?
vBin 2001-08-27
  • 打赏
  • 举报
回复
DOS
一般是和利用中断得到字符串
先定义一个缓冲区。
在调用中断之前,设置好缓冲区地址,和缓冲区的大小
调用中断,得到字符串


MASM32
TextA db "This is a String",0 ;定义字符串,字符串的未尾都需加一个0
TextB db 50 dup (0) ;定义一个可存50个字符的缓冲区

invoke lstrcpy,addr TextB,addr TextA ;利用lstrcpy函数,将TEXTA地址中的内容
COPY到TEXTB中。

也可以利用一些API函数,得到字符串内容
他们大多数都需要传下面两个参数
addr TextB,sizeof TextB
缓冲区的地址,和缓冲区的大小


其实调用方面,DOS和WINDOWS下大致相同。
cisc 2001-08-27
  • 打赏
  • 举报
回复
那你先说一下关于字符串变量的定义和赋值吧!书上讲的太笼统。我搞懂了就给分
vBin 2001-08-27
  • 打赏
  • 举报
回复
看书吧。
简单讲无从下手
讲全点,打字累。

21,459

社区成员

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

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