2014-11-22 2 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 может быть написан неправильно, и он еще не закончен, я все еще новичок на этом языке, поэтому ..

ОК ... Могу ли я получить какие-либо слова или совет или что-то, как сделать эту программу в asm, пожалуйста? взял меня на 3 дня, чтобы написать это до сих пор ... и теперь у меня нет идей, как заставить его на самом деле работать.

Cheers!

ответ

0

Следующие инструкции являются неправильными.

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

Используйте EBP вместо ESP для обработки ваших параметров.

Этот синтаксис не существует. Чего стремиться?

"mov [ecx,esp+8];" 

Что вы думаете jz reset будет действовать на? ZF, определенный после cmp dl,dh, уничтожается inc ebx.

"cmp dl,dh;" 
"inc ebx;" 
"jz reset;" 
Смежные вопросы