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

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

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    прямая адресация, если указывается тупо адрес:
    Код (Text):
    1. mov ax, OFFSET massiv
    косвенная регистровая:
    Код (Text):
    1. mov bx, massiv
    2. mov ax, [bx]
     
  2. xolinks

    xolinks New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2010
    Сообщения:
    9
    сделал как ты сказал... новая ошибка) invalid instristion operands))

    offset это вроде же смещение?)
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    xolinks
    смещение относительно DS - сегмента данных.
    Код (Text):
    1. lea bx, massiv
    2. mov ax, [bx]
     
  4. xolinks

    xolinks New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2010
    Сообщения:
    9
    ну леа нам сказали не использовать)))

    там надо было вместо bx использовать ebx)))
     
  5. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    Помогите написать программу ввода числа типа word

    вернее макрос

    vvodword macro x
    push ax
    push dx
    push cx

    тело макроса
    число в итоге должно быть в x

    pop cx
    pop dx
    pop ax
    endm
     
  6. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    компилятор tasm
     
  7. Kirow

    Kirow New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2010
    Сообщения:
    24
    Камрады, нужна снова помощь.Необходимо сделать взов дочернего окна по нажатию на кнопку.Все мои попытки приводили к закрытию приложения вообще...

    Код файла WndTst.inc

    Код (Text):
    1. ; подключения библиотек
    2. include c:\masm32\macros\macros.asm
    3. include user32.inc
    4. include kernel32.inc
    5. include gdi32.inc
    6. include masm32.inc
    7. includelib user32.lib
    8. includelib kernel32.lib
    9. includelib gdi32.lib
    10. includelib masm32.lib
    11. ;-----------------------------------------------------------------
    12. ; константы
    13. WM_DESTROY              equ 2
    14. WM_CREATE               equ 1
    15. WM_CLOSE                equ 10h
    16. WM_PAINT                equ 0FH
    17. CS_VREDRAW              equ 1h
    18. CS_HREDRAW              equ 2h
    19. CS_GLOBALCLASS          equ 4000h
    20. WS_OVERLAPPEDWINDOW     equ 000CF0000H
    21. WM_INITDIALOG           equ 110h
    22. IDI_APPLICATION         equ 32512
    23. IDC_CROSS               equ 32515
    24. SW_SHOWNORMAL           equ 1
    25. WM_LBUTTONDOWN          equ 201h
    26. WM_COMMAND              equ 111h
    27. BS_DEFPUSHBUTTON        equ 1h
    28. WS_VISIBLE              equ 10000000h
    29. WS_CHILD                equ 40000000h
    30. IDC_ARROW               equ 32512
    31. WM_SETTEXT              equ 0Ch
    32. WM_GETTEXT              equ 0Dh
    33. WS_TABSTOP              equ 10000h
    34. WS_SYSMENU              equ 50000h
    35. WS_BORDER               equ 800000h
    36. ;----------------------------------------------------------------------
    37. ;стили
    38. STYLBTN         equ WS_CHILD + BS_DEFPUSHBUTTON + WS_VISIBLE
    39. STYLWND         equ CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
    40. ;----------------------------------------------------------------------
    41. ; компоненты цветов
    42. RED               equ 72
    43. GREEN             equ 72
    44. BLUE              equ 72
    45. RGBW              equ (RED or (GREEN shl 8)) or (BLUE shl 16)
    46. ;------------------------------------------------------------------------------
    47. ; структуры
    48. ; структура сообщения
    49. MSGSTRUCT STRUC
    50.      MSHWND        DD ?  ; идентификатор окна,получающего сообщение
    51.      MSMESSAGE     DD ?  ; идентификатор сообщения
    52.      MSWPARAM      DD ?  ; доп. информация о сообщении
    53.      MSLPARAM      DD ?  ; доп. информация о сообщении
    54.      MSTIME        DD ?  ; время посылки сообщения
    55.      MSPT          DD ?  ; положение курсора во время посылки сообщения
    56. MSGSTRUCT ENDS
    57. WNDCLASS STRUC
    58.      CLSSTYLE       DD ?  ; стиль окна
    59.      CLSLPFNWNDPROC DD ?  ; указатель на процедуру окна
    60.      CLSCBCLSEXTRA  DD ?  ; информация о доп. байтах для данной структуры
    61.      CLSCBWNDEXTRA  DD ?  ; информация о доп. байтах для окна
    62.      CLSHINSTANCE   DD ?  ; дескриптор приложения
    63.      CLSHICON       DD ?  ; идентификатор иконы окна
    64.      CLSHCURSOR     DD ?  ; идентификатор курсора окна
    65.      CLSHBRBACKGROUND  DD ? ; идентификатор кисти окна
    66.      MENNAME           DD ? ; имя-идентификатор меню
    67.      CLSNAME           DD ? ; специфицирует имя класса окон
    68. WNDCLASS ENDS
    69. PAINTSTR STRUC
    70.      hdc    DWORD 0
    71.      fErase DWORD 0
    72.      left   DWORD 0
    73.      top    DWORD 0
    74.      right  DWORD 0
    75.      bottom DWORD 0
    76.      fRes   DWORD 0
    77.      fIncUp DWORD 0
    78.      Reserv DB 32 dup(0)
    79. PAINTSTR ENDS
    Код файла WndTst.asm
    Код (Text):
    1. .686
    2. .MODEL FLAT,stdcall
    3. include WndTst.inc
    4. ; сегмент данных
    5. .DATA
    6. ;объекты структуры
    7.      MSG      MSGSTRUCT <?>
    8.      WC       WNDCLASS  <?>
    9.      PNT      PAINTSTR  <?>
    10. ;дескрипторы  
    11.      NEWHWND        DD 0  ;окна
    12.      HWNDBTN        DD 0
    13.      HINST          DD 0 ;приложения
    14. ;заголовки\подписи
    15.      TITLENAME      DB 'программа',0
    16. ;классы
    17.      NAM            DB 'CLASS32main',0
    18.      CLSBUTN        DB 'BUTTON',0
    19. .CODE
    20. START:
    21. ; получить дескриптор приложения
    22.      invoke  GetModuleHandle,0
    23.      MOV  [HINST], EAX
    24. REG_CLASS:
    25. ; заполнить структуру главного окна
    26.      MOV  [WC.CLSSTYLE] , STYLWND
    27. ; процедура обработки сообщений
    28.      MOV  [WC.CLSLPFNWNDPROC], OFFSET WNDPROC
    29.      MOV  [WC.CLSCBCLSEXTRA],0
    30.      MOV  [WC.CLSCBWNDEXTRA],0
    31.      MOV  EAX, [HINST]
    32.      MOV  [WC.CLSHINSTANCE],EAX
    33. ; иконка окна
    34.      invoke  LoadIcon,0,IDI_APPLICATION
    35.      MOV  [WC.CLSHICON], EAX
    36. ;----------курсор окна
    37.      invoke  LoadCursor,0,IDC_CROSS
    38.      MOV  [WC.CLSHCURSOR],EAX
    39.      invoke  CreateSolidBrush,RGBW ; создать кисть
    40.      MOV  [WC.CLSHBRBACKGROUND],EAX
    41.      MOV  DWORD PTR [WC.MENNAME],0
    42.      MOV  DWORD PTR [WC.CLSNAME], OFFSET NAM
    43.      invoke  RegisterClass,OFFSET WC
    44.      invoke  CreateWindowEx,0,OFFSET NAM,OFFSET TITLENAME,WS_OVERLAPPEDWINDOW,100,100,400,400,0,0,[HINST],0
    45.      CMP  EAX, 0
    46.      JZ   _ERR
    47.      MOV  [NEWHWND], EAX    
    48. ;------------------------------------------------------------
    49.      invoke  ShowWindow,[NEWHWND],SW_SHOWNORMAL ; показать созданное окно
    50.      invoke  UpdateWindow,[NEWHWND]; перерисовать видимую часть окна
    51. ; петля обработки сообщений
    52. MSG_LOOP:
    53.      invoke  GetMessage,OFFSET MSG,0,0,0
    54.      CMP  AX, 0
    55.      JE   END_LOOP
    56.      invoke  TranslateMessage,OFFSET MSG
    57.      invoke  DispatchMessage,OFFSET MSG
    58.      JMP  MSG_LOOP
    59. END_LOOP: ; выход из программы (закрыть процесс)
    60.      invoke  ExitProcess,[MSG.MSWPARAM]
    61. _ERR:
    62.      JMP  END_LOOP
    63. ; процедура окна
    64. ; расположение параметров в стеке
    65. ; [EBP+20]  ; LPARAM
    66. ; [EBP+16]   ; WAPARAM
    67. ; [EBP+12]   ; MES
    68. ; [EBP+8]     ; HWND
    69. WNDPROC    PROC
    70.      PUSH EBP
    71.      MOV EBP,ESP
    72.      PUSH EBX
    73.      PUSH ESI
    74.      PUSH EDI
    75.      CMP DWORD PTR [EBP+12], WM_DESTROY
    76.      JE  WMDESTROY
    77.      CMP DWORD PTR [EBP+12], WM_CREATE
    78.      JE  WMCREATE
    79.      CMP DWORD PTR [EBP+12], WM_PAINT
    80.      JE  WMPAINT
    81.      CMP DWORD PTR [EBP+12], WM_COMMAND
    82.      JE  WMCOMMAND
    83.      JMP DEFWNDPROC
    84. WMPAINT:
    85.      invoke BeginPaint,DWORD PTR [EBP+8],OFFSET PNT
    86.      PUSH EAX ; сохранить контекст (дескриптор)
    87. ;---------------- цвет фона = цвет окна
    88.      invoke SetBkColor,EAX,RGBW
    89.      POP EAX
    90.      MOV EAX, 0
    91.      JMP FINISH
    92. ;----------------------------------------------------------------------------------------------------------
    93. WMCREATE:
    94.      invoke CreateWindowEx,0,OFFSET CLSBUTN,SADD('Create window'),STYLBTN,40,20,120,25,DWORD PTR [EBP+8],0,[HINST],0
    95.      MOV HWNDBTN, EAX
    96.      MOV EAX, 0
    97.      JMP FINISH
    98. ;----------------------------------------------------------------------------------------------------------
    99. WMCOMMAND:
    100.      MOV EAX, HWNDBTN
    101.      CMP DWORD PTR [EBP+20], EAX
    102.      JE BUT1
    103.      MOV EAX, 0
    104.      JMP FINISH
    105. ;----------------------------------------------------------------------------------------------------------
    106. BUT1:
    107.     ;типа создание окна
    108.      MOV EAX, 0
    109.      JMP FINISH
    110. ;----------------------------------------------------------------
    111. DEFWNDPROC:
    112.      invoke DefWindowProc,DWORD PTR [EBP+8],DWORD PTR [EBP+12],DWORD PTR [EBP+16],DWORD PTR [EBP+20]
    113.      JMP FINISH
    114. WMDESTROY:
    115.      invoke PostQuitMessage,0 ; WM_QUIT
    116.      MOV EAX, 0
    117. FINISH:
    118.      POP EDI
    119.      POP ESI
    120.      POP EBX
    121.      POP EBP
    122.      RET 16
    123. WNDPROC ENDP
    124.  
    125. END START
    в общем этот код рабочий вплоть до нажатия кнопки, что дальше писать и в какой последовательности - я не уверен.
     
  8. kolkiy666

    kolkiy666 New Member

    Публикаций:
    0
    Регистрация:
    7 апр 2010
    Сообщения:
    2
    Помогите кто может(((((
    Разработать и выполнить командный файл (КФ), выполняющий проверку наличие файла Numb.txt в каталоге, указанном первым параметром КФ. Прочитать целые числа из файла, найти среди них числа, делящиеся без остатка на 5 и вывести результаты на экран.
     
  9. Aneor_asm

    Aneor_asm New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    11
    как реализовать погашение экрана под DOS?
     
  10. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    сменой графического режима, например так
    Код (Text):
    1. mov ax,3
    2. int 10h
     
  11. rozz

    rozz New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2010
    Сообщения:
    21
    Адрес:
    Украина
    edemko, Здравствуйте. Зашла по Вашей ссылочке, где можно посмотреть иначий код программы, у меня сначала он реагировал на антивирус, я его вырубила, после - он просится в дебаг. Не подскажите, что я не так делаю? =}

    P.s. Речь идет о программе: Числа с плавающей..
    Просто сейчас интересен и второй вариант программы. =}
     
  12. Aneor_asm

    Aneor_asm New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    11
    Mikl___
    а как потом восстановить? то что было на экране?
     
  13. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Aneor_asm
    Какой вопрос -- такой ответ "Как реализовать гашение экрана под DOS?" где тут о восстановлении того, что было на экране? Дальше будет вопрос "А как это сделать резидентом?" Вам уже ответил deLight -- или вы решили, что Aneor_asm на форуме самый хитрый?
     
  14. Aneor_asm

    Aneor_asm New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    11
    А есть такое прерывания которое работает с таймером? мне надо вот в начале ввести время в командной строке а потом по истечению времени программа должна будет сделать свое дело)
     
  15. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Aneor_asm
    8-ое или пользовательское 0х1С
     
  16. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    Имя файла вводится с клавы, и строка которую нужно записать в этот файл.

    Помогите найти ошибку!

    Код (Text):
    1. model small
    2.  
    3. .data
    4. nf db 10,10 dup(?)
    5. buf db 10,10 dup('$')
    6.  
    7. .code
    8.  
    9. start:
    10.  
    11.  
    12.        
    13. mov ax,@data
    14. mov ds,ax
    15. lea dx,nf
    16. mov ah, 0Ah
    17. int 21h
    18. mov cl,nf[1]
    19. mov si,cx
    20. mov nf[si+2],0
    21.  
    22. lea dx,buf
    23. int 21h
    24. mov ah,3Dh
    25. lea dx,nf
    26. mov al,2
    27. int 21h
    28. mov bx,ax
    29.  
    30. mov ah,40h
    31. lea dx,buf
    32. int 21h
    33.  
    34. mov ah,4ch
    35. int 21h
    36.  
    37. end start
     
  17. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    bor1k
    1)
    значение в ah может не сохраниться после прерывания
    2)
    в cx должно быть количество байт записываемых в файл
    3) а закрывать файл кто будет
    4) хорошо бы после int'ов анализировать cf - полезно
    5) а в файл зачем счетчик и размер от 0Ah-int 21h записывать?
    P.S. функции ввода строк лучше вызывать как mov ax, 0C0Xh, чтобы не глотать пыль из буфера клавиатуры, когда прога летала в облаках (ну или висела на какой-нибудь долгой обработке)
     
  18. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    В смысле?
     
  19. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    Все равно не работает

     
  20. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Код (Text):
    1. .model small
    2. .code
    3. org 100h
    4. start:
    5.  mov ax, 3082
    6.  mov dx, offset fn
    7.  int 33
    8.  xor bx, bx
    9.  mov bl, fn[1]
    10.  mov fn[bx], bh
    11.  mov ax, 3082
    12.  mov dx, offset bf
    13.  int 33
    14.  mov ax, 15618
    15.  mov dx, offset fn
    16.  int 33
    17.  mov bx, ax
    18.  mov ah, 64
    19.  xor cx, cx
    20.  mov cl, bf[1]
    21.  mov dx, offset bf
    22.  int 33
    23.  mov ah, 62
    24.  int 33
    25.  xor ax, ax
    26.  retn
    27. fn db 11,0,11 dup (0)
    28. bf db 80,0,80 dup (?)
    29. end start