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

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

  1. SpiRiToiD

    SpiRiToiD New Member

    Публикаций:
    0
    Регистрация:
    12 май 2009
    Сообщения:
    9
    Ну вот с вашей помощью до чего дошел таки:

    Код (Text):
    1.     .MODEL TINY
    2.     .STACK  100h
    3.  
    4.     .DATA
    5.  
    6.     ;инициализация переменных размером 1 байт
    7.     ;чтобы корректно работал вывод на экран
    8.     ;присваиваем небольшие числа, чтобы в сумме значение было
    9.     ;не больше 9
    10.    
    11.     ;переменной А присваиваем 10 239 434(в десятичной)
    12.    
    13.     A       dw  5 ;5 Om
    14.     B       dw  4 ;4 Oma
    15.     K       dw  3 ;3 Oma
    16.     E       dw  1000; x.xx
    17.     G       dw  10; x.xx
    18.     Temp1   dw  ? ;Z1 abc
    19.     Temp2   dw  ? ;Z2 ab
    20.     Temp3   dw  ? ;Z3 bc
    21.     Temp4   dw  ? ;Z4 ac
    22.     Temp5   dw  ? ;Z5 znamenatel
    23.     Temp6   dw  ? ;Z6 ostatok
    24.    
    25.     ;инициализация строки размером 1 байт на символ
    26.     ASCIIstroka DB  'Rezultat:  .',?,13,10,'$'
    27.  
    28.     .CODE
    29.     mov ax, @Data
    30.     mov ds, ax
    31.    
    32.     mov     ax, A
    33.     mul     B
    34.     mul     K
    35.     mov     Temp1,ax
    36.     mov     ax, A
    37.     mul     B
    38.     mov     Temp2,ax
    39.     mov     ax, B
    40.     mul     K
    41.     mov     Temp3,ax
    42.     mov     ax, K
    43.     mul     A
    44.     mov     Temp4,ax
    45.     mov     ax,Temp2
    46.     add     ax,Temp3
    47.     add     ax,Temp4
    48.     mov     Temp5,ax
    49.     mov     ax,Temp1
    50.     mul     E
    51.     div     Temp5
    52.     add     ax,5
    53.     mov     Temp6,ax
    54.     div     E
    55.            
    56.     mov si, OFFSET ASCIIstroka  ; устанавливаем регистр si в позицию вывода
    57.     add si, 10          ; 26-ый символ в строке ASCIIstroka
    58.  
    59.     mov cx, 10          ; будем делить на 10 число, хранящееся в AX для того чтобы
    60.                     ; выделить все разряды справа налево
    61. metka:                  ; устанавливаем метку "metka"
    62.     xor dx, dx          ; обнуляем dx
    63.     div cx         
    64.     add dx, 30h         ; добавляем 30h для правильного вывода на экран
    65.     mov [si], dl        ; помещаем преобразованную цифру в ASCIIstroka
    66.     dec si          ; уменьшаем si на единицу, т.е перемещаемся по строке влево от
    67.                     ; 15 разряда, что вызвано получением разрядов справа налево
    68.                     ; т.к. за каждый ход мы получаем остаток от деления на 10
    69.     cmp ax, 0           ; сравниваем ax c нулем, т.е. проверяем, преобразовали ли все
    70.                     ; разряды?
    71.     jne metka           ; если ax не равен нулю переходим на metku
    72.    
    73.     mov     ax,Temp6
    74.     div     G
    75.    
    76.     mov si, OFFSET ASCIIstroka  ; устанавливаем регистр si в позицию вывода
    77.     add si, 13          ; 26-ый символ в строке ASCIIstroka
    78.  
    79.     mov cx, 10          ; будем делить на 10 число, хранящееся в AX для того чтобы
    80.                     ; выделить все разряды справа налево
    81. metka2:                 ; устанавливаем метку "metka"
    82.     xor dx, dx          ; обнуляем dx
    83.     div cx         
    84.     add dx, 30h         ; добавляем 30h для правильного вывода на экран
    85.     mov [si], dl        ; помещаем преобразованную цифру в ASCIIstroka
    86.     dec si          ; уменьшаем si на единицу, т.е перемещаемся по строке влево от
    87.                     ; 15 разряда, что вызвано получением разрядов справа налево
    88.                     ; т.к. за каждый ход мы получаем остаток от деления на 10
    89.     cmp ax, 0           ; сравниваем ax c нулем, т.е. проверяем, преобразовали ли все
    90.                     ; разряды?
    91.     jne metka2          ; если ax не равен нулю переходим на metku
    92.                    
    93.     mov     ah, 9               ; выводим строку на экран
    94.     mov     dx, OFFSET ASCIIstroka  
    95.     int     21h
    96.        
    97.     mov     ax, 4C00h      
    98.     int     21h            
    99.  
    100.     END
    И здесь выдается переполнение деления. Сначала умн. на 1000, добавляем 5, затем нужно на 1000 разделить и получим целую часть. Конечно, в остатке большое число. В нете повсюду написано "Вызываем соответствующую обработку деления", и я тут в ступоре - И коим лесом ее вызвать? Не разу не вызывал - препод говорит "делайте так, чтобы ее не было".

    зы. после получения целой части - надо бы дробную выловить - и коим хреном это сделать, ежели в остатке больше 9 нельзя? Делить 3 раза чтоли? На 10 и 100 еще в добавок и собирать число по запчастям?
     
  2. Sergey777

    Sergey777 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    12
    Есть у кого-нибудь резидентная программа для перехвата открытия файлов и занесения их имен в лог файл???
     
  3. Sergey777

    Sergey777 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    12
    Точнее, лог ввода с клавиатуры???
     
  4. fortunerus

    fortunerus New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2008
    Сообщения:
    15
    Подскажите пожалуйста в какую сторону смотреть...

    Задание: Вывести в файл текущий каталог диска A. Пояснить значение выводимых объектов и их отдельных полей. Для поиска объектов использовать только системную функцию 52h.
     
  5. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Здравствуйте,

    Есть задача - получить информацию о текущей системе (Процессор, память, жесткий диск (типы:SCSI или IDE), видеокарта). Информация нужна общая, никаких специальных параметров выдирать мне не нужно.

    Погуглил немного, посмотрел в исходниках - ничего не нашел. Не подскажете где посмотреть или исходник подобного есть где?
     
  6. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    В реестре. Или через enum-функции(фиг знает какие, искать в мсдн). То есть, детального отчета, чтоб подключиться к устройству, прочитать vendor string или что-то подобное, тебе не надо. Надо прочитать свойства текущих устройств, как они установлены в системе.

    Процессор можно определить через GetSystemInfo (можно через cpuid, но это наверно слишком круто :))
    Память через GlobalMemoryStatus.
    Остальное - получив GUID на текущий хардварный профиль из GetCurrentHwProfile, прочитать из реестра.
     
  7. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Держи! (сорц и ехе написано под WinXP)
     
  8. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Mikl___
    FatMoon

    Спасибо большое!
     
  9. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Немного погодя нашелся и третий способ, который лежал на поверхности:
    13/47 = x/1000 x = 13000/47 = 276,59574468085106382978723404255 округляем, чтобы получить 2 знака после запятой (276+5)/10=28
     
  10. SpiRiToiD

    SpiRiToiD New Member

    Публикаций:
    0
    Регистрация:
    12 май 2009
    Сообщения:
    9
    А ты не мог бы код проверить, а то переполнение деления у меня получается(я уверен - что криво написано) - и х3 как с ним справиться... Препод как всегда говорит - пробуй с мелкими числами чтобы не было переполнения :dntknw:
     
  11. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    SpiRiToiD Как-то так
    Код (Text):
    1. .286
    2. .model tiny
    3. .code
    4. org 100h
    5. start:  mov al,x
    6.     mul y
    7.     mov xy,ax
    8.     mul z
    9.     mov xyz,ax
    10.         mov al,z
    11.     mul y
    12.     mov yz,ax
    13.         mov al,z
    14.     mul x
    15.     mov xz,ax
    16.     add ax,yz
    17.     add ax,xy
    18.     mov cx,ax; cx:=xy+yz+xz
    19.     xor dx,dx; dx:=0
    20.     mov ax,xyz
    21.     div cx
    22.     aam
    23.     xchg ah,al
    24.     add ax,3030h
    25.     mov word ptr xx,ax
    26.     mov ax,dx
    27.     mul mile
    28.     div cx
    29.     add ax,5
    30.     xor dx,dx
    31.     div deca
    32.     aam
    33.     xchg ah,al
    34.     add ax,3030h
    35.     mov word ptr [xx+3],ax
    36.     mov dx,offset string
    37.     mov ah,9
    38.     int 21h
    39.     retn
    40. x db 3
    41. y db 4
    42. z db 5
    43. xyz dw 0
    44. xy  dw 0
    45. yz  dw 0
    46. xz  dw 0
    47. mile dw 1000
    48. deca dw 10
    49. string db 'результат равен '
    50. xx db '00,00$'
    51. end start
     
  12. vvik

    vvik New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    3
    Уважаемые программеры помогите решить две задачки в универ, плиз!
    [​IMG]
    [​IMG]
     
  13. BigGreen

    BigGreen New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    34
    vvik
    второй файл есть
    первого у себя на диске С не нашел
    так что увы
     
  14. vvik

    vvik New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    3
    Уважаемые программеры помогите решить две задачки в универ, плиз!
    Код (Text):
    1. Задание 1
    2. Составить программу на асме, которая содержит следующую последовательность действий:
    3. - загружает в POH Ri (регистр общего назначения) байт или слово Di (в зависимости от формата заданного POHа);
    4. - рассылает загруженные данные Di из указанного регистра Ri в последовательно расположенные ячейки памяти, с применением 7 видов адресации к ОЗУ, по принципу: одна посылка – один вид адресации; регистр Rk для косвенной и регистр Rh для индексной адресации, а адрес Al в текущем сегменте первой ячейки ОЗУ для перемещаемых данных заданны:
    5. Ri – DH
    6. Di – C8
    7. Rk – DI
    8. Rh – BX
    9. Al – 0600
    10.  
    11. Задание 2
    12. Составить программу на асме, которая содержит следующую последовательность действий:
    13. - назначает новое основание стека A0 в текущем сегменте стековой памяти, сохранив при этом адрес текущей вершины в незадействованном регистре. A0 – EC00;
    14. - загружает в стек содержимое регистров микропроцессора в последовательности:  ax, si, cx, bx.
    15.  - возвращает из стека с использованием группы команд данные в регистры в соответствии с заданным порядком перестановки. (cx)->bx, (bx)->ax, (ax)->si, (si)->cx;
    16. - восстанавливает старую вершину стека. В стек mov. Из стека pop.
    17. Примечание: все стековые операции должны проводиться в текущем сегменте SS, причём нужно иметь ввиду, что его значение как правило, отличается от значений других сегментных регистров
     
  15. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    vvik
    а сам когда писать научишься?

    Код (Text):
    1. mov DH, 0C8h ;- загружает в POH Ri (регистр общего назначения) байт или слово Di (в зависимости от формата заданного POHа)
    2. mov [0600], 0C8h ;- непосредственная адресация
    3. mov [0601], DH ;- непосредственная регистровая? адресация
    4. mov DI, 0602h;
    5. mov [DI], DH ;- косвенная регистровая адресация
    6. mov BX, 03
    7. mov [0600+BX], DH ;- индексная адресация
    8. mov BX, 0600h
    9. mov [BX+04], DH ;- адресация по базе
    10. mov DI, 05
    11. mov [0600+DI], DH ;- прямая адресация с индексированием (отличается от [0600+BX] тем, что используется индексный (DI) регистр процессора вместо РОНа)
    12. mov BX, 05
    13. mov DI, 0600
    14. mov [DI+BX+1], DH ;- адресация по базе с индексированием
     
  16. vvik

    vvik New Member

    Публикаций:
    0
    Регистрация:
    19 май 2009
    Сообщения:
    3
    t00x, огромное тебе спасибо
    асм 2 раза тока видел, и то на картинках
     
  17. Po1ntMaker

    Po1ntMaker New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2009
    Сообщения:
    6
    Всем привет :)
    у мя такая проблемка...написал 4 курсача людям, а они говорят что не так...
    хотел бы поинтеррисоваться, кто не прав...

    http://slil.ru/27672895

    а вот они мне пример потом скинули...
    http://slil.ru/27672899

    пс. пример конечно красочный, но чтот мне кажется что это лишнее =\ помогите разобраться
     
  18. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Po1ntMaker
    Это ведь то, что я писал в посте #1637.

    Пример да -жесть. Красиво.
     
  19. Po1ntMaker

    Po1ntMaker New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2009
    Сообщения:
    6
    задание тоже. ток у тебя более грамотно сделано...
    думал препод не примет написал сам опираясь на основы...
    так они сейчас отказываются платить, говорят мол не правильно - и ссылаются на пример.

    вот в чём и вопрос...отмазываются(предоставив мне маньяка какова то пример)? или действительно у мя не правильно?
     
  20. StormKnight

    StormKnight New Member

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    1
    здравствуйте уважаемые)
    Помогит пожалуйста сделать задачу на асм. Условие: