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

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

  1. Daphne

    Daphne Оксана

    Публикаций:
    0
    Регистрация:
    27 июн 2009
    Сообщения:
    4
    Адрес:
    Белгород
    нет. размер курсора мне нужен при выводе символов. т.е. я хочу их увеличить.
    а линии у меня рисуются пикселями
     
  2. Zmey_Gorynych

    Zmey_Gorynych New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2009
    Сообщения:
    4
    Привет, я нашел в Интернете небольшой исходничек, и кое-что в нем смог расшифровать. Мне было бы очень приятно, если бы вы помогли мне расшифровать остальное. Ну или ссылки на статьи, где я могу узнать о расшифровке. Гуглить и яндексить пробовал - везде исходники программ, но нигде о сегметах кода коментарий не дается.

    Я вопросиками отметил, где не могу понять назначение сегмента кода. Прошу помощи, завтра мне это нужно отвечать... Опомнился как всегда в последний день, что-то повезло найти в справочнике, что-то сам. Но кое-что все же не нашел.

    Заранее спасибо.
     
  3. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    а че там?
    mov ax,di ;???
    mov dx,0 ;???
    div bp ;???
    -- это нужно для деления ах на бп, т.к. делится дхах на бп, то дх сбросить
    mov di,dx ;???
    mov dl,bl ;???
    mov ah,02h ;???
    --вывод символа в дл
    mov dl,8 ; Стереть предыдущий символ
    mov ah,2 ;???
    ---дл =код бэкспейса
     
  4. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    а При чем тут траблы с сегментом кода? в начале я тут особо и не замтил обращение к памяти, так что настройка ds в начале вроде не к чему..
     
  5. Zmey_Gorynych

    Zmey_Gorynych New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2009
    Сообщения:
    4
    rdtsc, благодарю, меня вот чего интересовало еще:
    - Что означает на нашем человеческом языке сие(что выполняет 2 в ah):
    mov ah,2 ;???
    int 21h

    - И сие(что выполняет 32 в dl):
    mov dl,32 ;???
    int 21h

    - И почему:
    mov dl,8 написано 2 раза? Если одну из них удалить, то не будет работать корректно, я попробовал. Но почему именно 2?

    - И вот про сие поподробнее - вывод в dl, эт как?
    mov di,dx ;???
    mov dl,bl ;???
    mov ah,02h ;??

    Искренне извиняюсь за назойливость.
     
  6. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Это... про прерывания читал? Про сервисы ДОС? 2 в ah ничего не выполняет - это просто 2 в ah. А вот int 21h - по значению в ah определяет номер функции.
    Функция 02 - вывод символа в dl.
    Ну да, нормально. У тебя в коде цикл. Бейсик знаешь?
    Код (Text):
    1. INumber = 0               'di
    2. nDigits = 0                 'si
    3. Base = 10                  'bp
    4. 11:                           'метка r1
    5. a$ = inkey$()               'al <- {ah=8, int 21h}
    6. if a$<"0" then goto 33   'специальный символ, требует иной обработки, скорее всего - конец ввода числа
    7. if a$>"9" then goto 11   'игнорируем и вводим следующий
    8. b$=a$
    9. on error resume 11      'при любых переполнениях идем вводить следующую цифру, игнорируя текущую
    10. INumber=INumber*10+(b$-"0")    'умножаем все ранее введенное на 10 и прибавляем еще одну цифру
    11. nDigits = nDigits+1       'счетчик цифр увеличиваем
    12. print b$                     'dl = bl, ah = 02, int 21h
    13. goto 11
    14. 33:                           'метка r3
    15. ...
    Ну а перекидывание значений из одного регистра в другой - это чтоб не затерлось при операциях.
     
  7. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    А это еще проще. "08" - это не удаление символа, это возврат на символ. То есть, имеем:

    ****х_
    (первый раз dl= 8, int 21h)
    ****x
    (выводим пробел на место последнего символа, dl = 32, int 21h)
    **** _
    (второй раз dl= 8, int 21h - сдвигаемся на введенный пробел назад)
    ****_
     
  8. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Daphne
    функция изменяет размер курсора, не символа. При этом вид курсора меняется только в полном экране (если под windows), в окне курсор так и будет в одну линию.
    Размер символа изменить простыми способами нельзя. Для каждого видеорежима заданы размеры символов. Если для данного режима 80*25 - значит 80*25. Хочешь визуально более крупные буквы - меняй на режим 40*25. Или в графическом режиме отрисовывай свои символы, но это посложнее, чем вывести линию.
     
  9. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    ЗмейГорынка, а что тебе вобще надо запрограмировать?
    По простому если, в 2х словах
     
  10. Zmey_Gorynych

    Zmey_Gorynych New Member

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

    Последний вопрос: для чего нужен вывод в dl? Я понимаю - вывод на экран, на печать, но вывод в переменную это как и для чего? Эт все таки у меня как экзамен идет эта задачка, могут доколебаться до чего угодно.
     
  11. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    dl - не переменная в Оперативной памяти, а оперативный регистр процессора (своего рода регистровая память ЦПУ, очень быстрая).
    Реализация сервиса ДОС по выводу на экран такова, что нужно класть тот символ, который мы хотим вывести именно в регистр ДЛ..
    Более понятно думаю не объяснишь.
    Ты можешь сам написать функцию например обслуживающую прерывание 66h (от фонаря), которая будет делать тоже самое что и сервис ДОС , но брать символ для вывода не в ДЛ а например в ДШ или АЛ, да где угодно, хоть в стеке
     
  12. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    mov di,dx ;???
    mov dl,bl ;??? в БЛ мы сохранили символ и кладем его в ДЛ.
    mov ah,02h ;??
    int 21h
    ---
    Вот тут описан этот сервис ДОС
    http://www.codenet.ru/progr/dos/dos_0010.php
    а вот все сервисы ДОС
    http://www.codenet.ru/progr/dos/int_0026.php

    Но лучше всего возьми справочник Ральфа Брауна - более подробно по прерываниям биос,дос ты врядле где найдешь
     
  13. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Когда ты вызываешь прерывание int 21h, и AH=2, DL=20h например,
    то вызовется код сервиса ДОС,который будет вызывать сервис БИОС ( int 10h) или же писать напрямую в текстовую видеопамять , в результате чего отобразиться на экране символ
     
  14. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Вот похожий вопрос и вызвал у меня в юности интерес к этому чудному (если не сказать чуднОму) языку..Казалось бы какието чиселки, короткие междометия, и вдруг на тебе - КРУЖОЧЕК на экране...
    В этом и есть магия ассемблера...
     
  15. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Офтоп, можете стереть..Но прослеживается даже например такой ассоциативный ряд:

    нах въеб,2
    бл* ты,нах
    вжо ху*,3
    ёбъ 21h
    ----
    Очень похоже на понятно что..
     
  16. Zmey_Gorynych

    Zmey_Gorynych New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2009
    Сообщения:
    4
    Респект помогавшим, теперь буду подкован.
     
  17. FreaK

    FreaK New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2009
    Сообщения:
    4
    Люди помогите плиз. На практику на самостоятельное изучение асемблер дали а я хрен вникнуть могу. Если не сложно напишите исходник m=(2*c+d/4+23)/(a*a-1) и n=(2*b-38*c)/(b+a/c+1) Заранее очень благодарен.
     
  18. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    FreaK
    а какой транслятор? или просто, в псевдокоде?

    вот. (правда, все-таки пусть кто-нибудь проверит)
    Код (Text):
    1. ;;; первое выражение
    2.  
    3. ;; вычисляем (a*a-1)
    4. mov    ax, a   ;; AX = a
    5. mul     a        ;; AX = AX*a
    6. dec     ax      ;; AX = AX-1
    7. mov    bx, ax  ;; BX = AX (временно сохраняем).
    8.  
    9. ;; вычисляем (2*c+d/4+23)
    10. mov    ax, c    ;; AX = c
    11. shl      ax, 1    ;; AX = AX * 2 (сдвиг битов влево на 1)
    12. mov    dx, d    ;; DX = AX
    13. shr      dx, 2    ;; DX = DX/4 (сдвиг битов вправо на 2)
    14. add     ax, dx   ;; AX = AX+DX
    15. add     ax, 23   ;; AX = AX+23
    16.  
    17. xor      dx, dx   ;; DX = 0 (старшие 16 бит делимого)
    18. div      bx        ;; AX = AX/BX
    19. mov    m, ax
    20.  
    21. ;;; второе выражение.
    22.  
    23. ;; вычисляем (b+a/c+1)
    24. mov    dx, 0    ;; DX = 0 (старшие 16 бит делимого)
    25. mov    ax, a    ;; AX = a
    26. div      с         ;; AX = AX / c
    27. add     ax, b    ;; AX = AX+b
    28. inc      ax       ;; AX = AX+1, инкремент (прибавление единицы).
    29. mov    bx, ax   ;; (временно сохраняем).
    30.  
    31. ;; вычисляем (2*b-38*c)
    32. mov    ax, b    ;; AX = b
    33. shl      ax, 1    ;; AX = AX*2
    34. mov    cx, ax   ;; CX = AX
    35. mov    ax, c    ;; AX = c
    36. mov    dx, 38   ;; DX = 38
    37. mul     dx        ;; AX = AX*38
    38. sub     cx, ax   ;; CX = CX-AX
    39. mov    ax, cx   ;; AX = CX
    40.  
    41. xor     dx, dx
    42. div     bx        ;; AX = AX/BX
    43. mov    n,ax
     
  19. FreaK

    FreaK New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2009
    Сообщения:
    4
    спасибо огромное
     
  20. FreaK

    FreaK New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2009
    Сообщения:
    4
    ток чето у мну не компилируется(