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

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

  1. kamax70

    kamax70 New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    36
    А там этого ret в конце нет.
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    самый сложный случай такой:dntknw:
    Код (Text):
    1. .data
    2. temp db ?
    3. ...
    4. ...
    5. .code
    6. ...
    7. lea ebx, [ "адрес твоего нужного кода" + "размер( в твоём случае 10)" ]
    8. mov temp, [ebx]
    9. mov [ebx], 0xc3
    10. push ebx
    11. call "адрес твоего нужного кодаi"
    12. pop ebx
    13. mov [ebx], temp
    14. ...
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    wsd
    что-то новенькое, даже для 64 битки
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    max7C4
    что придираться к псевдокоду будеш?
    mov byte ptr [ebx], temp
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    wsd
    Я придираюсь к попытке перемещения из памяти в память. И вот этого (за исключением movs) интелловские процы делать не научились.
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    max7C4
    мож у меня камень перепрошит приватным микрокодом)
    шутка
    спасибо за поправку
     
  7. Deymso

    Deymso New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2010
    Сообщения:
    1
    Уважаемые форумчане, выручите пожалуйста! Летняя практика весит.... Надо написать программу, досовскую на asm, самую простую:
    Очень прошу, помогите, и если не сложно опишите комментариями что и где происходит... За ранее благодарен!
     
  8. DoctorWho

    DoctorWho New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2010
    Сообщения:
    87
    Сделано на FASM, только без ф-ции для вывода чисел на экран.
    Кодировка файла 866.
     
  9. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Код (Text):
    1. [b](12/c-d*4+73)/(a*a+1)[/b]
    2. sub bp, bp; bp=0 пригодится ;)
    3. mov ax, a; ax=a
    4. mul ax; ax=ax*ax=a*a
    5. inc ax; ax=ax+1=a*a+1
    6. mov bx, ax; bx=a*a+1
    7. mov ax, 12; ax=12
    8. sub dx, dx; dx=0
    9. ; dx:ax=12
    10. div c; ax=dx:ax/c=12/c
    11. mov cx, ax; cx=12/c
    12. mov ax, d; ax=d
    13. sub dx, dx; dx=0
    14. add ax, ax; ax=ax+ax=d*2
    15. adc dx, bp; dx=carry(ax)
    16. add ax, ax; ax=ax+ax=d*4
    17. adc dx, bp; dx=carry(ax)
    18. add ax, 73; ax=ax+73=d*4+73
    19. adc dx, bp; dx=carry(ax)
    20. add ax, cx; ax=ax+cx=12/c+d*4+73
    21. adc dx, bp; dx=carry(ax)
    22. div bx; ax=dx:ax/bx=(12/c+d*4+73)/(a*a+1)
    Код (Text):
    1. [b](4*c-d/2+23)/(a*a-1)[/b]
    2. mov ax, a; ax=a
    3. imul ax; ax=ax*ax=a*a
    4. dec ax; ax=ax-1=a*a-1
    5. mov bx, ax; bx=a*a-1
    6. mov ax, c; ax=c
    7. mov dx, d; dx=d
    8. sar dx, 1; dx=dx/2=d/2
    9. add ax, ax; ax=ax+ax=ax*2=c*2
    10. add ax, ax; ax=ax+ax=ax*2=c*4
    11. add ax, dx; ax=ax+dx=4*c+d/2
    12. add ax, 23; ax=ax+23=4*c+d/2+23
    13. cwd; dx=sign(ax)
    14. idiv bx; dx:ax/bx=(4*c+d/2+23)/(a*a-1)
     
  10. kreedz

    kreedz New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2010
    Сообщения:
    3
    Дали нам такoе задание, после первoй пары ассемблера:

    Прoгуглил - ничего путнoго не нашёл, воoбще что это и как?

    TASM
     
  11. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    kreedz
    список опций компилятора:
    TASM.EXE /?
     
  12. kreedz

    kreedz New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2010
    Сообщения:
    3
    t00x
    Просмотрел, только не понял, возможно ли это сделать или нет?
     
  13. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Компилятор -- программа, выполняющая перевод текста с языка программирования (в данном случае ассемблера), в объектный модуль (obj-файл). Объектный модуль содержит в себе особым образом подготовленный код (часто называемый бинарным), который может быть объединен с другими объектными модулями при помощи редактора связей (компоновщика) для получения готового исполнимого модуля (exe-/dll-/sys-/com-/ovr-файл) либо библиотеки (lib-файл). Исполнимый модуль (executable file) — файл, содержащий программу в виде, в котором она может быть (после загрузки в память и настройки по месту) исполнена компьютером. А вот уже исполнимый файл выведет на экран символ... Как-то так нас учили
     
  14. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    kreedz
    Скажи преподу, пусть идет в гималаи и заставит рака свистнуть, тогда в компиляторе появится такая опция и ты сможешь выполнить это задание. Типа квест)))
     
  15. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    max7C4
    Скорее задание было следующим: "Ознакомиться с опциями компилятора и линкера, [разобраться, как с помощью компилятора и линкера создаются программы,] написать, скомпилировать, слинковать программу, выводящую символ на экран"
     
  16. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Mikl___
    Я прекрастно понял, что требуется. Мне лишь не понравилась формулировка
     
  17. rozz

    rozz New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2010
    Сообщения:
    21
    Адрес:
    Украина
    Ребят, помогите, пожалуйста, из 10-тичной перевести в 16-ричную и 2-ичную систему счисления (т.е. нужны расписанные действия перевода в 2ю и 16ю). Получить их внутреннее представление, и описание сих чисел на асме.
    1. 1915
    2. 1887
    3. -1887
    4. -1915
    5. 2004
    6. 1976
    7. -1976
    8. -2004
     
  18. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    rozz
    Первый способ преобразование числа из десятичной системы в шестнадцатеричную – сперва находим последнюю цифру, затем предпоследнюю и так далее... но придется запомнить следующую таблицу A=10 B=11 C=12 D=13 E=14 F=15
    Число 1915 переводится следующим образом:
    1915/16=119 остаток 11 по таблице 11=B
    119/16=7 остаток 7
    7/16= 0 остаток 7
    переписываем остатки с конца и получаем число 77B
    Второй вариант перевода десятичного числа в шестнадцатеричное – сперва находим первую цифру, затем вторую и так далее... Для начала придется запомнить степени 16 (16^5=1048576, 16^4=65536, 16^3=4096, 16^2=256). Начинаем с вычисления старшего разряда и определения его порядка в шестнадцатеричном числе, если десятичное число между 1 и 16 миллионами – начинаем с деления на 1048576, если между миллионом и 65 тысячами – начнем с деления на 65536 и так далее. Определившись со степенью n – делим десятичное число на 16^n. Результатом будет первая шестнадцатеричная цифра и остаток. Остаток делится на 16^(n–1) и так далее, пока остаток не станет меньше 16, а степень нулевой. Для примера подсчитаем шестнадцатеричный эквивалент числа 1887
    1887/256=7 остаток 95
    95/16=5 остаток 15
    15/1=15 по таблице 15=F
    1887=75F
    третий способ перевода десятичного числа в шестнадцатеричное – студенческий: щелкаем по клавише «Пуск», открываем стандартные приложения, запускаем калькулятор в режиме инженерный, набираем десятичное число и нажимаем на клавишу F5 или мышкой по переключателю с надписью Hex. На экране калькулятора появится шестнадцатеричный эквивалент числа
    Для перевода из десятеричной системы в двоичную по первому способу придется делить на два до получения частного равного нулю. По второму способу запомнить степени 2 (2^10=1024, 2^9=512, 2^8=256, 2^7=128, 2^6=64, 2^5=32, 2^4=16, 2^3=8, 2^2=4). По третьему способу нажать на F8 или на Bin
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    rozz
    По аналогии с десятичной системой - каждая цифра это остаток от целочисленного деления на 10:
    1915 \ 10 = 191 + остаток = 5
    191 \ 10 = 19 + остаток = 1
    19 \ 10 = 1 + остаток = 9
    1 \ 10 = 0 + остаток = 1
    полученная последовательность остатков и есть искомый набор десятичных цифр 1915

    В двоичной системе соответсвенно делить на 2, для этого см. команды shr, shrd, rcr
    shrd сразу "вдвинет" остаток во второй регистр (не забудь его потом очистить перед следующей цифрой)
    rcr "вдвинет" остаток во флаг переноса (с) (тоже не забудь очисть)
    перед shr можно сделать test с маской 01, котрая даст остаток.

    В шестнадцатеричной системе делить на 16, те-же команды shr, shrd, rcr но сдвиг не на 1 а на 4 (можно четыре раза поряд, можно сразу на 4 с использованием регистра CL). Маска для test будет 015 или 0Fh.
     
  20. rozz

    rozz New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2010
    Сообщения:
    21
    Адрес:
    Украина
    Если бы вариант с калькулятором подошел я была бы только рада и уже давно бы посчитала.. :) Но тут надо расписывание каждого числа (перевода).
    А как там с минусом? Он же там неспроста.

    Попробую сейчас сделать, спасибо!

    И еще, вопрос, в примере мы делим 7/16 = 0 и записываем 7. Всегда если 0 получается - записывать 7 ? Или то первое число, которое делим записывать