Помогите исправить ошибки.Нужно вывести на консоль информации о системе, что-то наподобие SystemInfo.exe. Заранее спасибо. Внес небольшие изменения в основной код Функции которые подключаю Код (ASM): includelib import32.lib includelib user32.lib includelib kernel32.lib extrn ExitProcess:near extrn GetCommandLineA:near extrn CreateFileA:near extrn CloseHandle:near extrn GetStdHandle:near extrn GetSystemInfo:near extrn GetComputerName:near extrn ReadFile:near extrn WriteFile:near extrn WriteConsoleA:near extrn CharToOemA:near extrn _wsprintfA:near extrn _lstrlenA:near ; присваивания для облегчения читаемости кода GetCommandLine equ GetCommandLineA CreateFile equ CreateFileA ; определения констант и типов STD_OUTPUT_HANDLE equ -11 GENERIC_READ equ 80000000h GENERIC_WRITE equ 40000000h OPEN_EXISTING equ 3 Основной код Код (ASM): include console.inc .386 .model FLAT,STDCALL .data hStdout dd ? SYS_INFO STRUC wProcessorArchitecture dw ? wReserved dw ? dwPageSize dd ? lpMinimumApplicationAddress dd ? lpMaximumApplicationAddress dd ? dwActiveProcessorMask dd ? dwNumberOfProcessors dd ? dwProcessorType dd ? dwAllocationGranularity dd ? wProcessorLevel dw ? wProcessorRevision dw ? SYS_INFO ENDS pattern db " Tip proccesora:",0 pattern386 db "PROCESSOR_INTEL_386",13,10,0 pattern486 db "PROCESSOR_INTEL_486 ",13,10,0 pattern586 db "PROCESSOR_INTEL_PENTIUM",13,10,0 pattern2200 db "PROCESSOR_INTEL_IA64",13,10,0 pattern8664 db "PROCESSOR_AMD_X8664 ",13,10,0 core db " Kolichestvo yader:%i",13,10,0 nam db " PK name:%i",13,10,0 arch db " Architecture:",0 NAME_PC db "MY_PC",13,10,0 arch9 db " PROCESSOR_ARCHITECTURE_AMD64",13,10,0 arch5 db " PROCESSOR_ARCHITECTURE_ARM",13,10,0 arch6 db " PROCESSOR_ARCHITECTURE_IA64",13,10,0 arch0 db " PROCESSOR_ARCHITECTURE_INTEL",13,10,0 buff dd ? buff1 dd ? hcons dd ? hfile dd ? buf db 100 dup(0) bufer db 300 dup(0) numb dd ? numw dd ? nameout db 'CONOUT$' .code _start: call GetStdHandle, offset STD_OUTPUT_HANDLE mov hStdout,eax call GetSystemInfo, offset SYS_INFO call _wsprintfA,offset buff, offset pattern call _lstrlenA, offset buff call WriteConsoleA, hStdout, offset buff, eax, 0,0 mov edi, SYS_INFO.dwProcessorType cmp edi , 386 je m386 cmp edi , 486 je m486 cmp edi , 586 je m586 cmp edi , 2200 je m2200 cmp edi , 8664 je m8664 m386:call _wsprintfA,offset buff, offset pattern386 jmp m2 m486:call _wsprintfA,offset buff, offset pattern486 jmp m2 m586: call _wsprintfA,offset buff, offset pattern586 jmp m2 m2200: call _wsprintfA,offset buff, offset pattern2200 jmp m2 m8664: call _wsprintfA,offset buff, offset pattern8664 m2: call _lstrlenA, offset buff call WriteConsoleA, hStdout, offset buff, eax, 0,0 call _wsprintfA,offset buff, offset core, offset SYS_INFO.dwNumberOfProcessors call _lstrlenA, offset buff call WriteConsoleA, hStdout, offset buff, eax, 0,0 call _wsprintfA,offset buff, offset arch call _lstrlenA, offset buff call WriteConsoleA, hStdout, offset buff, eax, 0,0 cmp SYS_INFO.wProcessorArchitecture , 9 je mAMD cmp SYS_INFO.wProcessorArchitecture, 5 je mARM cmp SYS_INFO.wProcessorArchitecture , 6 je mIA cmp SYS_INFO.wProcessorArchitecture , 0 je mInt mAMD:call _wsprintfA,offset buff, offset arch9 jmp m3 mARM:call _wsprintfA,offset buff, offset arch5 jmp m3 mIA: call _wsprintfA,offset buff, offset arch6 jmp m3 mInt: call _wsprintfA,offset buff, offset arch0 jmp m3 m3: call _lstrlenA, offset buff call WriteConsoleA, hStdout, offset buff, eax, 0,0 call GetComputerName , buff1, 4 call _lstrlenA, offset buff1 call WriteConsoleA, hStdout, offset buff1, eax, 0,0 m1:call ExitProcess,0 end _start
Так как ошибка не описана, а код полностью не читаем, то не имеет смысла пытаться искать ошибку в этом листинге.
Не большой знаток тасма, но директива offset по-моему здесь вообще некстати. Плюс структуру-то ты объявил, а тасм настолько крут что сам под нее буфер выделит? Или надо что-то вроде Код (ASM): binSysInfo SYS_INFO в секции данных объявить.
Не Тасм (автору темы я бы вообще предложил на TinyC перелезать, нет танцев с регистрами, оффсетами и прочими прелестями уровня ассемблера, а по сути - то же самое, крохотное!, с вызовами сишных принтфов), но в тему определения версий ОС, http://www.naughter.com/dtwinver.html , может кому пригодится.
Почему не басик? Почему не петон? Есть очень много чего без страшных директив страшного ассемблера, на котором к слову ИИ и бигдату не пишут и туда работать не возьмут с такими знаниями.
Сейчас популярного басика нет и не будет в обозримом будущем, так что рассматривать басик с целью трудоустройства глупо более чем полностью. Ну а так да, есть пьюрбасик, есть ксоджо, есть гамбас и тд и тп, только они особо никому не нужны. Петон медленный как ппц, хоть и популярный в дата сайенсе, но имхо в дата сайенсе сейчас куда интереснее выглядит джулия. --- Сообщение объединено, 26 дек 2019 --- В 99% всей программистской работы по всему миру асм не нужон, для нативной разработки вполне хватает присловутых плюсов и сишечки, или более хипсторских растов, нимов, ады, ди и тд. В крайнем случае всегда можно заюзать ассемблерную вставку или интринсику компилятора. Более того ИОТ сейчас стало модно делать на всяких там петонах, эликсирах и тд за счет оптимизации их вм под всяческие мелкие железки.
Вот вроде бы умные все люди, но то ли галлюцинации наблюдают с просьбой дать совет какой яп выбрать, то ли считают это своим священным долгом.