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

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

  1. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    да но там еще сброс бита идет
     
  2. Esbolov

    Esbolov New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    83
    как мне сказали даныие фаилы сжаты по алгоритму Хаффмана
     
  3. Rezist

    Rezist New Member

    Публикаций:
    0
    Регистрация:
    9 мар 2008
    Сообщения:
    5
    Помогите сделать резидента.
    Подскажите пожалуста как из приведенной ниже программы сделать резидентную, чтобы запустил её, она "спряталась", кнопочку "B" нажимаешь - динамик пищит, кнопочку "E" нажал - перестал пищать, "ESC" - программа завершилась. Сколько не искал, так и не понял как 27h пользоваться...
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4. .code
    5.     mov    ax,@data
    6.     mov    dx,ax
    7.     mov dx, offset end_program
    8.     int 27h
    9. m:
    10.     mov ah, 07
    11.     int 21h
    12.     cmp al,'b'
    13.     je begin
    14.     cmp al,1Bh
    15.     je end_program
    16.     jmp m
    17. begin:
    18.     mov al,10110110b    ;канал 2, режим 3
    19.     out 43h,al      ;выводим в регистр режима
    20.                 ;порт 43h: управляющий регистр таймера
    21.  
    22.  
    23.  
    24.     mov ax,120Dh       
    25.  
    26.  
    27.     out 42h,al      ;записываем младший байт счетчика
    28.     mov al,ah
    29.     out 42h,al      ;записываем старший байт счетчика
    30.  
    31.  
    32.     in  al,61h      ;текущее состояние порта 61h в AL
    33.  
    34.     or  al,00000011b    ;устанавливаем биты 0 и 1 в 1
    35.     out 61h,al      ;включить динамик
    36.  
    37.  
    38.     mov ah,07
    39.     int 21h
    40.     cmp al,'e'
    41.     je m1
    42.  
    43. m1:
    44.     in  al,61h          
    45.     and al,11111100b    ;обнулить младшие два бита
    46.     out 61h,al      ;выключить динамик
    47.     jmp m
    48.    
    49. end_program:       
    50.     mov    ah,4ch
    51.     int    21h
    52. end
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
  5. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    как вывести на экран при помощи int25h инфу о файлах на дискете?
     
  6. Manjashenka

    Manjashenka New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2008
    Сообщения:
    1
    помогите решить задачу
    Используя отладчик Turbo Debugger, выполнить:
    Составить программу, которая выполнит последовательное суммирование 3 беззнаковых чисел типа слово. Для организации циклического процесса использовать команду LOOP.
     
  7. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Manjashenka
    Код (Text):
    1. .model tiny
    2. .code
    3. org 100h
    4. start: xor bx,bx; bx:=0
    5.         xor dx,dx; dx:=0
    6.         mov si,offset cyfry; позиционируем si
    7.         mov cx,3
    8. a1:    lodsw; последовательно читаем числа в ax
    9.         add bx,ax; складываем их
    10.         adc dx,0; учитываем возникающий перенос
    11.         loop a1
    12. ; результат сложения в dx:bx
    13.         retn ;выходим из программы
    14. cyfry dw 1234h,5678h,9ABCh; 3 беззнаковых числа
     
  8. 4p3

    4p3 New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2008
    Сообщения:
    1
    Доброе время суток, господа. Написал макрос, цель которого строчные латинские буквы переводить в заглавные, но вот беда - он не работает. Компиляция происходит нормально.

    Код (Text):
    1. Upper MACRO str
    2.     LOCAL first_choice, final_choice, next, begin, end
    3.     invoke szLen, str
    4.     mov ecx, eax       
    5.     inc ecx
    6.  
    7.     begin:
    8.             cmp str[ecx-1], 60h
    9.                 jg first_choice
    10.                 jmp next
    11.            
    12.         first_choice:
    13.                     cmp str[ecx-1], 7bh
    14.             jl final_choice
    15.             jmp next
    16.                                
    17.                 final_choice:
    18.             mov al, str[ecx-1]
    19.             sub al, 20h                          
    20.             mov str[ecx-1], al
    21.                 next:
    22.                     dec ecx
    23.                 cmp ecx, 0
    24.                 je end
    25.             jmp begin
    26.     end:   
    27. endm
    Очень благодарен за Ваше внимание и помощь.
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Если не ограничиваться определением макроса, как нечто начинающееся с кейворда макро, то я не сказал бы что это - макрос, но все же, если, предположим ЭТО - макрос, то каким образом он применяется?
    Не нужно делать inc ecx, а сравнение с нулем перенести в начало цикла. Вместо jl/jg нужно использовать jb/ja, хотя в данном случае не принципиально.
    ИМХО, проблема в использовании его неправильном
     
  10. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    4p3
    Макросы, по определению используются для предварительного (до начала трансляции) преобразования текста программы и поэтому в теле макроса вот таких кусков, типа cmp str[ecx-1],60h; sub al,20h; dec ecx быть не может -- там все вычисления происходят за счет REPT, K=K+1, WHILE и т.д. Потом, это совсем не по-дзенски
    Код (Text):
    1. begin: ...         
    2.                 jg first_choice
    3.                 jmp next            
    4. first_choice:  ...
    5.        jl final_choice
    6.        jmp next                                
    7. final_choice:  ...
    8.                je end
    9.       jmp begin
    10. end:
    должно быть так
    Код (Text):
    1. begin: ...         
    2.                 jng next            
    3. first_choice:  ...
    4.        jnl next                                
    5. final_choice:  ...
    6.                jne begin
    7. end:
    а сочетание dec ecx/cmp ecx, 0/je end заменяй на dec ecx/je end
     
  11. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    Задача:сохранить массив рузультата в стеке!
    Дан код, но его надо отредактировать то есть удалить лишние команды(код в конце).
    Код (Text):
    1. mov ss:[di],ah
    этой командой будет происходить сохранение в стеке.
    Для инициализации массива:
    Код (Text):
    1. push bp
    2. mov bp,sp
    3. sub sp, размер_массива_кратный_двум
    И при завершении восстановление стека:
    Код (Text):
    1. И при завершении надо восстановить стек
    Проблема в том что я полностью не могу написать и отредактировать этот код.помогите кто нить!!!
    Код (Text):
    1. Код:
    2. push ds          ; поместить в стек номер адреса возврата
    3. sub ax,ax
    4. push ax          ; в стек номер адреса возврата = 0
    5. mov ax,dseg      ; инициализация сегмента данных
    6. mov ds,ax
    7.  
    8. mov al,07h  ; задание значения константы в регистре al
    9. mov cx,5    ; счетчик элементов в массиве
    10. mov bx,offset source  ; адрес 1-го элемента  массива в регистре bx
    11. lea di, dest   ; приемника-в di
    12.  
    13. again:    mov ah,[bx] ; перемещение элемента  массива с  адресом в регистре[CODE=asm]
    14.  
    15.  bx в регистр  ah
    16. add ah,al   ; прибавить к содержимому регистра ah  содержимое регистра al
    17. mov [di],ah ; перемещение числа из регистра ah в массив-приемник по адресу из регистра di
    18. inc bx     ; увеличение адреса текущего  элемента  в исходном массиве
    19. inc di     ; увеличение адреса текущего элемента в массиве суммы
    20. loop again        ; конец цикла
    21. ret                ; возврат из процедуры
     
  12. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    voland95
    Код (Text):
    1.     push    ds  ; только если требуется сохранить прежнее значение ds
    2.     mov ax, dseg
    3.     mov ds, ax
    4.  
    5.     sub sp, 6   ; число итераций цикла, округленное вверх до четного
    6.     mov di, sp
    7.     mov si, offfset source
    8.     mov cx, 5   ; число итераций цикла
    9.  
    10. again:
    11.     mov al, [si]
    12.     inc si
    13.     add al, 7
    14.     mov ss:[di], al
    15.     inc di
    16.     loop    again
    17.    
    18.     add sp, 6   ; число итераций цикла, округленное вверх до четного
    19.     pop ds  ; только если требуется сохранить прежнее значение ds
    20.     retn
    как-то так
     
  13. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    ок! спасибо! не мог бы ты если не сложно подписать значение строчек.и еще я не понял что за число итераций цикла, округлённое вверх до чётного? или хотя бы на словах алгоритм работы!плз!
     
  14. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    и тогда полный код будет таким?
    Код (Text):
    1.  title lab3
    2.      page ,132
    3.  
    4. sta segment para stack 'stack'
    5.   db 64 dup('stack')  
    6. sta ends
    7. dseg segment
    8. source db 01h,0afh,0fh,08h ; исходный массив
    9. dest db 4 dup(?) ; зарезервировано для нового массива
    10. dseg ends
    11.  
    12. subttl lab3
    13. page
    14.  
    15. cseg segment
    16.    assume cs:cseg,ds:dseg,ss:sta
    17.  
    18.   entry proc far ; начало процедуры
    19.   push  ds  ; только если требуется сохранить прежнее значение ds
    20.     mov ax, dseg
    21.     mov ds, ax
    22.  
    23.     sub sp, 6   ; число итераций цикла, округленное вверх до четного
    24.     mov di, sp
    25.     mov si, offfset source
    26.     mov cx, 5   ; число итераций цикла
    27.  
    28. again:
    29.     mov al, [si]
    30.     inc si
    31.     add al, 7
    32.     mov ss:[di], al
    33.     inc di
    34.     loop    again
    35.    
    36.     add sp, 6   ; число итераций цикла, округленное вверх до четного
    37.     pop ds  ; только если требуется сохранить прежнее значение ds
    38.     retn
    39.      entry endp          
    40. cseg ends            
    41. end entry
    Буду очень благодарен
     
  15. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    voland95
    Я для DOS года 3 не программировал, могу щас все перепутать. Я уже не помню, нужно ли вообще делать mov ax, dseg/mov ds, ax
    Спроси лучше у Mikl__, он вроде неплохо разбирается или еще кого-нибудь
     
  16. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    спс тебе конечно, а как к нему обратиться?
     
  17. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    voland95
    Я бы сказал, но не скажу :) Жди пока он сам сюда заглянет
     
  18. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    так он может ваще юда не заглянет а мне через 3 дня сдавать.Я кучу форумов перебрал уже только здесь более менее помогли!!!
     
  19. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    voland95
    Ну, что теперь поделаешь... Сдашь потом... Уж прости...
    Думаю кто-нибудь тебе все же напишет ответ
     
  20. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28