Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2014, 21:22   #1
Кунгр
 
Регистрация: 24.01.2014
Сообщений: 6
По умолчанию Переделать с ассемблера на с++

Выводит пустое окно
Код:
.386
model flat,STDCALL
include win32.inc      ;
extrn            BeginPaint:PROC 	;
extrn            CreateWindowExA:PROC;
extrn            DefWindowProcA:PROC  ;
extrn            DispatchMessageA:PROC;
extrn            EndPaint:PROC;
extrn            ExitProcess:PROC;
extrn            GetMessageA:PROC;
extrn            GetModuleHandleA:PROC;
extrn            LoadCursorA:PROC;
extrn            LoadIconA:PROC;
extrn            PostQuitMessage:PROC;
extrn            RegisterClassA:PROC;
extrn            ShowWindow:PROC;
extrn            TextOutA:PROC	;
extrn            UpdateWindow:PROC;
extrn            WriteConsoleA:PROC
extrn            ReadConsoleA:PROC
extrn            GetStdHandle:PROC
extrn            FreeConsole:PROC
extrn            AllocConsole:PROC
extrn            FindFirstFileA:PROC
extrn            FindNextFileA:PROC
extrn            FindClose:PROC
.data
newhwnd          dd 0
wc	         WNDCLASS    <?> ;
lppaint          PAINTSTRUCT <?> ;
msg              MSGSTRUCT   <?> ;
hInst            dd 0
fl		dw	0
szTitleName      db 'Вывод содержимого каталога в окно',0
szClassName      db 'ASMCLASS32',0
Buffer  	 db 'Сюда надо вывести текущий каталог',0
cur_file	db	50 dup (0)
MSG_L	dd 0
lpPathName	dd	0
szP	db	0
w32fd	WIN32_FIND_DATA	<?>
lpFileName	dd	0
fn	db	"*.*",0
hFindFile	dd	0
chn	dd	0
mess1_l	dd      80
mess2_l	dd	 80
num	dd	 0
buf_v	db      512	dup	(0)
box	dw 	 0
file_count dd 0
.code
start:
push	offset	w32fd;
push	offset	fn;
call	FindFirstFileA;
mov	hFindFile,eax;
mov	esi,0 ;
m3:	mov	dl,w32fd.cFileName[esi]
cmp	dl,0			;
je	m2			;
mov	buf_v[esi],dl		;
inc	esi			;
jmp	m3			;
m2:	inc	esi			;
mov	buf_v[esi],13		;
inc	esi
mov	buf_v[esi],10		;
inc	esi
m6:	 push	offset	w32fd		;
push	hFindFile			;
call	FindNextFileA		;
cmp	eax,0			;
je	kon
mov	edi,0			;
m4:	mov	dl,w32fd.cFileName[edi]	;
cmp	dl,0			;
je	m5			;
mov	buf_v[esi],dl	;
inc	edi			;
inc	esi			;
jmp	m4			;
m5:	inc	esi			;
mov	buf_v[esi],13		;
inc	esi			;
mov	buf_v[esi],10		;
inc	esi			;
jmp	m6			;
kon:
push    0				;
call    GetModuleHandleA			;
mov     [hInst], eax			;
reg_class:
mov     [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS;
mov     [wc.clsLpfnWndProc], offset WndProc
mov     [wc.clsCbClsExtra], 0
mov     [wc.clsCbWndExtra], 0
mov     eax, [hInst]
mov     [wc.clsHInstance], eax 		;
push    IDI_APPLICATION		;
push    0
call    LoadIconA
mov     [wc.clsHIcon], eax
push    IDC_ARROW			;
push    0
call    LoadCursorA
mov     [wc.clsHCursor], eax
mov     [wc.clsHbrBackground], COLOR_WINDOW + 9	;
mov     dword ptr [wc.clsLpszMenuName], 0
mov     dword ptr [wc.clsLpszClassName], offset szClassName
push    offset wc
call    RegisterClassA		;
push    0                      ;
push    [hInst]                  ;
push    0                      ;
push    0                      ;
push    CW_USEDEFAULT          ; 
push    CW_USEDEFAULT          ; 
push    CW_USEDEFAULT          ; 
push    CW_USEDEFAULT          ; 
push    WS_OVERLAPPEDWINDOW ; 
push    offset szTitleName  ; 
push    offset szClassName  ; 
push    0  ; 
call    CreateWindowExA ; 
mov     [newhwnd], eax; 
push    SW_SHOWNORMAL
push    [newhwnd]
call    ShowWindow
push    [newhwnd]		; 
call    UpdateWindow
msg_loop:
push    0
push    0
push    0
push    offset msg		; 
call    GetMessageA		; 
cmp     ax, 0			; 
je      end_loop			; 
push    offset msg		; 
call    DispatchMessageA
jmp     msg_loop
end_loop:
push    [msg.msWPARAM]	; 
call    ExitProcess		; 
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\;
wparam:DWORD, lparam:DWORD   ;
LOCAL   hDC:DWORD
cmp     [wmsg], WM_DESTROY
je      wmdestroy			;
cmp     [wmsg], WM_SIZE
je      wmsize			;
cmp     [wmsg], WM_CREATE
je      wmcreate			;
cmp	[wmsg],WM_PAINT
je	wmpaint		;
jmp     defwndproc		;
wmcreate:
mov     eax, 0
jmp     finish			;
defwndproc:			;
push    [lparam]
push    [wparam]
push    [wmsg]
push    [hwnd]
call    DefWindowProcA		;
jmp     finish			;
wmdestroy:
push    0
call    PostQuitMessage		;
mov     eax, 0
jmp     finish			;
wmsize:
mov     eax, 0
jmp     finish			;
wmpaint:
push    offset  lppaint		;
push    [hwnd]			;
call    BeginPaint		;
mov     [hDC],eax
mov	esi, offset buf_v	;
next_file:
mov	MSG_L, 0		;
mov	edi, offset cur_file	;
next_letter:
cmp	byte ptr [esi], 00h
jne	new_letter	;
add	esi, 3		;
jmp	out_file		;
new_letter:
movsb			;
inc	MSG_L		;
jmp	next_letter	;
out_file:
inc	file_count		;
push	MSG_L		;
push	offset	cur_file	;
mov	ebx, file_count	;
mov	eax, 16		;
mul	ebx		;
push	eax;eax
push	5		; 
push	[hDC]
call	TextOutA
cmp	byte ptr [esi], 0	; 
jne	next_file		; 
end_file:
push    offset lppaint		; 
push    [hwnd]
call    EndPaint	        ; 
mov	eax,0
jmp	finish		        ; 
finish:
ret				; 
WndProc          endp			; 
public WndProc			        ; 
end start				;

Последний раз редактировалось Stilet; 20.02.2014 в 21:56.
Кунгр вне форума Ответить с цитированием
Старый 20.02.2014, 21:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опа... Два вопроса:
1) А задачо то как звучит? Что эта асмовая прога то делает?
2) Билдер? Точно речь идет о Билдере а не о WINApi шненькой заС++шеной программульке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2014, 22:06   #3
Кунгр
 
