Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    B1ack
    Возвращает значение бита n из числе value. setc al лучше заменить на db 0D6h. and eax 0FFh IMHO не имеет смысла т.к тип функции boolean (1 байт) её можно удалить.
     
  2. B1ack

    B1ack New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2008
    Сообщения:
    3
    twgt,murder, спасибо. and eax 0FFh убрал-действительно ничего не изменилось:)
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Изначально в eax находится переменная Value, bt скопирует в CF значение n-го бита, потом setc "скопирует" его в al, но остальная то часть eax останется, и если компилятор после вызова этой функции проверит не al а весь eax, может быть ошибка, так что лучше, IMHO, оставить.
     
  4. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    twgt
    boolean имеет размер 1 байт, отсюда выводы.
     
  5. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    народ подскажите можна ли в С++ перевести тип CHAR в целый INT ??? Если да то какой функцией ?
     
  6. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    народ подскажите можна ли в С++ перевести тип CHAR в целый INT ??? Если да то какой функцией ???
    Мне нужно просто из строки разных символов найти все числа и сделать с ними некие операции !
     
  7. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    murder
    Я понимаю. Но компилятор может после вызова функции сделать не
    test al,al,
    а
    test eax,eax или cmp eax,0 или ещё что-нибудь.
    FullZer0
    Код (Text):
    1. int atoi(
    2.    const char *str
    3. );
     
  8. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    ... чето не ясно ! Ладно ! в общем мое задание таково :
    Дано шаблон типа : Kl(2,5); (как символы так и цыфры могут быть любые)
    Нужно в заданом тексте в каждом слове проверить присутствует ли там шаблон "Kl" если да то проверить совпадают ли символы после етого шаблон от 2 до 5 раз ! Если совпадают то увеличить их количество до 5 !
    Например :
    Шаблон Kl (2,5)
    Слово aKlaaas - ето слово подходит так как после Kl буква "а" повторяетса 3 раза потому мі заменяем ее на 5 - aKlaaaaas !

    В общем я делаю так :
    char shablon[]="Kl" - ето шаблон !
    char word[]="aKlaaas" - слово
    char *cp;
    if(strlen(word) > strlen(shablon)){
    cp = strstr(word,shablon);
    }
    в даном случае "ср == Klaaas" как мне получить не значение позицыи совпадения а собственно ее номер чтобы можно было проверить следующие символы через for ?!
    Может етот метод сложный - подскажыте кто может чтото толковое , а то дальше я застрял!
    Зарание спс !
     
  9. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
  10. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    FullZer0
    номер?
    Короче:
    Код (Text):
    1. if (cp = strstr(word,"Kl")) {
    2.     cp += 2;
    3.     /* считаешь кол-во повтороений текущего символа и т.д. */
    4. }
     
  11. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    cp += 2 потому что Kl - два символа ?! Тоесть если шаблон другой то можно cp += strlen(shablon) !?
    Мне почему то при таком способе cp == null выводит на екран !
    делал так : printf("%s \n",cp) - выводит NULL
     
  12. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    FullZer0
    да, мы увеличиваем указатель (char*) на 2. Если иты это не понял, то надо обязательно почитать книги (K&R лучший вариант).
    да, но если шаблон единственный, то лучше не вычислять каждый раз ее длину, а задать ее константой/макросом.
    можно полный код? (может ты не проверил strstr на возврат NULL? Или "Kl" были последние символы в строке?)
     
  13. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    Вот код :
    Код (Text):
    1. #include <vcl.h>
    2. #include <stdio.h>
    3. #include <string.h>
    4. #include <conio.h>
    5. #include <iostream.h>
    6. #pragma hdrstop
    7.  
    8. #define N 100
    9.  
    10. //---------------------------------------------------------------------------
    11.  
    12. #pragma argsused
    13.  
    14.  
    15. int main(int argc, char* argv[])
    16. {
    17.     clrscr();
    18.     FILE *f,*f1;
    19.     char *cp;
    20.     char shablon[N]="",sh[N]="",text[]="",next;
    21.     int minlen,maxlen;
    22.     int l,i,k;
    23.     k = 0;
    24.     if((f = fopen("C:\\file.txt","r"))==NULL){
    25.         cout<<"File Read ERROR!";
    26.         getch();
    27.         return 0;
    28.     }
    29.     while(!feof(f)){
    30.         fgets(shablon,100,f);
    31.     }
    32.     fclose(f);
    33.     printf("%s\n",shablon);
    34.     for(int i=0;i<strlen(shablon);i++){
    35.         sh[i] += shablon[i];
    36.         if(shablon[i] == ' '){
    37.             minlen = shablon[i+1];
    38.             maxlen = shablon[i+2];
    39.             break;
    40.         };
    41.     }
    42.     l = strlen(sh);
    43.     if((f1 = fopen("C:\\file1.txt","r"))==NULL){
    44.         cout<<"File Read ERROR!";
    45.         getch();
    46.         return 0;
    47.     }
    48.     while(!feof(f)){
    49.         fgets(text,100,f);
    50.     }
    51.     printf("%s\n",sh);
    52.     printf("%c\n",minlen);
    53.     printf("%c\n",maxlen);
    54.     printf("%s\n",text);
    55.     if((cp = strstr(text,sh))!=NULL){
    56.         cp += 2;
    57.     }
    58.     printf("cp == %s\n",cp);
    59.     getch();
    60.     return 0;
    61. }
    Задаваемый шаблон : Kl 25
    Задаваемый текст : aklaaas
     
  14. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    FullZer0
    у меня выводит
    Код (Text):
    1. kl 25
    2. klaaas
    3. 2
    4. 5
    5. aklaaas
    6. cp == aaas
    а что должно выводится? cp != NULL.
     
  15. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    По идеи должен выводиться текст что начинаетса с первого совпадаем ого символа и до конца !
    Впринцыпе я уже так и сделал ...
     
  16. FullZer0

    FullZer0 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2008
    Сообщения:
    24
    подскажите как можно линию поворачивать вокруг одного из своих координат ?!
    Пробовал по формулам :
    x = x + t * sin(t)
    y = y + t * cos(t)
    где t - шаг ! В общем вертит как то не понятно , через скорость не видно ! Есть функция в VB6 аналогdelay() в Паскале ?
     
  17. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    ; Systen call #3 "read"
    mov eax,3
    mov ebx,0
    mov ecx,dst
    mov edx,dst_l
    int 80h
    ; Дописать 0 в конец строки с именем файла
    mov dst[eax],0

    Подскажите, как корректно дописать нуль в конец строки с именем файла.? Пользую NASM
    При такой реализации вылезает ошибка.
     
  18. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    taksos
    Код (Text):
    1. add eax,dst
    2. mov byte [eax],0
    3.  
    4. или
    5.  
    6. mov byte [eax+dst],0
     
  19. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    meduza, спасибо!
     
  20. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Еще одна проблема,
    ; System call #8 "creat"
    mov eax,8
    mov ebx,dst ; Создание файла с именем по адресу dst
    mov ecx,0777 ; Все могут читать/изменять/выполнять файл
    int 80h
    ; Проверка на ошибку
    js err1 ; Если SF=1, то переход на сообщение об ошибке
    .................................................
    next1:
    ; Запись дескриптора в h_dst
    mov h_dst,eax

    Почему-то не работает, ошибка в строке: "mov h_dst,eax".
    h_dst описана в .bss:
    h_dst resw 1