Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
1

Исправить код программы на MASM

19.11.2014, 21:57. Просмотров 389. Ответов 14
Метки нет (Все метки)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
.386 
.model flat, stdcall   
       option casemap :none  
      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
 
      szText MACRO Name, Text:VARARG
        LOCAL lbl
          jmp lbl
            Name db Text,0
          lbl:
        ENDM
      m2m MACRO M1, M2
        push M2
        pop  M1
      ENDM
      return MACRO arg
        mov eax, arg
        ret
      ENDM
 
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
        TopXY PROTO   :DWORD,:DWORD
 
    .data
        szDisplayName db "Generic",0
        CommandLine   dd 0
        hWnd          dd 0
        hInstance     dd 0
        dname         db "dial",0
    .code
start:
    invoke GetModuleHandle, NULL 
    mov hInstance, eax         
    invoke GetCommandLine        
    mov CommandLine, eax          
    invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess,eax       
 
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow :DWORD
        LOCAL wc   :WNDCLASSEX
        LOCAL msg  :MSG
        LOCAL Wwd  :DWORD
        LOCAL Wht  :DWORD
        LOCAL Wtx  :DWORD
        LOCAL Wty  :DWORD
 
        mov wc.cbSize,         sizeof WNDCLASSEX    
        mov wc.style,          CS_HREDRAW or CS_VREDRAW     
        mov wc.lpfnWndProc,    offset WndProc       
        mov wc.cbClsExtra,     NULL             
        mov wc.cbWndExtra,     NULL             
        m2m wc.hInstance,      hInst                        
        mov wc.hbrBackground,  COLOR_BTNFACE +1         
        mov wc.lpszMenuName,   NULL             
        mov wc.lpszClassName,  offset szClassName       
    invoke LoadIcon, hInst, IDI_APPLICATION     
        mov wc.hIcon,   eax                 
    invoke LoadCursor, NULL, IDC_ARROW          
        mov wc.hCursor,     eax                     
        mov wc.hIconSm,        0                    
        invoke RegisterClassEx, ADDR wc

        mov Wwd, 500
        mov Wht, 350                        
        invoke GetSystemMetrics,SM_CXSCREEN     
        invoke TopXY,Wwd,eax                    
        mov Wtx, eax                        
        invoke GetSystemMetrics,SM_CYSCREEN         
        invoke TopXY,Wht,eax                    
        mov Wty, eax                        
        szText szClassName,"Generic_Class"
 
invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,
                ADDR szClassName,
                ADDR szDisplayName,
                WS_OVERLAPPEDWINDOW,
                Wtx, Wty, Wwd, Wht,
                NULL, NULL,
                hInst, NULL
        mov hWnd, eax                                                                        
        invoke LoadMenu, hInst, 600
        invoke SetMenu, hWnd, eax
        invoke ShowWindow,hWnd,SW_SHOWNORMAL
        invoke UpdateWindow,hWnd                                
 
    StartLoop:
      invoke GetMessage,ADDR msg,NULL,0,0                
      cmp eax, 0                                            
      je ExitLoop                                               
      invoke TranslateMessage, ADDR msg                 
      invoke DispatchMessage,  ADDR msg                 
      jmp StartLoop
    ExitLoop:
 
      return msg.wParam
 
WinMain endp
 
WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD
    .if uMsg == WM_CLOSE
        szText TheText,"Do you want to exit?"
        invoke MessageBox,hWin,ADDR TheText,ADDR szDisplayName,MB_YESNO
          .if eax == IDNO
            return 0
          .endif
    .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage,NULL
        return 0 
    .elseif uMsg == WM_KEYDOWN
     .if wParam == 1bh
     invoke PostQuitMessage, NULL
    .elseif uMsg == WM_KEYDOWN
     .if wParam == 41h
     invoke DialogBoxParam NULL, addr dname, NULL, addr Dproc, NULL
    .endif
    invoke DefWindowProc,hWin,uMsg,wParam,lParam
   ret
WndProc endp
 
Dproc proc hWin   :DWORD,
           uMsg   :DWORD,
           wParam :DWORD,
           lParam :DWORD
.if uMsg == WM_COMMAND
.if wParam == 1
invoke EndDialog hWin, 0
.endif
.endif
.elseif uMsg == WM_CLOSE
.if wParam == 0
invoke EndDialog hWin, 0
.endif
ret 16
.endp
 
TopXY proc wDim:DWORD, sDim:DWORD
    shr sDim, 1      
    shr wDim, 1      
    mov eax, wDim    
    sub sDim, eax   
    return sDim
TopXY endp
 
