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

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

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    edemko
    MSDN
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    edemko
    зеродей перл)
    что бы учить других, надо самому в этом разбираться
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    edemko
    поясню
    найди в отладчике "set interrupt" ?
    прервать выполнения корректно называть поставить брейк поинт "set breackpoint".
    а брейкпоинт бывает софтварный и хардварный. совтварный прерывание 3.
    а поставить прерывание в винде ассоциируется с "IoConnectInterruptEx" или ручной правкой IDT.
    так-что называй поставить брейк поинт
     
  4. idsp

    idsp New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2009
    Сообщения:
    13
    Мне на одном из форумов предложили купить Герберт Шилдт "Программирование на C и C++ для Windows 95" 2 тома за 500р. , но слово Windows 95 меня смутило. Хотя многие уверяют, что там все по делу... я отказался.
     
  5. Die_hard

    Die_hard New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2010
    Сообщения:
    2
    Здравствуйте, у меня вопрос. Как с использованием функций сопроцессора (среда MASM, семейство x86)) вычислить значение следующего выражения:
    y=(x*e^x)/4. (в частности вычисления экспоненты и экспоненты в степени х)
    спасибо.

    вот кусочек кода:
    Код (Text):
    1. fld         dword ptr [x]
    2. fldl2e
    3. fmul
    4. f2xm1
    5. fld1
    6. faddp       st(1),st
    но корректно считает если показатель степени примерно 0.5. как сделать так чтобы вычислялась правильно любая степень экспоненты?
     
  6. google

    google New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2007
    Сообщения:
    140
    Die_hard
    e^x:
    Код (Text):
    1.         fld     dword  [x]
    2.         fldl2e
    3.         fmulp
    4.  
    5.         fld     st
    6.         frndint
    7.         fsub    st1, st
    8.         fxch    st1
    9.         f2xm1
    10.         fld1
    11.         faddp
    12.         fscale
    13.         fstp    st1
     
  7. Die_hard

    Die_hard New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2010
    Сообщения:
    2
    google
    большое спасибо тебе, великий гугл!
     
  8. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    google, молодец!
    Помните об ошибках округления: отбрасывайте дробь полностью.
    Вы наверное хотели сказать не fmulp. :):
    Код (Text):
    1. format pe gui 4.0
    2.  
    3. x dt 2.0
    4.  
    5. entry $
    6.         ;e^x = 2^y = 2^log(2;e^x) = 2^(log(2;e)*x) = 2^(log(2;e)*x).whole * 2^(log(2;e)*x).fraction
    7.         fldl2e
    8.         fld     [x]
    9.         fabs
    10.         fyl2x
    11.         fld     st0
    12.         sub     esp,2
    13.         fstcw   [esp]
    14.         push    word[esp]
    15.         or      word[esp],11b shl 10
    16.         fldcw   [esp]
    17.         frndint
    18.         fldcw   [esp+2]
    19.         add     esp,4
    20.         fsub    st1,st0
    21.         fxch
    22.         f2xm1
    23.         fld1
    24.         faddp
    25.         fscale
    26.         fstp    st1
    27.  
    28.         ret
     
  9. airyashov

    airyashov New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    12
    тут и думать нет, вот код делфы [​IMG]
     
  10. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    спасибо, такой формулы просто не знал, да и народу с толку мог сбить
     
  11. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Код (Text):
    1.         ;неверно
    2.         ;fabs
    3.         ;fyl2x
    4.         ;надо именно fmul
    5.         ;вот код делфи и БОЛЬШОЕ спасибо
    6. function Exp(const X: Extended): Extended;
    7. asm
    8.         {       e**x = 2**(x*log2(e))   }
    9.         FLD     X
    10.         FLDL2E              { y := x*log2e;      }
    11.         FMUL
    12.         FLD     ST(0)       { i := round(y);     }
    13.         FRNDINT
    14.         FSUB    ST(1), ST   { f := y - i;        }
    15.         FXCH    ST(1)       { z := 2**f          }
    16.         F2XM1
    17.         FLD1
    18.         FADD
    19.         FSCALE              { result := z * 2**i }
    20.         FSTP    ST(1)
    21. end;
     
  12. lonely_L

    lonely_L New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    3
    Помогите пожалуйста!!! Вот задачка :
    ASM "Скласти програму для додавання з урахуванням знаку двох двійкових чисел розміром
    n - байт. Результат вивести на екран"
     
  13. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.784
    lonely_L
    Знайди в мережі книгу Юрова "Асемблер практикум" там є твоє завдання, правда російською мовою ...(Найди в сети книгу Юрова "Ассемблер практикум" там есть твоя задача, правда на русском языке...)
     
  14. lonely_L

    lonely_L New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    3
    Огромное спасибо!!!!За то что так быстро откликнулся и помог!!! ;)
     
  15. lonely_L

    lonely_L New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    3
    Дано двовимірний масив 3х3 цілих додатних однозначних цифр. Відсортувати 2 рядок масиву по спаданню. Знайти результат від ділення максимального елемента відсортованого рядка масиву на мінімальний. Результат вивести на екран.
    Може в когось є ідеї???
    Є розв"язок подібної задачі:
    Дано двовимірний масив 3х3 цілих додатних однозначних цифр. Відсортувати 2 стовпець масиву по спаданню. Знайти результат від множення першого елемента відсортованого стовпчика масиву на 2. Результат вивести на екран.
    Код (Text):
    1.  MODEL  small
    2.  STACK  256
    3.  .data
    4.  infa db    0ah,0dh,'INDUVIDUALNE ZAVDANYA,0ah,0dh
    5.  mes1   db  0ah,0dh,'Vhidnuy masuv:$',0ah,0dh
    6.  ;некоторые сообщения
    7.  mes2   db  0ah,0dh,'Vidsortovanuy masuv:$',0ah,0dh
    8.   mes31 db  0ah,0dh,'Rezultat mnozhenya 1-go $',0ah,0dh
    9.   mes32 db  0ah,0dh,'elementa 2-go stovpchuka na 2-y element: $',0ah,0dh
    10.  n  equ 8   ;количество элементов в массиве,
    11.   ;считая с 0
    12.  pr     db  ' $'            
    13.  mas    dw  2,2,1,4,3,9,3,1,5 ;исходный массив
    14.  tmp    dw  0 ;переменные для работы с массивом
    15.  i  dw  0
    16.  j  dw  0
    17.  j2 db  2
    18.  b  dw  0
    19.  .code
    20.  main:
    21.  mov    ax,0003h
    22.  mov    dh,1
    23.  int    10h
    24.  
    25.     mov ax,@data
    26.     mov ds,ax
    27.     xor ax,ax
    28.  ;вывод на экран исходного массива
    29.  mov    ah,09h
    30.     lea dx,infa
    31.     int 21h ;вивід інфи!!!!!!!!!!!!!!!!!!!!!
    32.    
    33.     mov ah,09h
    34.     lea dx,mes1
    35.     int 21h ;вывод сообщения mes1
    36.     mov cx,10
    37.     mov si,0
    38.     ;11111*********************************************************
    39.     per   proc
    40.       mov dh,j2
    41.       mov   ah,02   ; Номер відеофункції 2
    42.         inc dh      ; Збільшити номер рядка на 1
    43.         mov dl,1    ; Стовпець = 1
    44.         int 10h     ; Встановити курсор на початок наступного рядка
    45.         mov j2,dh
    46.         loop m1
    47.  per endp
    48.  m1:
    49.     mov dx,mas[si]
    50.     add dl,30h
    51.     mov ah,02h
    52.     int 21h
    53.     add si,2
    54. ;-------------------------------------------------------
    55.     mov ah,09h
    56.     lea dx,pr
    57.     int 21h
    58.     cmp cx, 7
    59.     je per
    60.     cmp cx, 4
    61.     je per
    62.    
    63.  loop m1
    64.   add j2,1
    65.  cmp b,1
    66.  je mmul;
    67.  
    68. ;11111**************************************************************************
    69.  
    70.     mov i,1         ;инициализация i
    71. ;внутренний цикл по j
    72.  internal:
    73.     mov j,7         ;инициализация j
    74.     jmp cycl_j      ;переход на тело цикла
    75.  exchange:
    76.     mov bx,i        ;bx=i
    77.     shl bx,1
    78.     mov ax,mas[bx]  ;ax=mas[i]
    79.     mov bx,j        ;bx=j
    80.     shl bx,1
    81.     cmp ax,mas[bx]  ;mas[i] ? mas[j] — сравнение
    82.     jge lesser      ;если mas[i] меньше, ----------------------------()yakscho jle to po zrostanyu!!!()---------------------
    83.      ;то обмен не нужен и переход на продвижение
    84.      ;далее по массиву
    85.  ;иначе tmp=mas[i], mas[i]=mas[j], mas[j]=tmp:
    86.  ;tmp=mas[i]
    87.     mov bx,i        ;bx=i
    88.     shl bx,1           ;умножаем на 2, так как  элементы — слова
    89.     mov tmp,ax      ;tmp=mas[i]
    90.  
    91.  ;mas[i]=mas[j]
    92.     mov bx,j        ;bx=j
    93.     shl bx,1            ;умножаем на 2, так  как элементы — слова
    94.     mov ax,mas[bx]  ;ax=mas[j]
    95.     mov bx,i        ;bx=i
    96.     shl bx,1            ;умножаем на 2, так как как элементы — слова
    97.     mov mas[bx],ax  ;mas[i]=mas[j]
    98.  
    99.  ;mas[j]=tmp
    100.     mov bx,j        ;bx=j
    101.     shl bx,1        ;умножаем на 2, так как элементы — слова
    102.     mov ax,tmp      ;ax=tmp
    103.     mov mas[bx],ax  ;mas[j]=tmp
    104.  lesser:            ;продвижение далее по массиву во внутреннем цикле
    105.     sub j,3         ;j--
    106. ;тело цикла по j
    107.  cycl_j:
    108.     mov ax,j        ;ax=j
    109.     cmp ax,i        ;сравнить j ? i
    110.     jg  exchange    ;если j>i, то переход на обмен  ()--
    111.  ;иначе на внешний цикл по i
    112.     add i,3         ;i++
    113.     cmp i,n     ;сравнить i ? n — прошли до
    114.                         ;конца массива
    115.     jl  internal    ;если i<n>
    116.  ;вывод отсортированного массива
    117.     mov ah,09h
    118.     lea dx,mes2
    119.     int 21h
    120.  prepare:
    121.     mov b,1
    122.     mov si,0
    123.     mov cx,10
    124.     call per
    125.    
    126.    
    127. ;*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_*-_   
    128. mmul:  
    129.  
    130.    mov b,ax
    131.    mov tmp,dx  
    132.     mov ah,09h
    133.     lea dx,mes31
    134.     int 21h
    135.    
    136.     mov ah,09h
    137.     lea dx,mes32
    138.     int 21h
    139.  
    140.      
    141.     mov  ax,mas[2]
    142.     mul  mas[8]
    143.    
    144.     mov dx,ax
    145.     add dl,30h
    146.     mov ah,02h
    147.     int 21h
    148.    
    149.  exit:
    150.     mov ax,4c00h    ;стандартный выход
    151.     int 21h
    152.     end main    ;конец программы
    ________________________________________

    Для больших объёмов кода пользуйтесь тегом [code][/code], пожалуйста. - G13
     
  16. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    Ребят в общем такая проблема... До конца июня нужно сдать лабу по асму (первый курс).. Времени сейчас с ним разбираться уже нет((( Код мне написал старший друг, но досада.. Писал он под TASM, а у меня Linux и хотел я писать в NASM((( Переходить под винду не кайф((( Есть ли вариант этот код адаптировать под NASM? Или кто сможет помочь с написанием под NASM...
    Код (Text):
    1. data segment
    2. b db 1,2,3,4,5,6,7,8,9,10
    3. sum dw ?
    4. data ends
    5. code segment
    6. assume cs:code,ds:data
    7. start:
    8. mov ax,data
    9. mov ds,ax
    10. lea bx,b
    11. xor cx,cx
    12. mov cl,10
    13. xor ax,ax
    14. cik:
    15. mov al,[bx]
    16. test al,1b
    17. jnz nech
    18. add sum,ax
    19. nech:
    20. inc bx
    21. loop cik
    22. mov ax,4c00h
    23. int 21h
    24. code ends
    25. end start
    ЗАДАНИЕ: Определить сумму эл. массива В(100) значения которых четные

    Заранее всем спасибо))
     
  17. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    возьми фасм, он есть и под линукс и попробуй макросы с их сайта. там есть макросы для адаптации масм/тасм
    http://board.flatassembler.net/index.php
     
  18. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    Блин, в общем заморачиваться нет времени.... запустил я тасм под Линем... А код, который у меня есть не хотит работать((( Кто умеет, подредактируйте плиз, до рабочего состояния))) а то времени совсем уже нет((( Обещаю, за лето подучить асм))) Возможно даже АиТ))
     
  19. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    А что именно за ошибка у вас возникает?
    На первый (попытка найти ошибки в исходнике) взгляд все должно работать.
    На второй (попытка откомпилировать тасм 4,1) тоже все в порядке за исключением
    , но здесь это не критично. хотя если хотите исправить и это добавьте в начало (или в конец)
    Код (Text):
    1. stck segment stack
    2.  dw 10 dup (?)
    3. stck ends
    в остальном все прекрасно компилируется и работает
    На третий (попытка запустить это под td.exe) тоже все в порядке (как со стеком, так и без него).
     
  20. BVS

    BVS Vladimir

    Публикаций:
    0
    Регистрация:
    25 июн 2010
    Сообщения:
    10
    Адрес:
    Taganrog
    Вот именно она и была, сделал, как вы сказали... теперь все отлично компилится...
    Но при запуске lab.exe ничего не происходит(((
    c:\>lab.exe
    c:\>

    Запускаю все это дело в досбоксе.... в чем проблема не пойму((