JMP 发表于 2011-10-8 22:07:16

关于用C语言来描述一段小汇编语言程序

本帖最后由 JMP 于 2011-10-8 22:13 编辑

首先申明我是超级大菜鸟,自从毕业后有很长一段时间没接触过程序设计了,代码可能会有些细节上的错误,高手不要拍砖,不要喷我,若有人发现错误希望能指正出来,共同学习共同进步!

用C语言描述下面的这段汇编代码
功能是将一个字符数组拷贝到留一个字符数组

汇编代码:

assumecs:codesg,ds:data

datasegment      
yuantou   db'welcome to masm!'   (源字符数组)
mubiaodb 16 dup('0')                   (目标字符数组)
dataends

codesg segment
start:            
    movax,data
    movds,ax            (初始化)
    lea   bx,yuantou    (将字符数组hy的指针赋值给寄存器BX)
    lea   dx,mubiao      (类似于上一句)
    push dx                  (保护dx)
    movcx,10h         (初始化循环次数,16进制)
s:
    mov al,         (取字符数组hy中的数据给寄存器AL)
    mov ,al   
    inc bx
    inc dx
    loop s
    pop dx                   (恢复dx)                        
    mov ax,4c00h
    int 21h
codesg ends
end start

C语言代码:

include <stdio.h>
int main ()
{
char * yuantou={"welcome to masm!"};
char *mubiao;
inti;
for (i=0;i<16:i++)
   {
      mubiao=yuantou;
    }
printf ("%s\n",mubiao);
return 1;
}

小小生 发表于 2011-10-8 22:09:13

{:1_1:}不错 啊,,,向你学习,,

风扫地 发表于 2011-10-8 22:27:45

本帖最后由 风扫地 于 2011-10-8 22:38 编辑

声明下。我也是小菜。说的不对的地方多多指点。,楼主确认C语言代码能够完成上面汇编代码的功能。
char * yuantou


这不是在声明指针数组。。?
其中youtou指向welcome to masm!

yuantou和mubiao在这里都相当于一个二维指针。
改了一下

#include <stdio.h>
int main ()
{
char *yuantou={"welcome to masm!"};
char *mubiao;
      *mubiao=*yuantou;
printf ("%s\n",*mubiao);
return 1;
}


或者

#include <stdio.h>
int main ()
{
char *yuantou="welcome to masm!";
char mubiao;
inti;
for (i=0;i<16;i++)
   {
      mubiao=yuantou;
    }
mubiao=0;

printf ("%s\n",mubiao);
return 1;
}




yk94215 发表于 2011-10-8 22:36:41

怎么调不通你写的C语言的程序。。。。
# include <stdio.h>
void main (void){
charyuantou= "welcome to masm! " ;
charmubiao;
inti;

for (i=0;i<16;i++)
   {
      mubiao=yuantou;
    }

for (i=0;i<16;i++)
printf ("%c",mubiao);
printf("\n");
}
我改了一下可以调通。。

yk94215 发表于 2011-10-8 22:37:55

for (i=0;i<16:i++)
   {
      mubiao=yuantou;
    }
你这个循环真拉风啊,i在变但里面没有变量在变真牛啊。!!!

风扫地 发表于 2011-10-8 22:41:50

yk94215 发表于 2011-10-8 22:37 static/image/common/back.gif
for (i=0;i

相当于做了十六次同样的事。。

yk94215 发表于 2011-10-8 22:46:25

风扫地 发表于 2011-10-8 22:41 static/image/common/back.gif
相当于做了十六次同样的事。。

有意义吗?

lovixer 发表于 2011-10-8 22:50:06

大家别拍砖啊,jmp很乐于助人的,可能是很久没碰程序了

yk94215 发表于 2011-10-8 22:53:02

lovixer 发表于 2011-10-8 22:50 static/image/common/back.gif
大家别拍砖啊,jmp很乐于助人的,可能是很久没碰程序了

我也好久没碰C语言了,只是左看右看这程序有问题。不指出来误导人哦。{:5_109:}

风扫地 发表于 2011-10-9 00:42:12

没拍砖的说。。我们都是小菜菜。。共同学习。。

JMP 发表于 2011-10-9 19:07:41

yk94215 发表于 2011-10-8 22:37 static/image/common/back.gif
for (i=0;i

for(i=0;i<16;i++)
1.首先初始化循环变量(i=0)。
2.判断i是否小于16.
若小于则先执行循环代码,然后i++,再次进行判断i<16,若还是小于则继续执行一次代码并i++,否者跳出循环。

不太明白你说的循环变量怎么没变????

gongheng 发表于 2011-10-10 21:14:12

JMP 发表于 2011-10-9 19:07 static/image/common/back.gif
for(i=0;i

他看错了吧,没看到你的下标?
页: [1]
查看完整版本: 关于用C语言来描述一段小汇编语言程序