работа со строками

Тема в разделе "WASM.ASSEMBLER", создана пользователем compbooks_ru, 12 окт 2009.

  1. compbooks_ru

    compbooks_ru New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2009
    Сообщения:
    7
    1. Определить длины строк
    2. В конец первой строки дописать первые n символов из второй строки
    3. Поменять местами второй и четвертый байты второй строки
    4. Вернуть в вызывающую программу длину второй строки.

    Код (Text):
    1. #include <stdio.h>
    2. int func(char *st1, char *st2, int num);
    3. void main()
    4. {
    5.   char str1[10], str2[10];
    6.   int num=0,n;
    7.  
    8.   printf("\n str1-> ");
    9.   scanf("%s" ,str1);
    10.  
    11.   printf("\n str2-> ");
    12.   scanf("%s", str2);
    13.  
    14.   printf("\n Chislo: ");
    15.   scanf("%i", &n);
    16.  
    17.   num=func(str1, str2, n);
    18.  
    19.   printf("\n Finish");
    20.   printf("\n str1 ->: %s", str1);
    21.   printf("\n Str2 ->: %s", str2);
    22.   printf("\n Dlina 2 stroki -> %i", num);
    23.  
    24. }
    Код (Text):
    1. TITLE Second
    2. .MODEL SMALL,C
    3. .CODE
    4. PUBLIC FUNC
    5. func proc c uses si di, st1: word, st2: word, n: word
    6. local l1: word, l2: word
    7.  
    8. ;\\\\\\\\\\\\\\Zadanie 1\\\\\\\\\\\\\\\\\\\\\\\\\
    9.         MOV DI,0
    10.         MOV AL,0
    11. Lenght1:
    12.         MOV AH,st1[DI]
    13.         CMP AH,AL
    14.         JE FNH
    15.         INC DI
    16.         JMP Lenght1
    17. FNH:    MOV l1,DI
    18.         MOV SI,0
    19.  
    20. Lenght2:
    21.         MOV AH,st2[SI]
    22.         CMP AH,AL
    23.         JE FNH2
    24.     INC SI
    25.     JMP Lenght2
    26. FNH2:  
    27.     MOV l2,SI
    28.     MOV SP,l2
    29. ;\\\\\\\\\\\\\\\Zadanie 2\\\\\\\\\\\\\\\
    30.     mov dx,l1
    31.     sub n+1,dx
    32.     mov l1,dx
    33.     mov di,l1
    34.         mov si,0
    35.         mov cx,n
    36.   zikl:
    37.     mov dx,st2[si]
    38.     mov st1[di],dx
    39.         inc di
    40.         inc si
    41.         loop zikl
    42. ;\\\\\\\\\\\\\\\Zadanie 3\\\\\\\\\\\\\\\
    43.        
    44.     mov bx,st2[1]
    45.     mov dx,st2[3]
    46.     mov st2[1],dx
    47.         mov st2[3],bx
    48.  
    49. ;\\\\\\\\\\\\\\\Zadanie 4\\\\\\\\\\\\\\\\
    50.  
    51.     mov ax,sp
    52.         ret
    53. func endp
    54. end
    с помощью модуля на Си вызываю num=func(str1, str2, n)(запускается код на ассемблере), но прога не работает... скажите в чем дело...
     
  2. JCronos

    JCronos New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2009
    Сообщения:
    98
    Код (Text):
    1. extern int func(char *st1, char *st2, int num);