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

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

  1. CocoJombo

    CocoJombo New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    10
    Спасибо хоть за Это. Попытаюсь сделать. У нас третья пара по ассемблеру а уже вот что дают решать.. Бешенный темп.. =(
     
  2. voland95

    voland95 New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    28
    срочно проверьте код.Завтра сдавать!Выполняется ли сохранение результата в стеке!!!
    Код (Text):
    1. .286; -  используются все команды для 16-разрядного процессора Intel
    2. .model small; - модель памяти (применяется в большинстве ЕХЕ под DOS)
    3. .data ; - всё вместе это стандартое начало ЕХЕ файла в TASM или MASM
    4. source db 01h,0afh,0fh,08h ;исходный массив
    5. dest db 4 dup(?);зарезервировано для нового массива
    6. .code
    7. start: mov ax,data
    8. mov ds,ax
    9. call voland; вызываем процедуру для обработки массива
    10. proc lab3
    11. push ss
    12. pop es; перенацеливаем дополнительный сегмент данных на стек (es=ss)
    13.         mov cx,4 ;счетчик элементов в массиве              
    14.         mov si,offset source
    15.         cld ; заполняем массив от первых адресов к последним
    16.         mov di,sp; указатель стека используем, как обычный регистр указатель
    17. ;(также как и bx, si, di)
    18. again: lodsb;mov al,ds:[si] si:=si+1 читаем данные из исходного массива
    19.          cmp al,0fh ;сравнение элемента с 0fh
    20.           je e      ;если равен ,то переход на метку е
    21.           jb a       ;если меньше, то - на а
    22.           sub al,0fh  ;вычитание
    23.           jmp e      ;переход на е
    24.      a: add al,0fh;сложение
    25.      e: stosb;сохранение элемента из регистра-аккумулятора al/ax/eax в последовательности (цепочке). mov es:[di],al inc di все равно что mov ss:[sp],al  и inc sp
    26.          loop again;конец цикла
    27.          sub sp,4; теперь стек снова указывает на начало преобразованного массива который мы затолкали в стек
    28. ret;конец цикла который мы затолкали в стек
    29. endp lab3;конец процедуры
    30. end start;конец программного модуля
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    01:23 / 1:0 = 1:2 ;-P
    Лайк,
    Код (Text):
    1.     mov dx, 01
    2.     mov ax, 23  ; 1.23(hex)
    3.     mov cx, 10  ; 1.0
    4.     div cx      ; ax == 12, т.е. 1.2 (hex)
    Я имел в виду вот этот момент:
    Код (Text):
    1.     mov eax, 00124000
    2.     xor edx, edx
    3.     ror eax, 16     ; eax == 40000012
    4.     xchg ax, dx     ; edx == 00000012, eax == 40000000
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    прекрасно, что ассемблер предоставляет возмозможность писать как вздумается :)
     
  5. CocoJombo

    CocoJombo New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    10
    нефига не вышло =(
     
  6. CocoJombo

    CocoJombo New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    10
    Блин с 1ой задачей день просидел не выходит ничего =( Кому не трудно помогите..
     
  7. FireFox

    FireFox New Member

    Публикаций:
    0
    Регистрация:
    9 май 2008
    Сообщения:
    19
    Здраствуйте!

    Нужно срочно решить задачу про системный динамик. Параметра два: частота и длительность звука.

    Я нашел такой пример у Зубкова:
    Код (Text):
    1. ; Процедура beep
    2. ; издает звук с частотой 261 Hz (нота "ми" средней октавы)
    3. ; длительностью 1/2 секунды на динамике
    4. beep    proc       near
    5.         mov        al,10110110b         ; канал 2, режим 3
    6.         out        43h,al
    7.         mov        al,0Dh               ; младший байт делителя
    8.                                         ; частоты 11D0h
    9.         out        42h,al
    10.         mov        al,11h               ; старший байт делителя частоты
    11.         out        42h,al
    12.         in         al,61h               ; текущее состояние
    13.                                         ; порта 61h в AL
    14.         or         al,00000011b         ; установить биты 0 и 1 в 1
    15.         out        61h,al               ; теперь динамик включен
    16.         mov        cx,0007h             ; старшее слово числа микросекунд паузы
    17.         mov        dx,0A120h            ; младшее слово числа микросекунд паузы
    18.         mov        ah,86h               ; функция 86h
    19.         int        15h                  ; пауза
    20.  
    21.         in         al,61h
    22.         and        al,11111100b         ; обнулить младшие два бита
    23.         out        61h,al               ; теперь динамик выключен
    24.         ret
    25. beep    endp
    Но, к сожалению, он не работает. Почему?

    А вот почти аналогичный код, но который работает:
    Код (Text):
    1. .model tiny
    2. .code
    3. org 100h
    4. program:
    5.     ;подготовка таймера
    6.     mov al,10110110b    ; канал 2, режим 3
    7.     out 43h,al
    8.  
    9.     ; частота 440 герц
    10.     mov al,97h                                        
    11.         out 42h,al
    12.         mov al,0Ah
    13.         out 42h,al
    14.  
    15.     ;включение динамика
    16.     in al,61h
    17.     or al, 00000011b
    18.     out 61h, al
    19.  
    20.     mov cx,0007h    ; старшее слово числа микросекунд паузы
    21.         mov dx,0A120h   ; младшее слово числа микросекунд паузы
    22.         mov ah,86h      ; функция 86h
    23.         int 15h     ; пауза
    24.  
    25.  
    26.     and al, 11111100b ;очистить биты 0 и 1
    27.     out 61h, al ;передать на динамик
    28.  
    29.     or al, 00000011b ;установить бит 1
    30.     out 61h, al ;передать на динамик
    31.  
    32.     ret
    33. end program
    Но на паузу ноль внимания. Так вот, как решить сию задачу?
     
  8. Odin

    Odin New Member

    Публикаций:
    0
    Регистрация:
    11 май 2008
    Сообщения:
    2
    Всем доброго дня, помогите решить пожалуйста, заранее благодарен.
    1.Написать команду, обеспечивающую выполнение следующей операции (для МП ВМ86):
    [(BX)]<-0000.
    Определить время выполнения команды (частоту генератора задать самостоятельно), а также объем занимаемой памяти.
    2.Установить 1, 3, 5 биты порта 0 (для МК51).
    3.Написать для МП ВМ86 фрагмент программы для вычисления выражения:
    z=2*(X+YT),
    где X, Y, T – беззнаковые операнды, хранящиеся в ячейках памяти с адресами, находящимися соответственно в регистрах BX, CX, DX.
    Результат занести в аккумулятор.
    Определить время выполнения программы (частоту генератора задать самостоятельно), а также объем занимаемой памяти.
    4.Расшифровать следующую команду, заданную машинным кодом, и записать ее мнемонику (для МП ВМ86):
    10001001001.
    Определить время выполнения команды (частоту генератора задать самостоятельно), а также объем занимаемой памяти.
    5.Загрузить управляющее слово в регистр управления таймером (для МК51).
    6.Написать для МП ВМ86 фрагмент программы, обеспечивающий сложение двух 16-битовых слов, хранящихся в парах ячеек памяти, начиная с ячейки с меткой BEG. Результат необходимо поместить в ячейку с меткой RES. Определить время выполнения программы (частоту генератора задать самостоятельно), а также объем занимаемой памяти.
     
  9. CocoJombo

    CocoJombo New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    10
    Помгите решить задачу... Которую выкладывал ниже.. Оплачу веб мани! :o
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    CocoJombo
    у тебя как полное название специальности и сколько курсов ты мучаешся?
     
  11. CocoJombo

    CocoJombo New Member

    Публикаций:
    0
    Регистрация:
    2 май 2008
    Сообщения:
    10
    Защита и безопасность компьютерных систем.. 1 курс.. 5000000 раз пожалел, что поступил 8(
     
  12. stallker

    stallker New Member

    Публикаций:
    0
    Регистрация:
    9 май 2008
    Сообщения:
    360
    А что не так?
     
  13. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    CocoJombo по первому пункту читай это
     
  14. JOHN

    JOHN New Member

    Публикаций:
    0
    Регистрация:
    13 май 2008
    Сообщения:
    8
    Небольшие, несложные задачи... Если можно на Tasm, ну или Masm.
    1) Дано натуральное число n. Чему равна его старшая цифра?

    Вродь более-менее разобрался, но не пойму куда пихнуть число с клавы и в каком виде оно будет...Ну допустим 123456789 если ввести, то в регистр оно не влезет, как же тогда? Как вариант-запомнить первую же цифру, вводимую оператором, но как это осуществить?
    Если можно дайте исходники хотя примерно такой задачи...

    Добавлено: Прописываю я единицу в АХ, пишу 20-ое прерывание. После этого пользователь пишет само число...Куда да оно сохраняется, и в каком виде?

    2)Вывести на экран информацию БИОС по адресу F000:FFFFh
     
  15. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    хоспади. Пропиши в AL число D0h (т.е. 208). Возьми первый символ введённого числа и сложи его с этим AL. На выходе в AL у тебя окажется первая цифра.
     
  16. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    C чего ты взял, что его ввели с клавиатуры - дано, значит оно находится в памяти компьютера. Число 123456789d=75BCD15h занимает в памяти 4 рядом расположенных байта т.е [rez]=15h [rez+1]=0CDh [rez+2]=5Bh [rez+3]=7 и вполне входит в пару регистров dx:ax далее последовательно делишь это число на 10 а остаток от деления+'0' это и есть ASCII-код десятичных цифр из которых оно состоит. Деление идет до тех пор, пока делимое не станет равным нулю, остаток от последнего деления и есть твоя старшая цифра. На дворе конец учебного года, а вы с задачами для первокласников:)
    20-ое прерывание прерывание это в какой системе - если 20h - завершение программы, если 20d=14h или может быть имелось в виду 22d=16h?
    Зачем первая функция 16h прерывания? Используй функцию 0Ah 21h прерывания - она вводит строку длиной до 254 символов, выводя эти символы на экран. Ввод символов продолжается до тех пор, пока не нажата клавиша Enter. Адрес памяти, куда будет помещена строка символов, указан в регистрах DS:lol: X. Для ввода 50-символьной строки надо отвести 53 байта памяти. Первый байт будет содержать число байтов отведенных для этой строки плюс 1 для символа возврата каретки. Второй байт — число реально введенных символов. Последний байт отводится под символ возврата каретки.
    Код (Text):
    1. mov ah,0Ah  ;номер функции
    2. mov dx,offset BUFFER    ;адрес буфера
    3. int 21h
    4. ;в области данных
    5. BUFFER db 51,0      ;дескрипторы буфера
    6.  db 51 DUP(?) ;сам буфер
    Для ввода строки символов с клавиатуры без вывода ее на экран (например для ввода пароля) применяется функция 3Fh прерывания 21h. На адрес памяти куда будет помещена строка указывают регистры DS:lol: X. Поместите в регистр BX ноль, в регистр CX — максимальное число символов и вызывайте прерывание 21h
    Код (Text):
    1. mov ah,3Fh      ;номер функции
    2. mov dx,offset BUFFER    ;адрес буфера
    3. mov bx,0
    4. mov cx,51
    5. int 21h
    И сколько байтов начиная с F000:FFFFh требуется вывести, и в каком виде? "Пойди туда - не знаю куда, принеси то - не знаю что"(С)
     
  17. DANILA

    DANILA New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    4
    помогите !!!
    3адача на ассемблере ввод вывод в делфи мне просто надо помочь реали3овать алгоритм решения я3ыком ассемблера , там 5 мин в принципе кто умеет помогите :
    найти все простые числа до 3адонного n у которых сумма своих чисел в кубе равна самомуже числу, 12= 1*3+2*3 ну вот так вроде тока етот пример неправелен ето так для ноглядности
     
  18. JOHN

    JOHN New Member

    Публикаций:
    0
    Регистрация:
    13 май 2008
    Сообщения:
    8
    Mikl__
    )) Думал что правда разобрался с ассемблером...Сложно переключиться мне с высокоуровневых языков на асм, все стереотипные принципы программирования кардинально меняются.
    Большое спасибо, буду разбираться..

    А насчет Биоса-больше ничего не дано...

    ps. ...да, я обшибся, все-таки 21h
     
  19. DANILA

    DANILA New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    4
    "Студентам с вопросами о лабораторных работах сюда" ВОТ ЕТО НА3ВАВНИЕ СТРАНИ4КИ С ЕТОГО ФОРУМА, У МЕНЯ ЕСТЬ ВОПРОС НО АТВЕТА НЕТУ.
     
  20. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    DANILA а ты попробуй этот алгоритм на дельфи написать и выложи, а на асм я тебе переведу, а так лень:)