2014-11-22 102 views
0

我正在尝试在程序集lang中编写脚本。从给定的字符串打印带有子字符串的单词。 例如:程序集查找包含给定字符串中子字符串的字

char* a="hello world lol asdf"; 
char* b="lo"; 
char buffer[100]; 

和印刷的话是:

“你好笑”

我在ANSI C写的程序为:

#include <stdio.h> 
#include <string.h> 
int main(){ 

    char *s = "hello bencsss trololo molo"; 
    char *b ="lo"; 
    char bufor[100]; 
    int i, j=0,k=0,c=0,l=0; 
    for(i=0;i<strlen(s);i++){ 
     if(s[i]==' ') k=i+1; 

     if(b[j]==s[i]){ 
      j++; 
      if(j==strlen(b)-1){ 
       while(s[k]!=' ' && k<(strlen(s))){ 
       bufor[c]=s[k]; 
        c++; 
        k++; 
       } 
      bufor[c]=' '; 
      c++; 
      k=i; 
      } 
     } 
     else{ 
     j=0;  
     } 
    } 
    printf("%s",bufor); 
    return 0; 
} 

和这里是我写到目前为止在asm:

#include <stdio.h> 

int main(){ 
    //short int y; 
    char *s = "hello world!\n"; 
    char *b ="lo"; 
    char bufor[100]; 

    asm volatile(
    ".intel_syntax noprefix;" 
    "mov eax,%0;" //16 
    "push eax;" 
    "mov eax,%1;" //12 
    "push eax;" 
    "mov eax,%2;" //8 
    "call zadanie1;" 
    "jmp end;" 
"zadanie1:" 
    "push eax;" 
    "push ebp;" //4 
    "mov ebp,esp;" 
    "push ebx;" 
    "push ecx;" 
    "push edx;" 

    "mov ebx,[esp+16];" 
"reset:" 
    "mov eax,[esp+12];" 
    "jmp word;" 
"space:" 
    "mov [si],ebx;" 
    "jmp forward;" 
"word:" 
    "mov dl,[ebx];" 
    "mov dh,[eax];" 
    "cmp dl,' ';" 
    "je space;" 
"forward:" 
    "cmp dl,dh;" 
    "inc ebx;" 
    "jz reset;" 
    "inc eax;"  
    "cmp dh,'0';" 
    "je buff;" 
    "jmp word;" 
"buff:" 
    "mov [ecx,esp+8];" 
    "inc ecx;" 
"loop:" 
    "mov dh,[ecx];" 
    "mov [si],dh" 
    "cmp dh,' ';" 
    "je reset;" 
    "inc ecx;" 
    "inc si;" 




    "end:" 
    ".att_syntax prefix;" 
    : 
    :"r"(s), "r"(b),"r"(bufor) 
    :"eax" 

    ); 

asm可能写错了,它还没有完成,我仍然在这种语言newbe所以..

好吧...我可以得到任何文字或建议或什么如何使这个程序在ASM,请? 花了我3天的时间写这个到目前为止...现在我不知道如何使它实际工作。

干杯!

回答

0

接下来的说明不正确。

"mov ebx,[esp+16];" 
"mov eax,[esp+12];" 

使用EBP代替ESP来处理您的参数。

此语法不存在。目标是什么?

"mov [ecx,esp+8];" 

你觉得什么jz reset将在行动?在cmp dl,dh之后定义的ZF被inc ebx销毁。

"cmp dl,dh;" 
"inc ebx;" 
"jz reset;" 
相关问题