Результатом вызова winapi функции получается не то что должно быть:
<code>
section '.data' data readable writeable
sector_per_cluster dq 0
byte_per_sector dq 0
free_clusters dq 0
total_clusters dq 0
disc_name db 'D:\\',0
show_result db 30 dup(0)
title_window db "Доступное дисковое пространство",0
szformat db '%lu,%lu,%lu,%lu',0
section '.code' code readable executable
start:
invoke GetDiskFreeSpace,disc_name,sector_per_cluster,byte_per_sector,free_clusters,total_clusters
invoke wsprintf, show_result, szformat, sector_per_cluster, byte_per_sector, free_clusters, total_clusters
invoke MessageBox,0, show_result, title_window,MB_OK
</code>
В чем ошибка?
Другие языки программирования и технологии
FASM - ассемблер
Ошибки в строке, выделенной жирным шрифтом. Функция wsprintf принимает в качестве параметров значения чисел, а вы передаёте ей адреса этих чисел.
Остальные исправления - просто неточности.
format PE GUI 4.0
entry start
include 'win32a.inc'
stack 200h
section '.data' data readable writeable
sector_per_cluster rd 1
byte_per_sector rd 1
free_clusters rd 1
total_clusters rd 1
disc_name db 'D:\',0
show_result rb 30
title_window db "Доступное дисковое пространство",0
szformat db '%u,%u,%u,%u',0
section '.code' code readable executable
start:
invoke GetDiskFreeSpace,disc_name,sector_per_cluster,\
byte_per_sector,free_clusters,total_clusters
invoke wsprintf,show_result,szformat,[sector_per_cluster],\
[byte_per_sector],[free_clusters],[total_clusters]
invoke MessageBox,0,show_result,title_window,MB_OK
invoke ExitProcess, NULL
section '.idata' import data readable
library kernel32,'kernel32.dll',user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
P.S. Почему бы вам не воспользоваться функцией GetDiskFreeSpaceEx? Она возвращет непосредственно объём свободного пространства в байтах.
Остальные исправления - просто неточности.
format PE GUI 4.0
entry start
include 'win32a.inc'
stack 200h
section '.data' data readable writeable
sector_per_cluster rd 1
byte_per_sector rd 1
free_clusters rd 1
total_clusters rd 1
disc_name db 'D:\',0
show_result rb 30
title_window db "Доступное дисковое пространство",0
szformat db '%u,%u,%u,%u',0
section '.code' code readable executable
start:
invoke GetDiskFreeSpace,disc_name,sector_per_cluster,\
byte_per_sector,free_clusters,total_clusters
invoke wsprintf,show_result,szformat,[sector_per_cluster],\
[byte_per_sector],[free_clusters],[total_clusters]
invoke MessageBox,0,show_result,title_window,MB_OK
invoke ExitProcess, NULL
section '.idata' import data readable
library kernel32,'kernel32.dll',user32,'user32.dll'
include 'api/kernel32.inc'
include 'api/user32.inc'
P.S. Почему бы вам не воспользоваться функцией GetDiskFreeSpaceEx? Она возвращет непосредственно объём свободного пространства в байтах.
Меня смущает двойной слэш при указании диска, это не си.
Зачем тип dq, нужно dd. желательно использовать getdiskfreespaceEx
Зачем тип dq, нужно dd. желательно использовать getdiskfreespaceEx
> Зачем тип dq, нужно dd.
DD - двойное слово (32 бита)
DQ - четверное (64 бита)
> желательно использовать getdiskfreespaceEx
согласен. подробности см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx
DD - двойное слово (32 бита)
DQ - четверное (64 бита)
> желательно использовать getdiskfreespaceEx
согласен. подробности см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx
>Результатом вызова winapi функции получается не то что должно быть
Начните с проверки результатов вызова функций:
документация к wsprintf:
>If the function fails, the return value is less than the length of the expected output.
>To get extended error information, call GetLastError.
GetDiskFreeSpaceEx (поддерживается с XP ;) )
> If the function fails, the return value is zero (0).
> To get extended error information, call GetLastError.
А еще: OllyDbg - отличный отладчик ;)
Начните с проверки результатов вызова функций:
документация к wsprintf:
>If the function fails, the return value is less than the length of the expected output.
>To get extended error information, call GetLastError.
GetDiskFreeSpaceEx (поддерживается с XP ;) )
> If the function fails, the return value is zero (0).
> To get extended error information, call GetLastError.
А еще: OllyDbg - отличный отладчик ;)
Похожие вопросы
- Простая задача на FASM (ассемблер) помогите 3 дня мучаюсь!!!
- Как реализовать рекурсию на языке ассемблера? (intel 80х86, masm, tasm или fasm)
- Нужен срочно код на ассемблере FASM для рисования красного креста на белом фоне!
- Fasm, вызов WinAPI функций
- Что может ассемблер?
- Почему многие программисты ненавидят ассемблер?Ведь у него куча плюсов!Он позволяет максимально задействовать
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...
- Ассемблер сегодня и завтра.
- стоит ли изучать ассемблер, если программирую на Делфи? и вообще реально ли что нибудь хорошее, дельное, нужное написать