鱼C论坛

 找回密码
 立即注册
查看: 3478|回复: 11

[争议讨论] 关于用C语言来描述一段小汇编语言程序

[复制链接]
发表于 2011-10-8 22:07:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

汇编代码:

assume  cs:codesg,ds:data

data  segment        
yuantou   db  'welcome to masm!'     (源字符数组)
mubiao  db 16 dup('0')                   (目标字符数组)
data  ends

codesg segment
start:            
    mov  ax,data
    mov  ds,ax              (初始化)
    lea   bx,yuantou    (将字符数组hy的指针赋值给寄存器BX)
    lea   dx,mubiao      (类似于上一句)
    push dx                  (保护dx)
    mov  cx,10h         (初始化循环次数,16进制)
s:
    mov al,[bx]           (取字符数组hy中的数据给寄存器AL)  
    mov [dx],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[16]={"welcome to masm!"};
char *mubiao[16];
int  i;
for (i=0;i<16:i++)
   {
      mubiao=yuantou;
    }
printf ("%s\n",mubiao);
return 1;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:09:13 | 显示全部楼层
{:1_1:}  不错 啊,,,向你学习,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:27:45 | 显示全部楼层
本帖最后由 风扫地 于 2011-10-8 22:38 编辑

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

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

yuantou和mubiao在这里都相当于一个二维指针。
改了一下
#include <stdio.h>
int main ()
{
char *yuantou[16]={"welcome to masm!"};
char *mubiao[16];
      *mubiao=*yuantou;
printf ("%s\n",*mubiao);
return 1;
}
或者
#include <stdio.h>
int main ()
{
char *yuantou="welcome to masm!";
char mubiao[17];
int  i;
for (i=0;i<16;i++)
   {
      mubiao[i]=yuantou[i];
    }
mubiao[16]=0;

printf ("%s\n",mubiao);
return 1;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:36:41 | 显示全部楼层
怎么调不通你写的C语言的程序。。。。
# include <stdio.h>
void main (void){
char  yuantou[16]= "welcome to masm! " ;
char  mubiao[16];
int  i;

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

for (i=0;i<16;i++)
printf ("%c",mubiao[i]);
printf("\n");
}
我改了一下可以调通。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:37:55 | 显示全部楼层
for (i=0;i<16:i++)
   {
      mubiao=yuantou;
    }
你这个循环真拉风啊,i在变但里面没有变量在变真牛啊。!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:41:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:46:25 | 显示全部楼层
风扫地 发表于 2011-10-8 22:41
相当于做了十六次同样的事。。

有意义吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:50:06 | 显示全部楼层
大家别拍砖啊,jmp很乐于助人的,可能是很久没碰程序了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 22:53:02 | 显示全部楼层
lovixer 发表于 2011-10-8 22:50
大家别拍砖啊,jmp很乐于助人的,可能是很久没碰程序了

我也好久没碰C语言了,只是左看右看这程序有问题。不指出来误导人哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-9 00:42:12 | 显示全部楼层
没拍砖的说。。我们都是小菜菜。。共同学习。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-9 19:07:41 | 显示全部楼层

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

不太明白你说的循环变量怎么没变????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-10 21:14:12 | 显示全部楼层

他看错了吧,没看到你的下标?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表