end start
0
Вложения
Тип файла: zip masm.zip (3.2 Кб, 6 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 21:57
Ответы с готовыми решениями:

изменить код на MASM
дан код программы,которая строит график функции... у меня не компилируется... куда и что нужно...

Не компилируется код (masm 10)
.386 .MODEL small, stdcall .DATA h dd 10 .CODE start:

[MASM] Прога не компилится. непонятная ошибка(код копировал с методички)
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ include...

Нужен код на masm для вывода на экран прямой вертикальной линии
Надо чтобы линия выводилась сразу и самому рисовать не надо было

Какие преимущества и недостатки у программы EMU8086, по сравнению с TASM, MASM, VASM
....доброго времени суток, уважаемые форумчане... имеется два вопроса: 1. Какие преимущества и...

14
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:01  [ТС] 2
помогите с ошибками я начинаюий

Добавлено через 3 минуты
ошибки в роцедуре Dproc и в KEYDOWN
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,136
Записей в блоге: 1
19.11.2014, 22:02 3
n1ko,

какие ошибки выскакивают и что должна делать программа?
не каждому захочеться строить проект вашего кода и большинству попросту это не надо.
проще описать проблему.возможно решение лежит сверху.
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:06  [ТС] 4
вот скрин
0
Миниатюры
Исправить код программы на MASM  
19.11.2014, 22:06
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:07  [ТС] 5
по нажатию клавиши А должен окрываться диало с кнопкой
по Esc все должно закрываться
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,136
Записей в блоге: 1
19.11.2014, 22:09 6
может здесь?

Assembler
1
2
3
4
5
6
7
8
9
.elseif uMsg == WM_KEYDOWN
     .if wParam == 1bh
     invoke PostQuitMessage, NULL 
     .endif    ;здесь закрыть выполнение условия
    .elseif uMsg == WM_KEYDOWN
     .if wParam == 41h
     invoke DialogBoxParam NULL, addr dname, NULL, addr Dproc, NULL
      .endif    ;здесь закрыть выполнение условия
    .endif
Assembler
1
EndDialog ,hWin, 0  ; зпт пропущена
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:11  [ТС] 7
ну да в строке
.if wParam == 41h
а почему?
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,136
Записей в блоге: 1
19.11.2014, 22:13 8
Цитата Сообщение от n1ko Посмотреть сообщение
а почему?
закрывать надо блок.это не Си.Дальше условия относяться к этому блоку если не закрыть.
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:15  [ТС] 9
непонял

Добавлено через 1 минуту
блок закрыл но ошибка осталась в той же строке
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,136
Записей в блоге: 1
19.11.2014, 22:22 10
Цитата Сообщение от n1ko Посмотреть сообщение
блок закрыл но ошибка осталась в той же строке
где что исправил и что за строка?

Добавлено через 28 секунд
я тебе показал что исправлять.проследи за кодом и разберись.
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:24  [ТС] 11
я закрыл блок на ошибка там же
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:25  [ТС] 12
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
      .386                   
      .model flat, stdcall   
       option casemap :none  
      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
 
      szText MACRO Name, Text:VARARG
        LOCAL lbl
          jmp lbl
            Name db Text,0
          lbl:
        ENDM
      m2m MACRO M1, M2
        push M2
        pop  M1
      ENDM
      return MACRO arg
        mov eax, arg
        ret
      ENDM
 
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
        TopXY PROTO   :DWORD,:DWORD
 
    .data
        szDisplayName db "Generic",0
        CommandLine   dd 0
        hWnd          dd 0
        hInstance     dd 0
        dname         db "dial",0
    .code
start:
    invoke GetModuleHandle, NULL 
    mov hInstance, eax         
    invoke GetCommandLine        
    mov CommandLine, eax          
    invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess,eax       
 
WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow :DWORD
        LOCAL wc   :WNDCLASSEX
        LOCAL msg  :MSG
        LOCAL Wwd  :DWORD
        LOCAL Wht  :DWORD
        LOCAL Wtx  :DWORD
        LOCAL Wty  :DWORD
 
        mov wc.cbSize,         sizeof WNDCLASSEX    
        mov wc.style,          CS_HREDRAW or CS_VREDRAW     
        mov wc.lpfnWndProc,    offset WndProc       
        mov wc.cbClsExtra,     NULL             
        mov wc.cbWndExtra,     NULL             
        m2m wc.hInstance,      hInst                        
        mov wc.hbrBackground,  COLOR_BTNFACE +1         
        mov wc.lpszMenuName,   NULL             
        mov wc.lpszClassName,  offset szClassName       
    invoke LoadIcon, hInst, IDI_APPLICATION     
        mov wc.hIcon,   eax                 
    invoke LoadCursor, NULL, IDC_ARROW          
        mov wc.hCursor,     eax                     
        mov wc.hIconSm,        0                    
        invoke RegisterClassEx, ADDR wc

        mov Wwd, 500
        mov Wht, 350                        
        invoke GetSystemMetrics,SM_CXSCREEN     
        invoke TopXY,Wwd,eax                    
        mov Wtx, eax                        
        invoke GetSystemMetrics,SM_CYSCREEN         
        invoke TopXY,Wht,eax                    
        mov Wty, eax                        
        szText szClassName,"Generic_Class"
 
invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,
                ADDR szClassName,
                ADDR szDisplayName,
                WS_OVERLAPPEDWINDOW,
                Wtx, Wty, Wwd, Wht,
                NULL, NULL,
                hInst, NULL
        mov hWnd, eax                                                                        
        invoke LoadMenu, hInst, 600
        invoke SetMenu, hWnd, eax
        invoke ShowWindow,hWnd,SW_SHOWNORMAL
        invoke UpdateWindow,hWnd                                
 
    StartLoop:
      invoke GetMessage,ADDR msg,NULL,0,0                
      cmp eax, 0                                            
      je ExitLoop                                               
      invoke TranslateMessage, ADDR msg                 
      invoke DispatchMessage,  ADDR msg                 
      jmp StartLoop
    ExitLoop:
 
      return msg.wParam
 
WinMain endp
 
WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD
    .if uMsg == WM_CLOSE
        szText TheText,"Do you want to exit?"
        invoke MessageBox,hWin,ADDR TheText,ADDR szDisplayName,MB_YESNO
          .if eax == IDNO
            return 0
          .endif
    .elseif uMsg == WM_KEYDOWN
     .if wParam == 1bh
     invoke PostQuitMessage, NULL
     .endif
    .elseif uMsg == WM_KEYDOWN
     .if wParam == 41h
     invoke DialogBoxParam NULL, addr dname, NULL, addr Dproc, NULL
    .endif
    .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage,NULL
        return 0 
    invoke DefWindowProc,hWin,uMsg,wParam,lParam
   ret
WndProc endp
 
Dproc proc hWin   :DWORD,
           uMsg   :DWORD,
           wParam :DWORD,
           lParam :DWORD
.if uMsg == WM_COMMAND
 .if wParam == 1
invoke EndDialog, hWin, 0
.endif
.elseif uMsg == WM_CLOSE
.if wParam == 0
invoke EndDialog, hWin, 0
.endif
 ret 16
.endp
 
TopXY proc wDim:DWORD, sDim:DWORD
    shr sDim, 1      
    shr wDim, 1      
    mov eax, wDim    
    sub sDim, eax   
    return sDim
TopXY endp
 
end start
0
Миниатюры
Исправить код программы на MASM  
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:26  [ТС] 13
все ошибки в внд проц
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,136
Записей в блоге: 1
19.11.2014, 22:46 14
Цитата Сообщение от n1ko Посмотреть сообщение
120 invoke DialogBoxParam NULL, addr dname, NULL, addr Dproc, NULL
зпт поставь после имени ф-ции.Трудно посмотреть на указанную строку с ошибкой?

Цитата Сообщение от n1ko Посмотреть сообщение
142 .endp
тчк убери и допиши имя ф-ции спереди.закрывать блок процедуры без точки.
намекают же.
144 видимо из-за этого.

остальное - позакрывай все блоки с условиями.

Добавлено через 1 минуту
Assembler
1
2
3
4
5
6
7
8
9
.if uMsg == WM_COMMAND
        .if wParam == 1
              invoke EndDialog, hWin, 0
       .endif
.elseif uMsg == WM_CLOSE
       .if wParam == 0
             invoke EndDialog, hWin, 0
       ;догадайся что дописать надо.
.endif
Добавлено через 2 минуты
извини за грубость.но стоит ли бежать и писать сразу на форум,когда достаточно самому немножко подумать?

Добавлено через 5 минут
Assembler
1
2
3
4
    
    mov eax, wDim    
    sub sDim, eax   
    return sDim        ;не знаю что это такое
Assembler
1
2
3
4
    
    mov eax, wDim    
    sub sDim, eax   
    ret        ;
0
n1ko
3 / 3 / 2
Регистрация: 19.05.2013
Сообщений: 84
19.11.2014, 22:54  [ТС] 15
спасибо
мог бы сразу так и написать
0
19.11.2014, 22:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 22:54

Подскажите этот код для TASM или MASM?
Подскажите это TASM или MASM? EOFLINE EQU '$' AStack SEGMENT STACK DW 12 DUP(?) AStack ENDS...

Исправить код программы заполнения массива
s_s segment stack dw 20 dup(?) s_s ends d_s segment mas1 db 5,2,7,1,6,12,4,10,8,9...

Исправить код программы
Здравствуйте! Помогите пожалуйста,вот программа на Jave. import java.util.Arrays; import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru