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

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

  1. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Прокомментировать не могу, т.к. не понимаю этого
    Суперпозиция гармоник - ГЫ :dntknw:
     
  2. amduser

    amduser New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    7
    murder
    ЭТО то понятно, у себя не могу на fasm откомпилировать... может что-то пропустил
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    amduser
    Да всё нормально компилируется:
    1) копипастишь в FASM
    2) жмёшь F9.
    3) вводишь число от 1 до 9999 (мне больше нравится 8)
    4) жмёшь любую клавишу кроме цифр (например Enter)
     
  4. amduser

    amduser New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    7
    murder
    спасибо, заработало, просто версия битая была...
     
  5. amduser

    amduser New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    7
    НЕ у кого не будет исходника на asm по переводу из 10-ой системы в n- систему счисления (можно только hex, bin, oct). Очень нужно.
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    amduser
    Код (Text):
    1. org 100h
    2. mov si,text ;указатель на строку с числом
    3. xor edx,edx
    4. xor eax,eax
    5. @@:lodsb
    6.    sub al,48
    7.    lea edx,[edx*4+edx]
    8.    shl edx,1
    9.    add edx,eax
    10.    cmp [ds:si],ah
    11. jne @b
    12.  
    13. mov eax,edx
    14. mov ecx,10 ;основание новой системы счисления
    15. mov di,text+31
    16. std
    17. @@:cdq
    18.    div  ecx
    19.    xchg eax,edx
    20.    cmp  al,10
    21.    sbb  al,69h
    22.    das
    23.    stosb
    24.    xchg eax,edx
    25.    test eax,eax
    26. jne @b
    27.  
    28. cld
    29. mov cx,text+31
    30. sub cx,di
    31. lea esi,[edi+1]
    32. mov di,text
    33. rep movsb
    34. stosb
    35.  
    36. mov  al,3
    37. int  10h
    38. push 0B800h
    39. pop  es
    40. xor  di,di
    41. mov  si,text
    42. @@:movsb
    43.    inc di
    44.    cmp [ds:si],ah
    45. jne @b
    46. int 16h
    47. ret
    48. text db '123456',0
     
  7. amduser

    amduser New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    7
    murder
    Очень помогло, есть еще люди разбирающиеся в asm.
    Не подскажешь какую-нибудь литературу по asm. сам по калашникову, мареку изучаю
     
  8. murder

    murder Member

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

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Напмсал простенькую програмку, что-то типа запоминалки паролей, но где-то есть ошибка, потому, что не все пароли выводятся правильно.
    Если нажимаем на кнопку "Show your password", то для String1,String2,String3,String5,String6,String8 пароли выводятся правильно.
    А для String4,String7,String9,String10 - выводится пароль, который принадлежит String2
    Подскажите пожалуйста, где ошибка?
    Писал на RadAsm.

    Код (Text):
    1. .386
    2. .model flat, stdcall  ;32 bit memory model
    3. option casemap :none  ;case sensitive
    4.  
    5. include My sites.inc
    6.  
    7. .code
    8.  
    9. start:
    10.  
    11.     invoke GetModuleHandle,NULL
    12.     mov     hInstance,eax
    13.  
    14.     invoke InitCommonControls
    15.     invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
    16.     invoke ExitProcess,0
    17.  
    18. ;########################################################################
    19. Generate proc hWin:HWND
    20.     xor ecx,ecx
    21.     xor ebx,ebx
    22.     xor edx,edx
    23.    
    24. L1:
    25.      MOV EDX,DWORD PTR DS:[EBX+4+szName]
    26.      MOV ECX,DWORD PTR DS:[EBX+4+String1]
    27.      CMP EDX,ECX
    28.      JNZ L2
    29.      invoke SetDlgItemText,hWin,1003,addr Constant1
    30.      ret
    31.    
    32. L2:
    33.     xor ecx,ecx
    34.    
    35.     MOV ECX,DWORD PTR DS:[EBX+4+String2]
    36.     CMP EDX,ECX
    37.     JNZ L3
    38.     invoke SetDlgItemText,hWin,1003,addr Constant2
    39.     ret
    40.  
    41. L3:      
    42.     xor ecx,ecx
    43.    
    44.     MOV ECX,DWORD PTR DS:[EBX+4+String3]
    45.     CMP EDX,ECX
    46.     JNZ L4
    47.     invoke SetDlgItemText,hWin,1003,addr Constant3
    48.     ret
    49.  
    50. L4:      
    51.     xor ecx,ecx
    52.    
    53.     MOV ECX,DWORD PTR DS:[EBX+4+String4]
    54.     CMP EDX,ECX
    55.     JNZ L5
    56.     invoke SetDlgItemText,hWin,1003,addr Constant4
    57.     ret
    58. L5:  
    59.     xor ecx,ecx
    60.    
    61.     MOV ECX,DWORD PTR DS:[EBX+4+String5]
    62.     CMP EDX,ECX
    63.     JNZ L6
    64.     invoke SetDlgItemText,hWin,1003,addr Constant5
    65.     ret
    66. L6:
    67.     xor ecx,ecx
    68.    
    69.     MOV ECX,DWORD PTR DS:[EBX+4+String6]
    70.     CMP EDX,ECX
    71.     JNZ L7
    72.     invoke SetDlgItemText,hWin,1003,addr Constant6
    73.     ret
    74. L7:
    75.     xor ecx,ecx
    76.    
    77.     MOV ECX,DWORD PTR DS:[EBX+4+String7]
    78.     CMP EDX,ECX
    79.     JNZ L8
    80.     invoke SetDlgItemText,hWin,1003,addr Constant7
    81.     ret
    82. L8:
    83.     xor ecx,ecx
    84.    
    85.     MOV ECX,DWORD PTR DS:[EBX+4+String8]
    86.     CMP EDX,ECX
    87.     JNZ L9
    88.     invoke SetDlgItemText,hWin,1003,addr Constant8
    89.     ret
    90. L9:
    91.     xor ecx,ecx
    92.    
    93.     MOV ECX,DWORD PTR DS:[EBX+4+String9]
    94.     CMP EDX,ECX
    95.     JNZ L10
    96.     invoke SetDlgItemText,hWin,1003,addr Constant9
    97.     ret
    98. L10:
    99.     xor ecx,ecx
    100.    
    101.     MOV ECX,DWORD PTR DS:[EBX+4+String10]
    102.     CMP EDX,ECX
    103.     JNZ L1
    104.     invoke SetDlgItemText,hWin,1003,addr Constant10
    105.     ret
    106. ret            
    107.  
    108.    
    109. Generate endp
    110. FillMyCombo proc
    111.     invoke EnableWindow,hCombo,TRUE ;enable combobox
    112.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String1
    113.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String2
    114.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String3
    115.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String4
    116.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String5
    117.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String6
    118.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String7
    119.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String8
    120.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String9
    121.     invoke SendMessage,hCombo,CB_ADDSTRING,0,offset String10
    122.     invoke SendMessage,hCombo,CB_SETCURSEL,1,0
    123.     ret
    124.  
    125. FillMyCombo endp
    126. DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    127. LOCAL cbi:COMBOBOXEXITEM
    128. LOCAL buffer[256]:BYTE
    129. LOCAL mValue:DWORD
    130.    
    131.     mov     eax,uMsg
    132.    
    133.     .if eax==WM_INITDIALOG
    134.          
    135.           invoke LoadIcon,hInstance,300 ;Icon
    136.           mov hIcon,eax
    137.           invoke SendMessage,hWin,WM_SETICON,0,hIcon
    138.          
    139.           invoke GetDlgItem,hWin,1002 ;MyComboBox
    140.           mov hCombo,eax
    141.           invoke FillMyCombo
    142.          
    143.  
    144.     .elseif eax==WM_COMMAND
    145.     mov eax,wParam
    146. .if eax==1004 ;button Show your password
    147.    
    148.     invoke GetDlgItemText,hWin,1002,addr szName,30
    149.     push offset szName
    150.     invoke Generate,hWin
    151.    
    152.  
    153. .elseif eax==1005 ;button About
    154.     invoke MessageBox,hWin,addr TEXT,addr TITULO,MB_OK
    155.    
    156.    
    157. .elseif eax==1006 ;button Exit
    158.     invoke EndDialog,hWin,0    
    159.    
    160. .endif
    161.     .elseif eax==WM_CLOSE
    162.         invoke EndDialog,hWin,0
    163.     .else
    164.         mov     eax,FALSE
    165.         ret
    166.     .endif
    167.     mov     eax,TRUE
    168.     ret
    169.  
    170. DlgProc endp
    171.  
    172. end start
     
  10. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    А ты в текстовое поле (которое szName) вводишь 4 символа?
    Может вместо CMP использовать WinAPI lstrcmp?
     
  11. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Всем здравствуйте!!!
    Подскажите, пожалуйста, чем отличается запрос на выборку от запроса на создание таблицы в программной реализации??? (MS Access 2003)
    Запрос пишется в С++ с использованием ADO.
    Вот такой запрос работает(на выборку):
    Код (Text):
    1. _bstr_t bsCommand(L"SELECT Тип.[Возможная основа], Окончания.[Номер окончания], Окончания.[Буквенный код окончания] INTO 2222 FROM Тип INNER JOIN Окончания ON Тип.[Возможное окончание] = Окончания.[Буквенный код окончания];");
    2. recordset->
    3. Open(bsCommand,connection.GetInterfacePtr(),ADODB::adOpenForwardOnly, ADODB::adLockBatchOptimistic,ADODB::adCmdText);
    А вот такой запрос не работает(на создание таблицы):
    Эта таблица уже создана,запросу просто нужно вписать в неё данные и распечатать в txt.
    Код (Text):
    1. bstr_t bsCommand(L"SELECT Тип.[Возможная основа], Окончания.[Номер окончания], Окончания.[Буквенный код окончания]FROM Тип INNER JOIN Окончания ON Тип.[Возможное окончание] = Окончания.[Буквенный код окончания];");
    2. recordset-> Open(bsCommand,connection.GetInterfacePtr(),ADODB::adOpenForwardOnly, ADODB::adLockBatchOptimistic,ADODB::adCmdText);
     
  12. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Ой, я поля перепутала, там где есть INTO 2222 это запрос на выборку. 2222-это название таблиицы, которую заполняет запрос
     
  13. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    #1372
    Запрос на выборку(на создание таблицы)
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    OlechkaA
    Это как? По-жизни запрос на создание таблицы был - "Create Table"
    Вы бы лучше взяли книжку по sql, а то ведь забодаться можно спрашивать и отвечать.
    http://www.1keydata.com/sql/sqlcreate.html
     
  15. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    murder
    Я так понял, что ответ предназначался мне.
    В текстовое поле (которое szName) я вводил и 10 символов и 2 символа - результат одинаковый.
    Еще прилагаю Include File.
    Код (Text):
    1. include windows.inc
    2. include kernel32.inc
    3. include user32.inc
    4. include Comctl32.inc
    5. include shell32.inc
    6.  
    7. includelib kernel32.lib
    8. includelib user32.lib
    9. includelib Comctl32.lib
    10. includelib shell32.lib
    11.  
    12. DlgProc         PROTO   :HWND,:UINT,:WPARAM,:LPARAM
    13. Generate        PROTO   :HWND
    14.  
    15. .const
    16.  
    17. IDD_DIALOG1         equ 101
    18. IDC_CBO1            equ 1002 ;The Combobox
    19. ;#########################################################################
    20. .data
    21. String1           db   "http://1",0
    22. String2           db   "http://2",0
    23. String3           db   "http://3",0
    24. String4           db   "http://4",0
    25. String5           db   "https://5",0
    26. String6           db   "http://6",0
    27. String7           db   "http://7",0
    28. String8           db   "http://8",0
    29. String9           db   "http://9",0
    30. String10          db   "http://10",0
    31. szName            dd   16 dup(0)
    32.  
    33. Format            db   "%02i",0
    34. TITULO            db   "About",0
    35. TEXT              db   "Good Luck",0
    36.  
    37.  
    38. Constant1          db   "10",0      
    39. Constant2          db   "20",0      
    40. Constant3          db   "30",0      
    41. Constant4          db   "40",0      
    42. Constant5          db   "50",0      
    43. Constant6          db   "60",0      
    44. Constant7          db   "70",0      
    45. Constant8          db   "80",0      
    46. Constant9          db   "90",0      
    47. Constant10         db   "100",0    
    48. .data?
    49.  
    50. hInstance           dd ?
    51. hIcon               dd ?
    52. hCombo              dd ?
    Я уже все проверил, вроде бы все правильно, все должно работать, а работает неправильно.
     
  16. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    verdizela
    Используй lstrcmp (она находится в kernel32.dll) либо вводи строго 4 символа. Например для получения 4 пароля надо будет ввести "://4".
     
  17. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    murder
    Спасибо за ответ.
    С этим попробую так зделать.
    А таким способом пока ничего не выходит.
     
  18. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    verdizela
    Э-э-э-э MOV EDX,DWORD PTR DS:[EBX+4+szName] - теперь понял. Вводить надо 8 символов "http://4"
     
  19. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    murder
    Большое тебе спасибо!
    Теперь я понял и не только это:
    Вводить нужно не меньше 8 символов, больше можна и эти 8 символов, в моем случае, не должны быть одинаковыми, тогда все будет работать правильно, я уже проверил.
    Вот примеры:
    так будет работать не правильно
    Код (Text):
    1. String1           db   "http://www",0
    2. String2           db   "http://for",0
    3. String3           db   "http://ccc",0
    4. String4           db   "http://for",0
    5. String5           db   "https://frr",0
    6. String6           db   "http://tor",0
    7. String7           db   "http://fir",0
    8. String8           db   "http://ppp",0
    9. String9           db   "http://fqr",0
    10. String10          db   "http://fkr",0
    Для String4,String7,String9,String10 - будет показывать пароль присвоеный String2.

    а так будет работать правильно:
    Код (Text):
    1. String1           db   "http://www",0
    2. String2           db   "http://for",0
    3. String3           db   "http://ccc",0
    4. String4           db   "http://1or",0
    5. String5           db   "https://frr",0
    6. String6           db   "http://tor",0
    7. String7           db   "http://2ir",0
    8. String8           db   "http://ppp",0
    9. String9           db   "http://3qr",0
    10. String10          db   "http://4kr",0
    Еще раз БОЛЬШОЕ тебе спасибо за ответ и за то, что заставил меня думать.
     
  20. Vladimir_B

    Vladimir_B New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2009
    Сообщения:
    7
    Доброе утро всем! Я не программист ассемблера, и знаком с ним Очень поверхностно. Если участников форума не затруднит подсказать как выполнить простейшую операцию, буду очень вам благодарен.
    Программа выводит оси координат: X и Y и рисует окружность заданного радиуса, в точке центра осей координат.
    Код (Text):
    1. .model tiny
    2. .stack 100h
    3. .386p
    4. st1 segment para stack use16
    5.     db 256 dup(?)
    6. st1 ends
    7. data segment para public use16
    8.     savemode db ?
    9.     x dw 0
    10.     y dw 0
    11.     a dd 0.0
    12.     b dd 0.0
    13.     t dd 0.0
    14.     k dd 0.01
    15.     r dd 0.0
    16.     buf db 255 dup(?)
    17.     rr dw 0
    18.     dlin dw 0
    19.     des dw 10
    20.     ligne db 'Hello world.',37 dup(' '),'$'
    21.     nadpic db 'Введите радиус (целое значение от 1 до 238): '
    22.     nadpic1 db 'Ошибка ввода, проверьте правильность данных',0dh,0ah
    23. data ends
    24. cseg segment para public use16
    25.     assume ss:st1, ds:data,cs:cseg
    26.  
    27.  
    28. pp proc
    29.     fild rr         ;процедура преобразования в веществ.значение
    30.     fstp r
    31. ret
    32. pp endp
    33.  
    34.  
    35. newt PROC           ;процедура получения координат х и у
    36.  
    37.     fld t
    38.     fsincos
    39.     fstp a  ;cos
    40.     fstp b  ;sin
    41.     fld a
    42.     fmul r
    43.     frndint
    44.     fistp x
    45.     fld b
    46.     fmul r
    47.     frndint
    48.     fistp y
    49.     fld t
    50.     fadd k
    51.     fstp t
    52.     ret
    53. newt ENDP
    54.  
    55. begin:
    56.     mov ax,st1
    57.     mov ss,ax
    58.     mov ax,data
    59.     mov ds,ax
    60.     jmp nachalo
    61.    
    62. repeat: mov bx,1                ;вывод сообщения об ошибке
    63.     mov cx,45
    64.     lea dx,nadpic1
    65.     mov ah,40h
    66.     int 21h
    67.    
    68.    
    69.  
    70. nachalo:mov dx, offset ligne
    71.     mov ah,9
    72.     int 21h
    73.     ;mov ah, 10h         ; i?eaaao ia?aoey
    74.     ;int 16h
    75.     mov bx,1        ;вывод запроса на ввод радиуса
    76.     mov cx,45
    77.     lea dx,nadpic
    78.     mov ah,40h
    79.     int 21h
    80.    
    81.    
    82.     mov rr,0
    83.     mov ax,0             ;чтение с клавиатуры
    84.     mov dx,offset buf  
    85.     mov CX,255  
    86.     mov BX,0    
    87.     mov AH,3Fh  
    88.     int 21h
    89.     cmp ax,2
    90.     jbe repeat
    91.    
    92.  
    93.     sub ax,2                  ;проверка введенных данных
    94.     cmp ax,3
    95.     ja repeat                
    96.     mov dlin,ax
    97.    
    98.     mov bx,offset buf
    99.     mov si,0
    100.     mov cx,dlin
    101. ll1:    mov dl, byte ptr[bx+si]
    102.     sub dl,30h
    103.     mov byte ptr[bx+si],dl
    104.     inc si
    105.     loop ll1
    106.  
    107.     mov bx,offset buf
    108.     mov cx,dlin
    109.     mov si,0
    110. ll2:    mov dl, byte ptr[bx+si]
    111.     cmp dl, 0
    112.     jb repeat
    113.     cmp dl, 9
    114.     ja repeat
    115.     inc si
    116.     loop ll2
    117.    
    118.     mov cx,dlin
    119.     mov si,0
    120.     mov bx,offset buf         ;преобразование в число
    121. ll3:    mov ax,rr
    122.     mul des
    123.     mov rr,ax
    124.     xor ax,ax
    125.     mov al,byte ptr[bx+si]
    126.     add rr,ax
    127.     inc si
    128.     loop ll3   
    129.  
    130.     mov ax,rr
    131.     cmp ax,0
    132.     je repeat
    133.     cmp ax,238
    134.     ja repeat
    135.  
    136.  
    137.     call pp
    138.  
    139.     mov ax,0012h    ;установка видеорежима
    140.     int 10h
    141.  
    142.     mov cx,1256
    143.  
    144. circl:
    145.     push cx
    146.     call newt
    147.    
    148.     mov bx,0000h    ;построение графической точки
    149.     mov dx,y
    150.     mov cx,x
    151.     add dx,240  ;центр в начале координат
    152.     add cx,320
    153.     mov ax,0c0fh
    154.     int 10h
    155.  
    156.    
    157.  
    158.     pop cx
    159.     loop circl
    160.  
    161.  
    162.     mov cx,640 
    163.     mov dx,240
    164. os1:                ;построение оси х
    165.     inc cx
    166.     mov bx,0000h
    167.     mov ax,0c0fh
    168.     int 10h
    169.     dec cx
    170.     loop os1       
    171.  
    172.     mov cx,480
    173.     mov dx,1
    174. os2:                ;построение оси у
    175.     push cx
    176.     mov bx,0000h
    177.     mov ax,0c0fh
    178.     mov cx,320
    179.     int 10h
    180.     inc dx
    181.     pop cx
    182.     loop os2
    183.    
    184.  
    185.  
    186.     mov ax,0000h    ;ожидание нажатия клавиши для выхода из видеорежима
    187.     int 16h
    188.    
    189.     mov ax,0003h    ;выход из видеорежима 
    190.     int 10h
    191.  
    192. exit:   mov ax,4c00h    ;выход из программы
    193.     int 21h
    194. cseg ends
    195. end begin
    Мне нужно чтобы не выводилась строка:
    ligne db 'Hello world.',37 dup(' '),'$'
    Я пытался просто закомментить ее и место где она вызывается:
    mov dx, offset ligne
    mov ah,9
    int 21h
    Но в этом случае почему-то программа не запускалась.
    Еще передо мной стоит задача изменить цвет фона и цвет линий.