Регистрация: 24.01.2014
Сообщений: 6
По умолчанию

программа должна вывести главное окно приложении. надо переделать из ассемблеровского кода в с++
Кунгр вне форума Ответить с цитированием
Старый 20.02.2014, 22:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А зачем переделывать??? Запускаете студию и грите дай вин32 приложение - готово.

П.С. Если не поняли: получите именно то, что просите - этот код на с++.
p51x вне форума Ответить с цитированием
Старый 20.02.2014, 23:04   #5
Кунгр
 
Регистрация: 24.01.2014
Сообщений: 6
По умолчанию

к сожалению я не владею этой программой у меня C++ Builder 6
Кунгр вне форума Ответить с цитированием
Старый 18.03.2014, 21:08   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

На сколько я понял, программа читает файлы текущего каталога и выводит их в окно. 1) Есть сомнения, по поводу записи имён файлов в буфер, длиной 512 байт... Как бы, если файлов будет много, то переполнение однозначное.
2) Цвет пера и заливки не устанавливается. Вполне возможно, поэтому и окно "пустое". На самом деле оно не пустое, а просто цвет шрифта и цвет фона одинаковы.

Может, я и не прав. Не претендую...
FataLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Команда Ассемблера vitik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.01.2014 04:56
Команды ассемблера JoBl Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.05.2012 13:13
язык ассемблера nastya_m Помощь студентам 5 07.12.2011 13:15
переделать текст ассемблера gylayko Помощь студентам 0 17.10.2011 17:17
Вставка ассемблера в Си Влодимир Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 18.02.2011 05:05