哪位高手帮我解释一下下面汇编语言的问题,谢谢。

在debug中,ds=0b20es=0b30ss=0b30cs=0b30ip=0000在王爽的书上有一句是这么说的:在图中,“ds=0b20”,可以知道我们的程序从0b3... 在debug中,ds=0b20 es=0b30 ss=0b30 cs=0b30 ip=0000

在王爽的书上有一句是这么说的:在图中,“ds=0b20”,可以知道我们的程序从0b30:0000
开始存放。
我对这句话感到疑惑,程序 的代码本来就是从cs:ip处开始执行,这与“ds=0b20” 有什么关系呢,那位大哥 帮我解释一下,下面是程序的源代码,谢谢。
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
mov bx,0
mov ax,0
mov cx,8
s:
add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end
展开
 我来答
kgbai82
2011-01-08 · TA获得超过250个赞
知道答主
回答量:381
采纳率:100%
帮助的人:266万
展开全部
这是因为 scanf()的原因,它只是取出第一个 " " (空格) 前面的字符。(gets() 取出直到碰到 回车 )。

当你输入"a b c d" 然后回车时,scanf( "%s", string ) 只是把 "a" 取走,而" b c d"+ 回车 还留在标准输入输出的 缓存里, gets( string ) 就直接取出来,所以就不会等你输入了。

要不做下面测试:

#include <stdio.h>

void main( void )
{
char str0[50];
char str1[50];
char str2[50];
printf( "input \"a b c d\"\n");
scanf( "%s", str0 );
scanf( "%s", str1 );
gets( str2 );
printf( "str0 : %s\n", str0 );
printf( "str1 : %s\n", str1 );
printf( "str2 : %s\n", str2 );
}

解决你的上面的方法太多了。。。就不再说了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_小_苏
2011-01-07 · TA获得超过343个赞
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:210万
展开全部
assume cs:code
........................
code segment
很明显,这里定义的是代码段。一般数据是放在DS段的。
这里的数据在CS段。所以指明段基址cs:[bx]。

这与“ds=0b20”没关系
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式