哪位高手帮我解释一下下面汇编语言的问题,谢谢。
在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 展开
在王爽的书上有一句是这么说的:在图中,“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 展开
2个回答
展开全部
这是因为 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 );
}
解决你的上面的方法太多了。。。就不再说了。
当你输入"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 );
}
解决你的上面的方法太多了。。。就不再说了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询