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

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

  1. Kostyanivanich

    Kostyanivanich New Member

    Публикаций:
    0
    Регистрация:
    20 май 2009
    Сообщения:
    1
    Какой вид будет иметь программа на ассемблере для процессора TMS320C6x?
    В ячейках памяти (ЯП) с 12 по 16 размещены ненулевые слова(32разрядные двоичные числа) блока (в блоке восемь слов), в ЯП 17 - номер первого ненулевого слова блока, в ЯП с 18 по 21 - расстояния между номерами остальных ненулевых слов блока. В ЯП, начиная с 22, разместить слова восстановленного блока.

    Буду благодарен за любую помощь...если что-то неясно описал, постараюсь пояснить...
     
  2. TARANTYL

    TARANTYL New Member

    Публикаций:
    0
    Регистрация:
    21 май 2009
    Сообщения:
    1
    Какой вид будет иметь программа на ассемблере для процессора TMS320C6x?
    Задача: в ЯП, начиная с 106, сформировать блок, первое слово которого содержит только одну единицу и в старшем разряде; второе слово – только две единицы и в старших разрядах; третье – только три единицы и в старших разрядах; и так далее.

    Заранее всем спасибо за помощь!

    P.S. методичка по процессору TMS320C6x http://depositfiles.com/files/pdagqjs8d
     
  3. LIDA

    LIDA New Member

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

    #include <stdafx.h>
    #include <iostream>
    #include <math.h>
    #include <windows.h>
    #include <conio.h>
    using namespace std;


    int _tmain(int argc, _TCHAR* argv[])
    {
    wcout.imbue(locale("rus_rus.866"));
    wcout<<L" Программа решает заданный пример в зависимости от значений х и у." << endl;


    float x;
    float y;
    float e = 0.05; //точность вычисления
    float f;


    wcout<<L"Примем значение f(x) равным f" << endl;
    wcout<<L"Пожалуйста, введите x в пределе [-0.5;1.2]" << endl;
    cin >> x;
    wcout<<L"Пожалуйста, введите y в пределе [0.0;0.4]" << endl;
    cin >> y;

    cout<<"c++"<<endl;
    if(x >= y) //при условии, что х больше, либо равен у
    {

    wcout<<L"f = " <<log10(fabs(x*(1+y)))<<endl;

    }

    else

    if(x < y)
    {

    Код (Text):
    1.  
    Код (Text):
    1.  
    Код (Text):
    1.  
    wcout<<L"f = " <<(1+x)/(1+y)*pow(e,-fabs(x+y))<< endl;

    }

    wcout<<L"Ваш пример решен"<<endl;
    cout<<"assembler"<<endl;
    _asm
    {


    }
    getch ();
    return 0;
    }
     
  4. Alex4361

    Alex4361 New Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    7
    Разработать резидентную ассемблер-программу-ключ клавиатуры. Программа должна блокировать ввод с клавиатуры при нажатии комбинации клавиш: Shift(лев.)+Shift(прав.)+пробел. Разблокировка - по вводу пароля. В программе должен быть отработан способ ее выгрузки.
     
  5. Alex4361

    Alex4361 New Member

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

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    117
    Alex4361
    Вот покопался в инете, нашел прогу близкую к твоей задаче и переделал ее. Заранее извиняюсь если там остался мусор от оригинала.

    Код (Text):
    1. text segment 'code'
    2.  
    3. assume cs:text,ds:text
    4.        org 100h
    5. main proc
    6.        jmp init
    7. ; Поля данных резидентной секции
    8. old_2fh dd 0                    ; Ячейка для сохранения системного вектора 2Fh
    9. old_09h dd 0                    ; Ячейка для сохранения системного вектора 09h
    10. locked db 0                     ; Клава заблочена
    11. pass db 'pass'
    12. sch db 0
    13. ; Обработчик от клавиатуры
    14. new_09h proc
    15.        ; Сохраним используемые регистры
    16.        push ax
    17.        push bx
    18.        push cx
    19.        push dx
    20.        push ds
    21.        push cs                  ; Настроим DS на наш сегмент для простоты программирования
    22.        pop ds
    23.        in al, 60h               ; Получим скан-код клавиши
    24.        cmp cs:locked,1
    25.      je need_pass
    26.        cmp al, 0B9h             ; нажат пробел
    27.        jne exit
    28.        push es                  ; Сохраним регистр ES
    29.        mov ax,40h               ; Настроим ES на начало области данных BIOS
    30.        mov es,ax
    31.        mov al,es:[17h]          ; Занесём байт флагов клавиатуры в AL
    32.        pop es                   ; Восстановим ES
    33.        cmp al,3                 ; Нажаты оба шифта
    34.        jne exit
    35.        mov cs:locked, 1
    36.        jmp exit
    37.      need_pass:
    38.        cmp al, 80h
    39.        ja exit
    40.       push bx
    41.        xor bx, bx
    42.        mov bl, cs:sch
    43.        cmp [cs:pass+bx], al
    44.        je incc
    45.        mov cs:sch, 0
    46.        incc:
    47.        inc cs:sch
    48.        cmp cs:sch, 3
    49.        jb gogogo
    50.        mov cs:locked, 0
    51.        gogogo:
    52.       pop bx
    53.     exit:
    54.        pop ds
    55.        pop dx
    56.        pop cx
    57.        pop bx
    58.        pop ax
    59.        cmp cs:locked, 1
    60.        je none
    61.        jmp cs:old_09h           ; Передадим управление системному обработчику "int09h"
    62.      none:
    63. new_09h endp            ; Конец процедуры обработчика от клавиатуры
    64.  
    65. ; Обработчик мультиплексорного прерывания
    66. new_2fh proc
    67.        cmp ah,0f1h              ; Проверим номер функции мультиплексорного прерывания
    68.        jne out_2fh              ; Не наша - на выход
    69.        cmp al,00h               ; Подфункция проверки на повторную установку?
    70.        je inst                  ; Да, сообщим о невозможности повторной установки
    71.        cmp al,01h               ; Подфункция выгрузки?
    72.        je off                   ; Да - на выгрузку
    73.        jmp short out_2fh                ; Неизвестная подфункция, на выход
    74.    inst:  mov al,0ffh           ; Программа уже установлена
    75.        iret                     ; Выход из прерывания
    76. out_2fh:
    77.        jmp cs:old_2fh           ; Переход в  следующий по цепочке обработчик прерывания 2Fh
    78. ; Выгрузим программу из памяти, предварительно восстановив все перехваченные ею векторы
    79. ; Сохраним используемые регистры
    80.    off:   push ds
    81.        push es
    82.        push dx
    83. ; Восстановим вектор 09h
    84.        mov ax,2509h             ; Функция установки вектора
    85.        lds dx,cs:old_09h                ; Заполним DS:DX
    86.        int 21h
    87. ; Восстановим вектор 2fh
    88.        mov ax,252fh             ; Функция установки вектора
    89.        lds dx,cs:old_2fh                ; Заполним DS:DX
    90.        int 21h
    91. ; Получим из PSP адрес собственного окружения и выгрузим его
    92.        mov es,cs:2ch            ; ES   окружение
    93.        mov ah,49h               ; Функция освобождения блока памяти
    94.        int 21h
    95. ; Выгрузим теперь саму программу
    96.        push cs                  ; Загрузим в ES содержимое CS, т.е. сегментный адрес PSP
    97.        pop es
    98.        mov ah,49h               ; Функция освобождения блока памяти
    99.        int 21h
    100. ; Восстановим использовавшиеся регистры
    101.        pop dx
    102.        pop es
    103.        pop ds
    104.        iret                     ; Возврат в вызвавшую программу
    105. new_2fh endp                    ; Конец процедуры обработки прерывания 2Fh
    106. end_res=$                       ; Смещение конца резидентной части программы
    107. main endp
    108. tail db 'off'                   ; Ожидаемый хвост команды
    109. flag db 0                       ; Флаг требования выгрузки
    110. ; Процедура инициализации
    111. init proc
    112.        mov cl,es:80h            ; Получим длину хвоста PSP
    113.        cmp cl,0                 ; Длина хвоста = 0 ?
    114.        je live                  ; Да программа запущена без параметров
    115.        xor ch,ch                        ; Теперь CX=CL=длина хвоста
    116.        mov di,81h               ; DS:SI   хвост в PSP
    117.        lea si,tail                      ; DS:SI   поле tail
    118.        mov al,' '                       ; Уберём пробелы из начала хвоста
    119. repe   scasb                    ; Сканируем хвост, пока пробелы
    120.        dec di                   ; DI   первый символ после пробелов
    121.        mov cx,3                 ; Ожидаемая длина параметра
    122. repe   cmpsb                    ; Сравниваем введённый хвост с ожидаемым
    123.        jne live                 ; Введена неизвестная команда
    124.        inc flag                 ; Введено "off", установим флаг запроса на выгрузку
    125. ; Проверим, не установлена ли уже данная программа
    126. live:  mov ah,0f1h              ; Установим нашу функцию
    127.        mov al,0                 ; и подфункцию на наличие нашей программы в оперативной памяти
    128.        int 2fh
    129.        cmp al,0ffh              ; Программа установлена?
    130.        je installed             ; Да, при наличии запроса на выгрузку её можно выгрузить
    131. ; Сохраним вектор 2fh
    132.        mov ax,352fh             ; Функция получения вектора 2fh
    133.        int 21h
    134.        mov word ptr cs:old_2fh,bx       ; Сохраним смещение системного обработчика
    135.        mov word ptr cs:old_2fh+2,es     ; Сохраним сегмент системного обработчика
    136. ; Заполним вектор 2fh
    137.        mov ax,252fh             ; Функция установления вектора прерывания 2fh
    138.        mov dx,offset new_2fh    ; Смещение нашего обработчика
    139.        int 21h
    140. ; Сохраним вектор 09h
    141.        mov ax,3509h             ; Функция получения вектора 09h
    142.        int 21h
    143.        mov word ptr cs:old_09h,bx       ; Сохраним смещение системного обработчика
    144.        mov word ptr cs:old_09h+2,es     ; Сохраним сегмент системного обработчика
    145. ; Заполним вектор 09h
    146.        mov ax,2509h             ; Функция установления вектора прерывания 09h
    147.        mov dx,offset new_09h    ; Смещение нашего обработчика
    148.        int 21h
    149. ; Выведем на экран информационное сообщение
    150.        mov ah,09h               ; Функция вывода на экран
    151.        lea dx,mes               ; DS:DX   адрес строки
    152.        int 21h
    153.        mov ax,3100h             ; Функция "завершиться и остаться резидентным"
    154.        mov dx,(end_res-main+10fh)/16    ; Размер в параграфах
    155.        int 21h
    156. installed:
    157.        cmp flag,1               ; Запрос на выгрузку установлен?
    158.        je unins                 ; Да, на выгрузку
    159. ; Выведем на экран информационное сообщение
    160.        mov ah,09h               ; Функция вывода на экран
    161.        lea dx,mes1              ; DS:DX   адрес строки
    162.        int 21h
    163.        mov ax,4C01h             ; Функция завершения с кодом возврата
    164.        int 21h
    165. unins:
    166. ; Перешлём в первую (резидентную) копию программы запрос на выгрузку
    167.        mov ax,0f101h            ; Наша функция с подфункцией выгрузки
    168.        int 2fh                  ; Мультиплексное прерывание
    169. ; Выведем на экран информационное сообщение
    170.        mov ah,09h               ; Функция вывода на экран
    171.        lea dx,mes2              ; DS:DX   адрес строки
    172.        int 21h
    173.        mov ax,4c00h             ; Функция завершения программы
    174.        int 21h
    175.        mes  db 'Program installed$'
    176.        mes1 db 'Program already installed$'
    177.        mes2 db 'Program is DIE$'
    178. init endp
    179. text ends
    180. end main
    Вот только с паролем есть заморочка, ну нинаю я как отлаживать резидентов, которые еще и клаву блокируют.

    ЗЫ, ребят мож поможите подправить ?
     
  7. SpiRiToiD

    SpiRiToiD New Member

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

    Введенное число проверяем на больше 1000 - ссылка на error, меньше 0 - ссылка на error. А если в пределах - сохранить в переменную. Я думаю - проблема распространенная - посему найти подобное будет не сложно. Если не сложно - именно ссылочку на похожую программу...
     
  8. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
  9. holdon

    holdon New Member

    Публикаций:
    0
    Регистрация:
    26 май 2009
    Сообщения:
    3
    нужен пример тулбара, где на кнопке есть и рисунок и подпись, на масме. Нашел только примеры без подписей.
     
  10. holdon

    holdon New Member

    Публикаций:
    0
    Регистрация:
    26 май 2009
    Сообщения:
    3
    почему функция invoke SendMessage, hToolBar,TB_ADDSTRINGS,0,OFFSET TBText
    ставит на все кнопки первое значение из массива?

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include C:\masm32\include\windows.inc
    6. include C:\masm32\include\user32.inc
    7. include C:\masm32\include\kernel32.inc
    8. include C:\masm32\include\comctl32.inc
    9.  
    10. includelib C:\masm32\lib\user32.lib
    11. includelib C:\masm32\lib\kernel32.lib
    12. includelib C:\masm32\lib\comctl32.lib
    13.  
    14. szText MACRO Name, Text :VARARG;
    15. LOCAL lb1
    16. jmp lb1
    17. Name db Text, 0
    18. lb1:
    19. ENDM
    20.  
    21. m2m MACRO M1, M2;
    22. push M2
    23. pop  M1
    24. ENDM
    25.  
    26. return MACRO arg
    27.   mov eax, arg
    28.   ret
    29. ENDM
    30.  
    31. WinMain    proto :DWORD,:DWORD,:DWORD,:DWORD
    32. WndProc    proto :DWORD,:DWORD,:DWORD,:DWORD
    33. TopXY      proto :DWORD,:DWORD
    34. Paint_Proc proto :DWORD,:DWORD
    35.  
    36. .data
    37.   szDisplayName db "Демонстрация ToolBar", 0
    38.   CommandLine   dd 0
    39.   hWnd          dd 0
    40.   hInstance     dd 0
    41.   hStatus       dd 0
    42.   hToolBar      dd 0
    43.   TBText    db "Один",0,
    44.      "Два",0,
    45.      "Три",0,
    46.      " ",0,
    47.      " ",0,
    48.      " ",0,
    49.      " ",0,
    50.      " ",0,
    51.      " ",0,
    52.      " ",0,
    53.      " ",0,
    54.      " ",0,
    55.      " ",0,0
    56. .code
    57. start:
    58.   invoke GetModuleHandle, NULL
    59.   mov hInstance, eax
    60.   invoke GetCommandLine
    61.   mov CommandLine, eax
    62.   invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    63.   invoke ExitProcess, eax
    64.  
    65. WinMain proc hInst :DWORD, hPrevInst: DWORD, CmdLine: DWORD, CmdShow: DWORD
    66.   LOCAL wc  :WNDCLASSEX
    67.   LOCAL msg :MSG
    68.   LOCAL Wwd :DWORD
    69.   LOCAL Wht :DWORD
    70.   LOCAL Wtx :DWORD
    71.   LOCAL Wty :DWORD
    72.  
    73.   invoke InitCommonControls
    74.  
    75.   mov wc.cbSize, SIZEOF WNDCLASSEX
    76.   mov wc.style, CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
    77.   mov wc.lpfnWndProc, OFFSET WndProc
    78.   mov wc.cbClsExtra, NULL
    79.   mov wc.cbWndExtra, NULL
    80.  
    81.   m2m wc.hInstance, hInst
    82.  
    83.   mov wc.hbrBackground, COLOR_BTNFACE+1
    84.   mov wc.lpszMenuName, NULL
    85.   mov wc.lpszClassName, OFFSET szClassName
    86.  
    87.   invoke LoadIcon, hInst, 500
    88.   mov wc.hIcon, eax
    89.   invoke LoadCursor, NULL, IDC_ARROW
    90.   mov wc.hCursor, eax
    91.   mov wc.hIconSm, 0
    92.  
    93.   invoke RegisterClassEx, addr wc
    94.  
    95.   mov Wwd, 500
    96.   mov Wht, 350
    97.  
    98.   invoke GetSystemMetrics, SM_CXSCREEN
    99.   invoke TopXY, Wwd, eax
    100.   mov Wtx, eax
    101.  
    102.   invoke GetSystemMetrics, SM_CYSCREEN
    103.   invoke TopXY, Wht, eax
    104.   mov Wty, eax
    105.  
    106.   szText szClassName, "Comctl_Class"
    107.  
    108.   invoke CreateWindowEx, WS_EX_LEFT, ADDR szClassName, ADDR szDisplayName, WS_OVERLAPPEDWINDOW, Wtx, Wty, Wwd, Wht, NULL, NULL, hInst, NULL
    109.   mov hWnd, eax
    110.   invoke LoadMenu, hInst, 600
    111.   invoke SetMenu, hWnd, eax
    112.   invoke ShowWindow, hWnd, SW_SHOWNORMAL
    113.   invoke UpdateWindow, hWnd
    114.  
    115. StartLoop:
    116.   invoke GetMessage, ADDR msg, NULL, 0, 0
    117.   cmp eax, 0
    118.   je ExitLoop
    119.   invoke TranslateMessage, ADDR msg
    120.   invoke DispatchMessage,  ADDR msg
    121.   jmp StartLoop
    122. ExitLoop:
    123.   return msg.wParam
    124. WinMain endp
    125.  
    126. WndProc proc hWin :DWORD, uMsg :DWORD, wParam :DWORD, lParam :DWORD
    127.  
    128. LOCAL caW :DWORD
    129. LOCAL caH :DWORD
    130. LOCAL hDC :DWORD
    131. LOCAL Rct :RECT
    132. LOCAL tbb :TBBUTTON
    133. LOCAL Tba :TBADDBITMAP
    134. LOCAL Ps  :PAINTSTRUCT
    135.  
    136. szText tbSelect, "Вы выбрали"
    137.  
    138. .if uMsg == WM_COMMAND
    139. ;команды на кнопках
    140. .if wParam == 50
    141.   szText tb50, "Новый файл"
    142.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb50
    143.   invoke MessageBox, hWin, ADDR tb50, ADDR tbSelect, MB_OK
    144.  
    145. .elseif wParam == 51
    146.   szText tb51, "Открыть файл"
    147.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb51
    148.   invoke MessageBox, hWin, ADDR tb51, ADDR tbSelect, MB_OK
    149.  
    150. .elseif wParam == 52
    151.   szText tb52, "Сохранить файл"
    152.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb52
    153.   invoke MessageBox, hWin, ADDR tb52, ADDR tbSelect, MB_OK
    154.  
    155. .elseif wParam == 53
    156.   szText tb53, "Вырезать"
    157.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb53
    158.   invoke MessageBox, hWin, ADDR tb53, ADDR tbSelect, MB_OK
    159.  
    160. .elseif wParam == 54
    161.   szText tb54, "Копировать"
    162.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb54
    163.   invoke MessageBox, hWin, ADDR tb54, ADDR tbSelect, MB_OK
    164.  
    165. .elseif wParam == 55
    166.   szText tb55, "Вставить"
    167.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb55
    168.   invoke MessageBox, hWin, ADDR tb55, ADDR tbSelect, MB_OK
    169.  
    170. .elseif wParam == 56
    171.   szText tb56, "Отменить"
    172.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb56
    173.   invoke MessageBox, hWin, ADDR tb56, ADDR tbSelect, MB_OK
    174.  
    175. .elseif wParam == 57
    176.   szText tb57, "Поиск"
    177.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb57
    178.   invoke MessageBox, hWin, ADDR tb57, ADDR tbSelect, MB_OK
    179.  
    180. .elseif wParam == 58
    181.   szText tb58, "Замена"
    182.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb58
    183.   invoke MessageBox, hWin, ADDR tb58, ADDR tbSelect, MB_OK
    184.  
    185. .elseif wParam == 59
    186.   szText tb59, "Печать"
    187.   invoke SendMessage, hStatus, SB_SETTEXT, 0, ADDR tb59
    188.   invoke MessageBox, hWin, ADDR tb59, ADDR tbSelect, MB_OK
    189.  
    190. .elseif wParam == 1000
    191.   invoke SendMessage, hWin, WM_SYSCOMMAND, SC_CLOSE, NULL
    192. .elseif wParam == 1900
    193.   szText TheMsg, "Только Assembler и ничего больше"
    194.   invoke MessageBox, hWin, ADDR TheMsg, ADDR szDisplayName, MB_OK
    195. .endif
    196.  
    197. .elseif uMsg == WM_CREATE
    198. ;Создание ToolBar
    199. mov tbb.iBitmap,   0
    200. mov tbb.idCommand, 0
    201. mov tbb.fsState,   TBSTATE_ENABLED
    202. mov tbb.fsStyle,   TBSTYLE_SEP
    203. mov tbb.dwData,    0
    204. mov tbb.iString,   0
    205.  
    206. [b]invoke CreateToolbarEx, hWin, WS_CHILD or WS_CLIPSIBLINGS, 300, 1, 0, 0, ADDR tbb, 1, 16, 16, 0, 0, sizeof TBBUTTON
    207. mov hToolBar, eax
    208. invoke ShowWindow, hToolBar, SW_SHOW[/b]
    209.  
    210. mov Tba.hInst, HINST_COMMCTRL
    211. mov Tba.nID,   1;размер кнопок 1=big 2=small
    212. invoke SendMessage, hToolBar, TB_ADDBITMAP, 1, ADDR Tba
    213.  
    214.  
    215. ;добавление кнопок
    216. mov tbb.iBitmap, STD_FILENEW
    217. mov tbb.fsStyle, TBSTYLE_BUTTON
    218. mov tbb.idCommand, 50
    219. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    220.  
    221. mov tbb.iBitmap, STD_FILEOPEN
    222. mov tbb.fsStyle, TBSTYLE_BUTTON
    223. mov tbb.idCommand, 51
    224. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    225.  
    226. mov tbb.iBitmap, STD_FILESAVE
    227. mov tbb.fsStyle, TBSTYLE_BUTTON
    228. mov tbb.idCommand, 52
    229. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    230.  
    231. mov tbb.idCommand, 0
    232. mov tbb.fsStyle, TBSTYLE_SEP
    233. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    234.  
    235. mov tbb.iBitmap, STD_CUT
    236. mov tbb.fsStyle, TBSTYLE_BUTTON
    237. mov tbb.idCommand, 53
    238. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    239.  
    240. mov tbb.iBitmap, STD_COPY
    241. mov tbb.fsStyle, TBSTYLE_BUTTON
    242. mov tbb.idCommand, 54
    243. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    244.  
    245. mov tbb.iBitmap, STD_PASTE
    246. mov tbb.fsStyle, TBSTYLE_BUTTON
    247. mov tbb.idCommand, 55
    248. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    249.  
    250. mov tbb.iBitmap, STD_UNDO
    251. mov tbb.fsStyle, TBSTYLE_BUTTON
    252. mov tbb.idCommand, 56
    253. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    254.  
    255. mov tbb.iBitmap, 0
    256. mov tbb.fsStyle, TBSTYLE_SEP
    257. mov tbb.idCommand, 0
    258. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    259.  
    260. mov tbb.iBitmap, STD_FIND
    261. mov tbb.fsStyle, TBSTYLE_BUTTON
    262. mov tbb.idCommand, 57
    263. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    264.  
    265. mov tbb.iBitmap, STD_REPLACE
    266. mov tbb.fsStyle, TBSTYLE_BUTTON
    267. mov tbb.idCommand, 58
    268. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    269.  
    270. mov tbb.iBitmap, 0
    271. mov tbb.fsStyle, TBSTYLE_SEP
    272. mov tbb.idCommand, 0
    273. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    274.  
    275. mov tbb.iBitmap, STD_PRINT
    276. mov tbb.fsStyle, TBSTYLE_BUTTON
    277. mov tbb.idCommand, 59
    278. invoke SendMessage, hToolBar, TB_ADDBUTTONS, 1, ADDR tbb
    279. ;добавляем подписи
    280. [b]invoke SendMessage, hToolBar,TB_ADDSTRINGS,0,OFFSET TBText[/b]
    281.  
    282.  
    283. ;StatusBar
    284. invoke CreateStatusWindow, WS_CHILD or WS_VISIBLE or SBS_SIZEGRIP, 0, hWin, 200
    285. mov hStatus, eax
    286.  
    287. .elseif uMsg == WM_SIZE
    288. invoke SendMessage, hToolBar, TB_AUTOSIZE, 0, 0
    289.  
    290. m2m caW, lParam[0]
    291. m2m caH, lParam[2]
    292.  
    293. invoke GetWindowRect, hStatus, ADDR Rct
    294. mov eax, Rct.bottom
    295. sub eax, Rct.top
    296. sub caH, eax
    297.  
    298. invoke MoveWindow, hStatus, 0, caH, caW, caH, TRUE
    299.  
    300. .elseif uMsg == WM_PAINT
    301.   invoke BeginPaint, hWin, ADDR Ps
    302.   mov hDC, eax
    303.   invoke Paint_Proc, hWin, hDC
    304.   invoke EndPaint, hWin, ADDR Ps
    305.   return 0
    306.  
    307. .elseif uMsg == WM_CLOSE
    308.   szText TheText, "Подтвердите выход"
    309.   invoke MessageBox, hWin, ADDR TheText, ADDR szDisplayName, MB_YESNO
    310.   .if eax == IDNO
    311.     return 0
    312.   .endif
    313. .elseif uMsg == WM_DESTROY
    314.   invoke PostQuitMessage, NULL
    315.   return 0
    316. .endif
    317.  
    318. invoke DefWindowProc, hWin, uMsg, wParam, lParam
    319. ret
    320. WndProc endp
    321.  
    322. TopXY proc wDim :DWORD, sDim :DWORD
    323.   shr sDim, 1 ;divide screen dimension by 2
    324.   shr wDim, 1 ;divide window dimension by 2
    325.   mov eax, wDim ;copy window dimension by 2
    326.   sub sDim, eax ;sub half win dimension from half screen dimension
    327.   return sDim
    328. TopXY endp
    329.  
    330. Paint_Proc proc hWin :DWORD, hDC :DWORD
    331.   LOCAL caW :DWORD
    332.   LOCAL caH :DWORD
    333.   LOCAL tbH :DWORD
    334.   LOCAL sbH :DWORD
    335.   LOCAL Rct :RECT
    336.  
    337.   invoke GetClientRect, hWin, ADDR Rct
    338.   m2m caW, Rct.right
    339.   m2m caH, Rct.bottom
    340.  
    341.   invoke GetWindowRect, hToolBar, ADDR Rct
    342.   mov eax, Rct.bottom
    343.   sub eax, Rct.top
    344.   mov tbH, eax
    345.  
    346.   invoke GetWindowRect, hStatus, ADDR Rct
    347.   mov eax, Rct.bottom
    348.   sub eax, Rct.top
    349.   mov sbH, eax
    350.  
    351.   mov eax, caH
    352.   sub eax, sbH
    353.   mov caH, eax
    354.  
    355.   mov Rct.left,   0
    356.   m2m Rct.top,    tbH
    357.   m2m Rct.right,  caW
    358.   m2m Rct.bottom, caH
    359.  
    360.   invoke DrawEdge, hDC, ADDR Rct, EDGE_SUNKEN, BF_RECT
    361.   return 0
    362. Paint_Proc endp
    363.  
    364. end start
     
  11. bymer

    bymer New Member

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

    holdon New Member

    Публикаций:
    0
    Регистрация:
    26 май 2009
    Сообщения:
    3
    разобрался.
     
  13. SpiRiToiD

    SpiRiToiD New Member

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

    Да, это звучит унизительно, но мне бы сейчас кто подкинул что-нить на Ктрл-С и Ктрл-В - если еще и с комментами, то вообще должник буду. Не хочу чтобы вы меня считали за последнего лентяя, но мне правда осталось 2 дня, чтобы сдать указанную выше прогу. Препод сначала твердил одно - я благодаря вам и сделал ему расчет параллельного сопротивления. А теперь он требует ввести ему, чтобы числа мог вводить пользователь, странно что продление времени не оговаривается...

    Блин.

    зы. ежели чего - у меня TASM, и делать нужно на нем.
     
  14. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    SpiRiToiD
    Я понимаю, что ты весь семестр ничего не учил и учить не собираешься, но на wasm.ru/forum ты с 5 мая и всё просишь и просишь, даже, если экзамен у тебя 1 июня, то времени всё равно достаточно, чтобы выучить основы ассемблера и разобраться в примерах, которые прилагаются к учебнику
     
  15. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    SpiRiToiD
    Код (Text):
    1. org 100h
    2. mov  ax,3
    3. int  10h
    4. push 0B800h
    5. pop  es
    6. xor  di,di
    7. xor  bx,bx         ;bx - наше число
    8. input:xor ax,ax
    9.       int 16h          ;считываем символ
    10.       xor ah,ah
    11.       mov [es:di],ax       ;выводим на экран чёным цветом
    12.       mov dx,ax
    13.       sub ax,48        ;переводим символ из ASCII в числовой вид
    14.       sub dx,58
    15.       xor dx,ax
    16.       jnl @f           ;если символ больше 9 или меньше 0 - пропускаем
    17.       mov byte[es:di+1],7  ;иначе изменяем цвет символа на экране
    18.       add di,2         :перемещаем курсор вывода на экран
    19.       mov dx,bx
    20.       shl bx,3
    21.       shl dx,1
    22.       add bx,ax
    23.       add bx,dx        ;bx=bx*10+ax
    24.       @@:
    25.       cmp  al,13-48    ;если нажат enter - выход
    26. jne input
    27.  
    28. mov  di,160        ;перемещаем курсор на вторую строку
    29. mov  si,ok
    30. cmp  bx,1000           ;если bx>1000 - выводим error, иначе ok
    31. jna @f
    32. mov  si,error
    33. @@:movsb           ;вывод текста на экран
    34.    inc di
    35.    cmp byte[ds:si],0
    36. jne @b
    37. xor  ax,ax         ;ожидание нажатия клавиши
    38. int  16h
    39. ret
    40.  
    41. error db 'error',0
    42. ok    db 'ok',0
     
  16. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    murder
    Код (Text):
    1. xor dx,ax;<-- после xor CF=0 и OF=0 всегда (логические операции сбрасывают CF и OF)
    2.       jnl @f;jnl  if(SF xor OF = 0) корректнее было бы jns
    SpiRiToiD сейчас будет требовать чтобы перевели с FASM на TASM
     
  17. SpiRiToiD

    SpiRiToiD New Member

    Публикаций:
    0
    Регистрация:
    12 май 2009
    Сообщения:
    9
    Я уже пояснял - что нам поясняли кое-какие основы. Дисциплина - "Микропроцессорная техника". Как таковой теоретической части по Ассемблеру у нас НЕТ. Есть 5 лаб, в которых пояснены - какие бывают регистры, что такое mov, как складывать-вычитать, как вводить _строку_, как выводить на экран и что такое and, or, xor. Это ВСЕ. Как функционируют те команды, о которых данные были - я разобрался с трудом. А более сложное - уж извините - подходишь к Преподу, а он "ну ты там поищи, в нете, найдешь". Прекрасно!

    А насчет TASM ты был прав - попытаюсь сам, но лучше, конечно, переведенное... Щаз еще кое-чего у препода соседней группы натырил из этого плана, еще там покопаю... Но времени Критически мало.

    Что же касается 5 мая - у меня было условие - 3 резистора, соединены параллельно, найти общее сопротивление. Благодаря вам, мне таки удалось это сделать. Я приношу иму и вуаля - раз справился, получи еще одно условие, посложнее, чтобы не успел...
     
  18. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    :)
     
  19. SpiRiToiD

    SpiRiToiD New Member

    Публикаций:
    0
    Регистрация:
    12 май 2009
    Сообщения:
    9
    Мурдер, спасибо за код, но я так и не смог его заставить работать в Tasm. Что сделаешь - опыта ноль без палочки. Зато нашел в Интернете примерчик для TASM, там был перевод в двоичную и шестнадцатиричную, которые я выдрал(возможно - криво). Вот что получил:

    Код (Text):
    1. .model  small
    2. .stack  100h
    3.  
    4. .data
    5.     A       dw  0 ;5 Om
    6.     B       dw  0 ;4 Oma
    7.     K       dw  0 ;3 Oma
    8.     E       dw  1000; x.xx
    9.     G       dw  10; x.xx
    10.     Temp1   dw  0 ;Z1 abc
    11.     Temp2   dw  0 ;Z2 ab
    12.     Temp3   dw  0 ;Z3 bc
    13.     Temp4   dw  0 ;Z4 ac
    14.     Temp5   dw  0 ;Z5 znamenatel
    15.     Temp6   dw  0 ;Z6 ostatok
    16.        
    17.     ASCIIstroka DB  'Rezultat:  .   ',?,13,10,'$'
    18. ;____________________________________________________________________
    19. ;Таблица преобразования “цифра – ASCII-код”
    20.         org                             100h
    21.         tabl_ascii  db       '0123456789abcdef'
    22. ;____________________________________________________________________
    23. ;Таблица преобразования “ASCII-код - цифра”
    24.         org                  130h
    25.         db                   0,1,2,3,4,5,6,7,8,9
    26.         org                  41h
    27.         db                   0ah,0bh, 0ch, 0dh, 0eh, 0fh
    28. ;____________________________________________________________________
    29. ;Резервация и инициализация переменных в памяти
    30.         org                             150h
    31.         x_ascii     db       20h dup(?)
    32.         t1             db         0dh,0ah,"BBeguTe R1:"
    33.                        db        0dh, 0ah, "$"
    34.         t2             db         0dh,0ah,"BBeguTe R2:"
    35.                        db        0dh, 0ah, "$"
    36.         t3             db         0dh,0ah,"BBeguTe R3:"
    37.                        db        0dh, 0ah, "$"
    38.         t4             db         0dh,0ah,"CoeguHeHue naPaJIJIeJIbHoe!"
    39.                        db        0dh, 0ah, "$"
    40.         t5             db         0dh,0ah,"Debugging!"
    41.                        db        0dh, 0ah, "$"                             
    42.         buf db 16 dup(?),"$"
    43. ;____________________________________________________________________
    44.  
    45.  
    46. .code
    47.         mov                       ax,@data
    48.         mov                       ds, ax
    49.        
    50.         mov ax,3
    51.         int 10h
    52.        
    53.         mov                       es, ax
    54.         lea                       dx, t1
    55.         mov                       ah,09h
    56.         int                       21h
    57.         lea                       di, x_ascii
    58.         call                      ink
    59.         call                      des_2
    60.        
    61.         mov A,ax
    62.         xor ax,ax
    63.         xor dx,dx
    64.         xor di,di
    65.  
    66.         mov                       es, ax
    67.         lea                       dx, t2
    68.         mov                       ah,09h
    69.         int                       21h
    70.         lea                       di, x_ascii
    71.         call                      ink
    72.         call                      des_2
    73.        
    74.         mov B,ax
    75.         xor ax,ax
    76.         xor dx,dx
    77.         xor di,di
    78.  
    79.         mov                       es, ax
    80.         lea                       dx, t3
    81.         mov                       ah,09h
    82.         int                       21h
    83.         lea                       di, x_ascii
    84.         call                      ink
    85.         call                      des_2
    86.        
    87.         mov K,ax
    88.         xor ax,ax
    89.         xor dx,dx
    90.         xor di,di
    91.    
    92.     mov     ax, A
    93.     mul     B
    94.     mul     K
    95.     mov     Temp1,ax
    96.     mov     ax, A
    97.     mul     B
    98.     mov     Temp2,ax
    99.     mov     ax, B
    100.     mul     K
    101.     mov     Temp3,ax
    102.     mov     ax, K
    103.     mul     A
    104.     mov     Temp4,ax
    105.     mov     ax,Temp2
    106.     add     ax,Temp3
    107.     add     ax,Temp4
    108.     mov     Temp5,ax
    109.     mov     ax,Temp1
    110.     div     Temp5
    111.     mov     Temp6,dx
    112.            
    113.     mov si, OFFSET ASCIIstroka  ; устанавливаем регистр si в позицию вывода
    114.     add si, 10          ; 10-ый символ в строке ASCIIstroka
    115.  
    116.     mov cx, 10          ; будем делить на 10 число, хранящееся в AX для того чтобы
    117.                     ; выделить все разряды справа налево
    118. metka:                  ; устанавливаем метку "metka"
    119.     xor dx, dx          ; обнуляем dx
    120.     div cx         
    121.     add dx, 30h         ; добавляем 30h для правильного вывода на экран
    122.     mov [si], dl        ; помещаем преобразованную цифру в ASCIIstroka
    123.     dec si          ; уменьшаем si на единицу, т.е перемещаемся по строке влево от
    124.                     ; 15 разряда, что вызвано получением разрядов справа налево
    125.                     ; т.к. за каждый ход мы получаем остаток от деления на 10
    126.     cmp ax, 0           ; сравниваем ax c нулем, т.е. проверяем, преобразовали ли все
    127.                     ; разряды?
    128.     jne metka           ; если ax не равен нулю переходим на metku
    129.    
    130.     mov     ax,Temp6
    131.     mul     E
    132.     div     Temp5
    133.    
    134.     mov si, OFFSET ASCIIstroka  ; устанавливаем регистр si в позицию вывода
    135.     add si, 14          ; 14-ый символ в строке ASCIIstroka
    136.  
    137.     mov cx, 10          ; будем делить на 10 число, хранящееся в AX для того чтобы
    138.                     ; выделить все разряды справа налево
    139. metka2:                 ; устанавливаем метку "metka"
    140.     xor dx, dx          ; обнуляем dx
    141.     div cx         
    142.     add dx, 30h         ; добавляем 30h для правильного вывода на экран
    143.     mov [si], dl        ; помещаем преобразованную цифру в ASCIIstroka
    144.     dec si          ; уменьшаем si на единицу, т.е перемещаемся по строке влево от
    145.                     ; 15 разряда, что вызвано получением разрядов справа налево
    146.                     ; т.к. за каждый ход мы получаем остаток от деления на 10
    147.     cmp ax, 0           ; сравниваем ax c нулем, т.е. проверяем, преобразовали ли все
    148.                     ; разряды?
    149.     jne metka2          ; если ax не равен нулю переходим на metku
    150.    
    151.     lea                       dx, t4
    152.     mov                       ah,09h
    153.     int                       21h
    154.                    
    155.     mov     ah, 9               ; выводим строку на экран
    156.     mov     dx, OFFSET ASCIIstroka
    157.     int     21h
    158.        
    159.  
    160.    
    161.   mov ax,4C00h
    162.   int 21h
    163.    
    164.     ;Процедура ввода десятичного числа
    165.   ink proc
    166.         xor                  cx,cx
    167.   l1:
    168.         mov                  ah,1
    169.         int                       21h
    170.         stosb
    171.         inc                  cx
    172.         cmp                  al,0dh
    173.         jnz                       l1
    174.         dec                  cx
    175.         ret
    176.   ink endp
    177.  
    178. ;Перевод числа(десятичного) в двоичную систему
    179.     des_2 proc
    180.         mov            si,10
    181.         lea            di,x_ascii
    182.         sub            ax,ax
    183.   v1: mul              si
    184.         mov            bp,ax
    185.         mov            al,[di]
    186.         sub            al,48
    187.         inc            di
    188.         mov            ah,ch
    189.         add            ax,bp
    190.         loop           v1
    191.         ret
    192.   des_2 endp
    193. end
    1 раз каким-то хреном мне удалось получить мой ответ введя значения 3, 4 и 5. А потом все пошло наперекосяк и в итоге - я пытался выводить в коде A B и K - они все почему-то приравниваются к 208... В общем - налицо, что что-то я сделал криво, а вот что - один шут знает. Народ - последняя надежда - завтра еще можно сдать, я думаю, хотя суббота.
     
  20. FARAON

    FARAON New Member

    Публикаций:
    0
    Регистрация:
    29 май 2009
    Сообщения:
    1
    IceStudentHELP ME!!!!!!!!!!!! КУРСОВИК ГОРИТ!!!!!!!!!!Помогите с программой пожалуйста!!!!!