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

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

  1. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Razmus
    Объясняю, вот у тебя матрица X размером 3х4, т.е. m=3 n=4 из слов (dw)
    пример, который привел я - для массива байтов, для массива слов необходимо переделать следующим образом
    Код (Text):
    1. .data
    2. sum dw 0
    3. count dw 0
    4. .code
    5. mov cx,12; количество элементов в матрице n*m
    6. mov sum,0
    7. mov count,0
    8. mov si,offset X; адрес первого элемента
    9. cld ; двигаемся в сторону увеличения адресов
    10. a1:  lodsw; получаем очередной элемент ax<-ds:[si] si+=2
    11.       test ax,8000h
    12.       jz a2; если больше или равно нулю - к следующему элементу
    13.       add sum,ax
    14.       inc count
    15. a2: loop a1; переходим к следующему элементу
    16.    mov ax,sum
    17.    cwd;dx=0FFFFh
    18.    idiv count
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Yep
    Код (Text):
    1. mov esi,offset buffer
    2. a1:   lodsb
    3.         cmp al,'g'
    4.         jne a1
    5. a2:    lodsb
    6.         cmp al,'b'
    7.         jne a2
    8. a3:   lodsb
    9.         cmp al,'e'
    10.         jne a3
    11. a4:    lodsb
    12.         cmp al,'i'
    13.         jne a4
    14. a5:   lodsb
    15.         cmp al,'n'
    16.         jne a5
    Вариант со scasb
    Код (Text):
    1. mov ecx,n; количество символов в буфере
    2. mov edi,offset buffer
    3. mov al,'g'
    4. repne scasb
    5. jecxz bad
    6. mov al,'b'
    7. repne scasb
    8. jecxz bad
    9. mov al,'e'
    10. repne scasb
    11. jecxz bad
    12. mov al,'i'
    13. repne scasb
    14. jecxz bad
    15. mov al,'n'
    16. repne scasb
    17. jecxz bad
    оба варианта можно расписать через макросы, но это уже сам:)
     
  3. Yep

    Yep New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2007
    Сообщения:
    11
    Mikl__
    просидев до 4х утра я всетаки сам осилил ее со scasb
    но всеравно спасибо что посмотрел = )
     
  4. creeper

    creeper New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    132
    Решил не создавать новую тему ради такой мелочи. Вкратце: отъехала клавиша на ноуте, не работает ни в какую. Клавиша - стрелка вниз. Надо бы повесить действие этой клавиши на... правый Альт к примеру.
    Ради одного такого действия неохота держать целый MacroExpress. Если кто сможет накидать по-быстрому программу, буду благодарен :). Сам под винду программирую редко, но код понять смогу. На С/асме - без разницы, лишь бы не тяжелая была :).
     
  5. Trofimof

    Trofimof New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2007
    Сообщения:
    3
    А по моему вопросу никто не знает ничего? :)
     
  6. Den4X

    Den4X New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2008
    Сообщения:
    5
    Всем привет. Сессия начинается, а я не сделал свой курсак.
    Если кому-то не сложно помочь, буду благодарен.
    У меня такое задание: нужно создать на asme dll библиотеку, функции которай будут выводить 3D объекты шар там, куб и т.д. Короче я буду в проге например на Basicе кнопку шар жать, а из asm библиотеки функция вызывается и тут у меня кубик вертится или другая фигура.
     
  7. Den4X

    Den4X New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2008
    Сообщения:
    5
    Please, люди помогите, хотя бы просто программу, я её потом в dll как нибудь сам перевести попытаюсь. А то я сколько справочников по OpenGL читал так и не разобрался нормально...
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Дык надо было учебники читать ;) Там же элементарно выводится шар. Делаешь на асме обертку которая будет это делать и все..
     
  9. Den4X

    Den4X New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2008
    Сообщения:
    5
    Ну нормально же попросил. Я не тупой просто щас проблем много и некогда делать. А OpenGL мы не изучали, это курсак на повышенные балы, сам знаю что не сложно, но непонятно как там всё это подготавливаетс для вывода 3D. Я так понял фигура задаётся между GLBegin ... Glend, но там же ещё надо как-то окно GL создать, поверхность подготовить и Rendering сделать... Кому не впадлу хоть source простенький примерно похожий киньте.
     
  10. altcore

    altcore New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2006
    Сообщения:
    22
    нужно написать процедуру, складывающую два числа без использования add. Vj;yj использовать команды цикла и команды инкремента/декремента. Параметры передаются через регистры. Помогите, пожалуйста.
     
  11. altcore

    altcore New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2006
    Сообщения:
    22
    тхаха, блин, че-то я ступил! Ж-) это же проще простого :lol:
     
  12. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    altcore
    а можно и без использования инк/дек а только логическими операциями и сдвигом - смотрите здесь
     
  13. avov

    avov New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    1
    Помогите решить задание:
    перевести бинарное(bin) число в хексидецимальную(hex) сиситему исчесления
    программа на асемблере для i8080
     
  14. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Не напутал? Может быть i8086?
     
  15. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    avov
    Берешь по 4 бита и таблицей преобразования (xlat например или аналогично вручную)
     
  16. naidgel

    naidgel New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2008
    Сообщения:
    4
    Код (Text):
    1. ; pm4.asm
    2.  
    3.  
    4.  
    5.     .386p
    6. RM_seg segment para public 'CODE' use16
    7.     assume cs:RM_seg,ds:PM_seg,ss:stack_seg
    8. start:
    9. ; подготовить сегментные регистры
    10.     push    PM_seg
    11.     pop ds
    12.  
    13. ; очистить экран
    14.     mov ax,3
    15.     int 10h
    16. ; вычислить базы для всех дескрипторов сегментов данных
    17.     xor eax,eax
    18.     mov ax,RM_seg
    19.     shl eax,4
    20.     mov word ptr GDT_16bitCS+2,ax
    21.     shr eax,16
    22.     mov byte ptr GDT_16bitCS+4,al
    23.     mov ax,PM_seg
    24.     shl eax,4
    25.     mov word ptr GDT_32bitCS+2,ax
    26.     mov word ptr GDT_32bitSS+2,ax
    27.     shr eax,16
    28.     mov byte ptr GDT_32bitCS+4,al
    29.     mov byte ptr GDT_32bitSS+4,al
    30. ; вычислить линейный адрес GDT
    31.     xor eax,eax
    32.     mov ax,PM_seg
    33.     shl eax,4
    34.     push    eax
    35.     add eax,offset GDT
    36.     mov dword ptr gdtr+2,eax
    37. ; загрузить GDT
    38.     lgdt    fword ptr gdtr
    39. ; вычислить линейные адреса сегментов TSS наших двух задач
    40.     pop eax
    41.     push    eax
    42.     add eax,offset TSS_0
    43.     mov word ptr GDT_TSS0+2,ax
    44.     shr eax,16
    45.     mov byte ptr GDT_TSS0+4,al
    46.     pop eax
    47.     add eax,offset TSS_1
    48.     mov word ptr GDT_TSS1+2,ax
    49.     shr eax,16
    50.     mov byte ptr GDT_TSS1+4,al
    51. ; открыть A20
    52.     mov al,2
    53.     out 92h,al
    54. ; запретить прерывания
    55.     cli
    56. ; запретить NMI
    57.     in  al,70h
    58.     or  al,80h
    59.     out 70h,al
    60. ; переключиться в PM
    61.     mov eax,cr0
    62.     or  al,1
    63.     mov cr0,eax
    64. ; загрузить CS
    65.     db  66h
    66.     db  0EAh
    67.     dd  offset PM_entry
    68.     dw  SEL_32bitCS
    69.  
    70. RM_return:
    71. ; переключиться в реальный режим RM
    72.     mov eax,cr0
    73.     and al,0FEh
    74.     mov cr0,eax
    75. ; сбросить очередь предвыборки и загрузить CS
    76.     db  0EAh
    77.     dw  $+4
    78.     dw  RM_seg
    79. ; настроить сегментные регистры для реального режима
    80.     mov ax,PM_seg
    81.     mov ds,ax
    82.     mov es,ax
    83.     mov ax,stack_seg
    84.     mov bx,stack_l
    85.     mov ss,ax
    86.     mov sp,bx
    87. ; разрешить NMI
    88.     in  al,70h
    89.     and al,07FH
    90.     out 70h,al
    91. ; разрешить прерывания
    92.     sti
    93. ; завершить программу
    94.     mov ah,4Ch
    95.     int 21h
    96. RM_seg ends
    97.  
    98. PM_seg segment para public 'CODE' use32
    99.     assume  cs:PM_seg
    100.  
    101. ; таблица глобальных дескрипторов
    102. GDT label   byte
    103.         db  8 dup(0)
    104. GDT_flatDS  db  0FFh,0FFh,0,0,0,10010010b,11001111b,0
    105. GDT_16bitCS db  0FFh,0FFh,0,0,0,10011010b,0,0
    106. GDT_32bitCS db  0FFh,0FFh,0,0,0,10011010b,11001111b,0
    107. GDT_32bitSS db  0FFh,0FFh,0,0,0,10010010b,11001111b,0
    108. ; сегмент TSS задачи 0 (32-битный свободный TSS)
    109. GDT_TSS0    db  067h,0,0,0,0,10001001b,01000000b,0
    110. ; сегмент TSS задачи 1 (32-битный свободный TSS)
    111. GDT_TSS1    db  067h,0,0,0,0,10001001b,01000000b,0
    112. gdt_size = $-GDT
    113. gdtr    dw  gdt_size-1  ; размер GDT
    114.     dd  ?       ; адрес GDT
    115. ; используемые селекторы
    116. SEL_flatDS equ  001000b
    117. SEL_16bitCS equ 010000b
    118. SEL_32bitCS equ 011000b
    119. SEL_32bitSS equ 100000b
    120. SEL_TSS0 equ    101000b
    121. SEL_TSS1 equ    110000b
    122.  
    123. message1 db '1,2,3,4,5,6,7 '
    124. len_mes1=$-message1
    125. message2 db 'Hello iz task_2'
    126. len_mes2=$-message2
    127.  
    128. ; сегмент TSS_0 будет инициализирован, как только мы выполним переключение
    129. ; из нашей основной задачи. Конечно, если бы мы собирались использовать
    130. ; несколько уровней привилегий, то нужно было бы инициализировать стеки
    131. TSS_0   db  68h dup(0)
    132. ; сегмент TSS_1. В него будет выполняться переключение, так что надо
    133. ; инициализировать все, что может потребоваться:
    134. TSS_1   dd  0,0,0,0,0,0,0,0         ; связь, стеки, CR3
    135.     dd  offset task_1           ; EIP
    136. ; регистры общего назначения
    137.     dd  0,0,0,0,0,stack_l2,0,0,0B8140h  ; (ESP и EDI)
    138. ; сегментные регистры
    139.     dd  SEL_flatDS,SEL_32bitCS,SEL_32bitSS,SEL_flatDS,0,0
    140.     dd  0       ; LDTR
    141.     dd  0       ; адрес таблицы ввода-вывода
    142.  
    143. ; точка входа в 32-битный защищенный режим
    144. PM_entry:
    145. ; подготовить регистры
    146.     xor eax,eax
    147.     mov ax,SEL_flatDS
    148.     mov ds,ax
    149.     mov es,ax
    150.     mov ax,SEL_32bitSS
    151.     mov ebx,stack_l
    152.     mov ss,ax
    153.     mov esp,ebx
    154. ; загрузить TSS задачи 0 в регистр TR
    155.     mov ax,SEL_TSS0
    156.     ltr ax
    157. ; только теперь наша программа выполнила все требования к переходу в
    158. ; защищенный режим
    159.  
    160.     xor eax,eax         ; dak eto, obnulenie eax?
    161.     mov edi,0B8000h ; DS:EDI - адрес начала экрана
    162.     mov     cx, len_mes1
    163.     mov     esi, offset message1
    164.     mov ah,07h
    165.    
    166. task_0:
    167.     mov al,byte ptr cs:[esi]    ; zanosim v al krainiy simvol        
    168.     mov word ptr ds:[edi],ax    ; вывести символ AL на экран
    169. ; дальний переход на TSS задачи 1
    170.     db  0EAh
    171.     dd  0
    172.     dw  SEL_TSS1
    173.     add edi,2       ; DS:EDI - адрес следующего символа
    174.     inc esi     ; AL - код следующего символа,
    175.     dec     cx
    176.     jnz task_0  ; выйти из цикла
    177. ; дальний переход на процедуру выхода в реальный режим
    178.     db  0EAh
    179.     dd  offset RM_return
    180.     dw  SEL_16bitCS
    181.  
    182. ; задача 1
    183. task_1:
    184.         mov     dl,0h
    185.         mov     bl,1h
    186.  
    187. ;vnutr cikl
    188. task_2:
    189.         mov     cl,dl
    190.         mov al,dl
    191.         shr al,4
    192.     add al, '0'
    193.     cmp al, '9'
    194.     jbe m3
    195.     add al, 'A'-'9'-1
    196. m3:
    197. mov ah,07h
    198. mov word ptr ds:[edi],ax
    199.     add edi,2           ; єтхышўшЄ№ рфЁхё ёшьтюыр
    200.     mov   al,dl
    201.    
    202.       and al,0fh ; ЄvЇїvї¤°ї №vЁЇ-їє¦ иЁўи ЇЁ в°¬vЁ
    203.     add al,'0'
    204.     cmp al,'9'
    205.     jbe m4
    206.     add al, 'a'-'9'-1 ; ї¬v°  ¦v¦в°v°¬¦ -ї¬к¤. A, B, C, D, E, F
    207. m4:    
    208.     mov ah,07h
    209.     mov word ptr ds:[edi],ax
    210.         add edi,4
    211.  
    212.        
    213. ; переключиться на задачу 0
    214.     db  0EAh
    215.     dd  0
    216.     dw  SEL_TSS0
    217.         add     dl,bl
    218.         mov     bl,cl
    219.         cmp     dl,0ffh
    220.         jbe     task_2                    
    221. ; сюда будет приходить управление, когда задача 0 начнет выполнять переход
    222. ; на задачу 1 во всех случаях, кроме первого
    223. ;   mov ecx,02000000h   ; небольшая пауза, зависящая от скорости
    224. ;   loop    $       ; процессора
    225.     jmp task_1
    226.  
    227. PM_seg ends
    228.  
    229. stack_seg segment para stack 'STACK'
    230. stack_start db  100h dup(?) ; стек задачи 0
    231. stack_l = $-stack_start
    232. stack_task2 db  100h dup(?) ; стек задачи 1
    233. stack_l2 = $-stack_start
    234. stack_seg ends
    235.     end start
    Добрый день! Проблема такая в строках 26 28 31 32 34 35 42 44 49 51 54 56 ошибка "Forward reference needs override"(Ошибка при использовании умолчания для ссылки вперед).

    26. mov word ptr GDT_16bitCS+2,ax

    Как исправить можно? спасибо откликнувшимся
     
  17. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    mov word ptr segment:[GDT_32bitCS+2], ax
     
  18. naidgel

    naidgel New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2008
    Сообщения:
    4
    Magnum тоже самое в тех же строках. И ошибка с этим вроде не связана.
     
  19. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    http://www.citforum.ru/programming/tasm3/tasm3_p5.shtml

     
  20. naidgel

    naidgel New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2008
    Сообщения:
    4
    Magnum Первым делом по гуглил). Читал понятного мало. Как исправить конкретно?