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

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

  1. NewNewbie

    NewNewbie New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    4
    valterg
    решение "на бумаге" понятно.. проблема с асмом.. за месяц, который нам его "преподают", объяснили только хелловорлд, сложение и вычитание.. а этого для решения лабы.. сказать "мало" - ничего не сказать..
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    valterg
    NewNewbie - очередной IT-попрошайка со стандартыми отмазками
    NewNewbie
    Достаточно было нажать на клавишу Поиск, что бы понять тебе сюда
     
  3. NewNewbie

    NewNewbie New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    4
    Mikl___
    а вы случайно не очередной IT-зазнайка? со стандартными отмазками.. "я все знаю, но если вы меня спросите, я пошлю вас лесом, вот такой вот я, ахаха".. Попрошайка говорите.. а как эта тема называется? что в ней написано? Ага, почитайте, ежели умеете. Вам же, IT-зазнайкам и это лень.. ибо нафига
    мне это нужно? Я очень рад, что кто-то написал программу перевода, да еще так оформил, угу.. Я же говорю - я понимаю как числа переводятся, но как это реализовать на асме 16 бит? По вашей ссылке, к сожалению, я ничего не увидел.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Это все понятно, но тут не пишут за вас, а только помогают. Так что, вы не по адресу, а наезжать на "старожилов" форума - это дурной тон :)
     
  5. vasy

    vasy New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    2
    Привет всем, помогите с написанием такой программы:
    "Даны две одинаковые по длине строки с одинаковым байтом. Найти этот байт и вывести его значение на экран."
    Короче по заданию надо найти символ и вывести его на экран как я понял.
    Я написал программу, но она только говорит о том что нашла общий байт.Как сделать так, что бы еще выводила на экран найденный байт?
    Код (Text):
    1. csg segment 'CODE'
    2. assume CS: csg,DS: dsg,SS: ssg
    3. begin:
    4.    mov AX,dsg
    5.    mov DS,AX
    6.    push DS
    7.    pop ES
    8.    
    9.  cld
    10.    mov SI,offset line1;первая строка-DS:SI
    11.    mov DI,offset line2;вторая строка-ES:DI
    12.    mov CX,count;Длина сравнимаевых строк, используется счетчик
    13. repne cmpsb;сравнивать пока не обнаружатся одинаковые байты в строках 1 и 2
    14.    je ok;если байт найден перейти к ОК
    15.    mov AH,09h;вывести строку на экран
    16.    mov DX,offset errormes;байт не найден
    17.    int 21h
    18.    jmp next;выйти из программы
    19. ok:
    20.    mov AH,09h
    21.    mov DX,offset okmes;выдать сообщение о найденом байте
    22.    int 21h
    23.  
    24.    
    25. next:
    26.    mov AX,4C00h
    27.    int 21h
    28. csg ends
    29. dsg segment 'DATA'
    30.    line1  db 'rit#hp';первая строка с одним общим байтом
    31.    line2  db 'hma#nt';вторая строка с одним общим байтом
    32.    count=$-line2;счетчик символов в строке
    33.    okmes  db 'Byte found!$';выдать сообщение о найденом байте
    34.    errormes db 'Error. Byte not found$';выдать сообщение об отсутствии общего байта
    35. dsg ends
    36. ssg segment stack 'STACK'
    37.     dw 128 dup (0);размер стэка
    38. ssg ends
    39.    end begin
    Честно говоря, ассемблер только 2ую пару изучаем. Пока неочень понятно все)
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    vasyпо условию:
    по коду:
    Код (Text):
    1.    mov SI,offset line1;первая строка-DS:SI
    2.    mov DI,offset line2;вторая строка-ES:DI
    3.    mov CX,count;Длина сравнимаевых строк, используется счетчик
    4. repne cmpsb;сравнивать пока не обнаружатся одинаковые байты в строках 1 и 2
    искомый байт необязательно находится по одному и тому же смещению и в одной и во второй строке.

    определись в какой системе счисления выводить байт и посмотри эту ветку форума, этот вопрос часто задают ;)
     
  7. vasy

    vasy New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    2
    Вообщем я ничего не понял. Попробую снова объяснить. Две строки-'hma#nt' и 'rit#hp'. В них общий символ #. Нужно сравнить эти две строки и вывести общий символ на экран. Т.е. что бы было что то вроде Byte found: "#". Впринципе можно просто приписать этот символ, но если учитель пропалит исходник или попросит поменять символ-будет нехорошо. Потому просто прошу объяснить как это сделать, хотя бы словами.
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    'hma#nt' и '###e##' - в них # - общий символ
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Вы усложнили задачу. Там четко написано : найти байт. Одинаковая длина и начало изучения тоже об этом говорят : что одинаковые байты стоят на одном и том же месте. Времени к сожалению нет писать программу преобразования числа в текст.
     
  10. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Код (Text):
    1. ;; EAX = число
    2. ;; EBX = основание системы счисления
    3. ;; EDI = указатель на буфер
    4. ;;
    5. number_to_text:
    6.     pushad
    7.  
    8.     xor    esi,esi
    9.  
    10.     convert_loop:
    11.     xor    edx, edx
    12.     div    ebx
    13.  
    14.     cmp    dl, 10
    15.     jb      .less
    16.     add    dl, 'A'
    17.     jmp    next
    18.    .less:
    19.     or    dl, '0'
    20.  
    21.     next:
    22.     push   edx
    23.     inc    esi
    24.     test   eax, eax
    25.     jnz    convert_loop
    26.     cld
    27.  
    28.     write_loop:
    29.     pop    eax
    30.     stosb
    31.     dec    esi
    32.     test   esi, esi
    33.     jnz    write_loop
    34.     mov    byte[edi],0
    35.  
    36.     popad
    37. ret
     
  11. Sashko

    Sashko New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    3
    порграмма assembler пишет что не известная команда, вернее не определина, jnc writers
    как ее правильно описать??
     
  12. Sashko

    Sashko New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2009
    Сообщения:
    3
    Код:
    ;=============================деление==============================
    delen: mov cx,10
    lea si,[num1]
    lea di,[num2]
    mov cx,0
    dec di
    rotcycl: ;сдвигаем, пока делитель не станет больше делимого
    inc di
    call sravn
    jc rotcycl
    smrot:
    dec di ;сдвигаем на шаг назад, делитель максимально велик
    nrotsub:
    call sravn
    jnc writeres

    call subst
    inc cx
    jmp nrotsub ;вычитаем до тех пор, пока делимое больше
    writeres:
    mov bx,53 ;когда делимое меньше, записываем результат
    sub bx,di
    xchg bx,di
    mov [di],cx
    mov cx,0
    xchg bx,di
    cmp di,11
    ja smrot ;и снова сдвигаем делитель в сторону уменьшения


    konec:
    сдесь возникла такая проблема, пишет что неизвестный символ writers
    что делать???
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    У тебя опечатка как минимум:
    надо не writers а writeres
     
  14. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    vasy
    дос функцию вывод на экран символа знаешь ???
    после выполнения cmpsb над совпадающим символом он останется на шаг позади
    берешь и грузишь его в регистр для вывода символа
    для этого после метки ок пишешь код

    ok:
    mov <reg>,[SI-1]
    ...

    заменяя <reg> на необходимый регистр
     
  15. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Sashko
    1. переписываешь имя метки ТОЛЬКО латиницей - чтоб русские буквы не затесались
    2. берешь копируешь имя метки (все то что до двоеточия) и вставляешь в инструкцию
     
  16. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    valterg
    имхо нужно вывести общий байт как символ - преобразований я думаю не требуется
     
  17. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    задача следующая:

    нужно написать функцию, с 1м параметром.
    этот 1 параметр - указатель на строку.
    В этой функции нужно изменить 1 символ строки. Вот и всё.

    Я лишь запутался в адресации.
    делал так:
    mov byte ptr [YKAZATEL_NA_STROKU],012h
    но что-то не срабатывает =(
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    В связи с отсутствием экстрасенсов на форуме wasm.ru требуется более конкретно обрисовывать проблему -- "что-то не срабатывает" что имеется в виду? Для самостоятельного поиска неисправностей научитесь пользоваться отладчком
     
  19. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    не получается именно изменить 1 символ (байт) строки, когда на неё есть указатель...

    в обычном случае делал так:

    Код (Text):
    1. .data
    2.     str1    db  'hello world!',0
    3. .code
    4.     mov byte ptr [str1],12 ; меняет первый символ строки
    но тут дело обстоит так:

    Код (Text):
    1. .data
    2.     str1    db  'hello world!',0
    3.         [b]p[/b]str1 dd offset str1
    4. .code
    5.     ...
    6.        mov byte ptr [[b]p[/b]str1],12 ;[b]не работает[/b]
    из приведённого выше кода (второго) вытекает задача:
    как изменить первый байт строки, обрабатывая лишь переменную pstr1 (указатель на строку), и не касаясь самой str1
     
  20. splinter

    splinter New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2009
    Сообщения:
    45
    Код (Text):
    1. .data
    2.     str1    db  'hello world!',0
    3.         pstr1 dd offset str1
    4. .code
    5.     ...
    6.        mov byte ptr [pstr1],12 ;не работает