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

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

  1. alexey278

    alexey278 New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2007
    Сообщения:
    6
    за SAZ спасибо! а ещё какие нибудь ошибки есть?
     
  2. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Klipper
    Условие задачи какое-то туманное. С двухбайтными числами по адресам понятно. Неясно куда девать массив.
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Klipper
    Hn - это старший байт n-ного множителя.
    Ln - это младший байт n-ного множителя.
    Код (Text):
    1. A = H1 * 2^8 + L1
    2. B = H2 * 2^8 + L2
    3.  
    4. R = A * B = (H1 * 2^8 + L1) * (H2 * 2^8 + L2) = H1 * H2 * 2^16 + (H1 * L2 + H2 * L1) * 2^8 + L1 * L2
    5.   = (H1 * H2) << 16
    6.   + (H1 * L2 + H2 * L1) << 8
    7.   + L1 * L2
    Итого, имеем 4 8-битных умножения и 2 16-битных сложения с учётом carry.

    Давайте введём дополнительные обозначения:
    Код (Text):
    1. L1 * L2           = R0   (16 bit)
    2. H1 * L2 + H2 * L1 = R1   (16 bit)
    3. H1 * H2           = R2   (16 bit)
    4. I.   Младшие 8 бит R равняются младшим 8 битам R0
    5. II.  Следующие 8 бит R равняются старшим 8 битам R0 + младшие 8 бит R1
    6. III. Следующие 8 бит R равняются старшим 8 битам R1 + младшие 8 бит R2 + carry от II
    7. IV.  Следующие 8 бит R равняются старшим 8 битам R2 + carry от III
    В базовом наборе инструкций i8080 нет ни 8-битного умножения, ни 16-битного сложения, но обе операции можно запросто организовать на базе 8-битного сложения. Примеры можно найти в гугле для Z80 (он совместим с i8080).
     
  4. Marquis

    Marquis New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2007
    Сообщения:
    2
    добрый вечер. подскажите пожалуста как реализовать считывание с клавиатуры алгебраической функции или выражения. Например строка содержит фукцию: (x^2+2*x+sin(x))/(cos(x)+x^2) или любой другой (с логорифмом, експонентой...). Если есть возможность, приведите пожалуста пример алгоритма.
    заранне благодарен.
     
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Quantum

    А команда DAD B например?

    http://www.computer-museum.ru/technlgy/i8080.php
     
  6. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    Marquis
    ну дык синтаксический разбор. Нисходящий рекурентный типо того называется)) Преобразование выражения к виду дерева..
    вот думаю по таким ключевым словам гугль найдет примеры алгоритнов))
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    t00x
    Да, а я и не знал, что существует аппаратная реализация. Лучше просветиться поздно, чем никогда ;)

    CrazyFun
    Проще через стек. Гугл находит примерно по "infix to potfix". Кстати, автор ничего не говорил про синтаксический разбор.
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Quantum
    Так конечно же быстрее.

    Marquis
    http://algolist.manual.ru/syntax/revpn.php - подходит?
     
  9. Marquis

    Marquis New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2007
    Сообщения:
    2
    вроди оно. надо будет разобратся, и попробовать по аналогии на асемблере написать. принцип понял, надо будет только еще поработать над более сложными функциями и синтаксисом. Спасибо всем)
     
  10. rolnik

    rolnik New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2007
    Сообщения:
    3
    Помогите пожалуйста написать задачку, а то болел долго, вышел - зачет надо сдавать, а я не знаю ничего почти. Вот условие:
    Дан файл со словами, записать в другой файл слова начинающиеся на "а", а в третий - заканчивающиеся на "а".
    Компилятор masm.
    Заранее спасибо, очень надеюсь на вашу помощь.
     
  11. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    rolnik
    писать за тебя код врядли кто станет. Расскажи что знаешь а в реализации чего затрудняешся. Тогда может тебе и ответят
     
  12. rolnik

    rolnik New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2007
    Сообщения:
    3
    ну больше всего меня интересует как непосредственно найти слово которое например начинается на "а". На С++ реализация не вызовет затруднений, а как на асме сделать - не знаю.
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rolnik
    Видимо речь идёт про 16-битный ассемблер (масм/тасм) под ДОС, т.е. файл нужно читать через прерывания и т.д.? Или можно 32-битный masm использовать вместе с API-функциями Windows? Если второе, то можно написать программу на чистом C, поотключать в компиляторе всякие CRT, сгенерировать ассемблерный листинг (в вижуале это делается опцией /Fa: cl.exe /Fa<assembly file name> <C source file>)
     
  14. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    rolnik
    Вкратце: если первая буква слова "а", то слово начинается на "а".
    Если это не первое или последнее слово в файле, то слова разделяются пробелами.
    Итого:
    Ищешь букву "а". Нашёл. Если она самая первая в файле или перед ней пробел, то найдено слово, которое начинается на "а".
    Аналогично с последней буквой "а" в слове, но после последней буквы в слове может идти, например, точка или запятая.

    Например поиск буквы "а"
    Код (Text):
    1.     lea di, [file_data]        ; адрес начала данных из файла в di
    2.     mov cx, file_data_length   ; длина данных (размер файла)
    3.  
    4. @find_a:
    5.     cmp byte ptr [di], 'a'          ; сравнить текущий символ с 'a'
    6.           jne @ne_a                       ; переход, если не 'a'
    7.           ; Здесь найдено 'a'
    8. @ne_a:                ; символ не 'a'
    9.     inc di                          ; di++
    10.     loop @find_a          ; повторять, пока --cx > 0
     
  15. rolnik

    rolnik New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2007
    Сообщения:
    3
    Quantum, t00x, спасибо большое. Разобрался написал и сдал.
     
  16. _XAzKEP_

    _XAzKEP_ New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2007
    Сообщения:
    4
    Я ТИПА ТАК И НЕ ВПЕРСЯ ПРО ЧТО БАЗАР НО ПОЖАЛУЙСТА НЕ СМЕЙТЕСЬ!
     
  17. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    здраствуйте, у меня возник вопрос к написанию проги: сканирование и замена символа в строке. Помогите пожалуйста дописать её, уж никак не поддается :dntknw:
    Код (Text):
    1. .MODEL small
    2. .STACK 64
    3. .DATA
    4. TITLE   STRING  (EXE)  Сканирование и замена в тексте
    5. ;--------------------------------------------------------
    6. org                             150h
    7. MAXNLEN DB      30h             ;Длина поля STRING
    8. ACTNLEN DB      ? ;максимальная длина
    9. STRING DB      30h DUP(' ')     ;Текст
    10. t1      DB         0dh,0ah,"vvedite tekst:"
    11.         db        0dh, 0ah, "$"
    12. t2      DB         0dh, 0ah, "bukvu, kotoruy nado zamenit':"
    13.         db        0dh, 0ah, "$"
    14. STRING2  DB      30h DUP(' ')     ;Текст
    15. t3      DB         0dh,0ah,"na kakyu?:"
    16.         db        0dh, 0ah, "$"
    17. STRING3 DB      30h DUP(' ')     ;Текст
    18. t4      DB         0dh,0ah,"vivod"
    19.         db         0dh, 0ah, "$"
    20. ;--------------------------------------------------
    21. ;Сегмент кодов
    22. .CODE
    23. ;Основная процедура
    24. kurs    PROC              
    25.         MOV     AX,@data
    26.         mov     ds, ax
    27.         mov     es, ax  
    28. d1:     lea     dx, t1
    29.         mov     ah,09h
    30.         int     21h
    31.         lea     di, STRING  
    32.         call    ink ; ввод предложения
    33.         push    ax
    34.         lea     dx,t2
    35.         mov     ah,9h
    36.         int     21h
    37.         lea     si, STRING2
    38.         call    ink2 ; Ввести БУКВУ            
    39.         lea     dx, t3
    40.         mov     ah,09h
    41.         int     21h
    42.         lea     di, STRING3
    43.         call    ink3 ; Ввести БУКВУ
    44.         CALL    F10SCAS         ;Найти ,букву
    45.  
    46.         ret
    47. kurs   ENDP
    48. ink proc
    49. ; Процедура ввода предложения
    50.         xor                  cx,cx
    51.   l1:
    52.         mov                  ah,1
    53.         int                  21h
    54.         stosb
    55.         inc                  cx
    56.         cmp                  al,0dh
    57.         jnz                  l1
    58.         dec                  cx
    59.         ret
    60.   ink endp
    61.   dis proc
    62. ;Процедура вывода на экран предложения
    63. z1: mov                    cl,[di]
    64.         mov                  ah,2
    65.         int                  21h
    66.         inc                  di
    67.         loop                 z1
    68.         ret
    69.   dis endp
    70. ink2 proc
    71. ;------------------------------------------
    72. ; Процедура ввода буквы
    73.         xor                  bx,bx
    74.   l2:
    75.         mov                  ah,1
    76.         int                  21h
    77.         stosb
    78.         inc                  bx
    79.         cmp                  al,0dh
    80.         jnz                  l2
    81.         dec                  bx
    82.         ret
    83.   ink2 endp
    84.   dis2 proc
    85. ;Процедура вывода на экран буквы
    86. z2: mov                    bl,[si]
    87.         mov                  ah,2
    88.         int                  21h
    89.         inc                  si
    90.         loop                 z2
    91.         ret
    92.   dis2 endp
    93.   ink3 proc
    94. ;-----------------------------------------
    95. ; Процедура ввода буквы
    96.         xor                  dx,dx
    97.   l3:
    98.         mov                  ah,1
    99.         int                  21h
    100.         stosb
    101.         inc                  dx
    102.         cmp                  al,0dh
    103.         jnz                  l3
    104.         dec                  dx
    105.         ret
    106.   ink3 endp
    107.   dis3 proc
    108. ;Процедура вывода на экран буквы
    109. z3: mov                    dl,[di]
    110.         mov                  ah,2
    111.         int                  21h
    112.         inc                  di
    113.         loop                 z3
    114.         ret
    115.   dis3 endp
    116. ;-----------------------------------------
    117. ;Поиск буквы в предложении:
    118. ;               -----------------------
    119. F10SCAS PROC
    120.         cld
    121.         lea    si, STRING2
    122.         mov    al, [si]
    123.         mov    ax,30 ;Длина сканирования - 30
    124.         LEA    di,STRING                
    125.         REPE SCASW
    126.         ......
    127.         ......        
    128.         ......
    129. F10SCAS ENDP
    130. end kurs
    131. ;------------------------------------
    буду очень благодарен, если еще укажите мне на ошибки
     
  18. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    ребят срочно...завтра прогу уже сдавать надо. Плиззз очень прошу
     
  19. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. F10SCAS PROC
    2.         cld
    3.         lea    si, string
    4.         mov cx, 30
    5.         mov bl, byte ptr [string2]
    6.         mov dl, byte ptr [string3]
    7. __1:  mov    al, [si]
    8.         cmp  al, bl
    9.         je  __zamena
    10.         inc si
    11.         dec cx
    12.         jnz __1
    13.         jmp __exit
    14. __zamena: xchg [si], dl
    15. __exit: retn
    16. F10SCAS ENDP
    в программе черт ногу сломит, вроде так.
     
  20. terry

    terry New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2007
    Сообщения:
    7
    censored спасибо тебе!
    тока в проге мне надо использовать scasw. Я подставил твой кусочек...компиляция ошибок не обнаружила...но проблема в том что когда я ввожу последнюю букву и нажимаю enter курсор просто бегает по экрану... :dntknw: