hali!
> Szeretnem elerni 32-bites regisztereket, de a beepitett assembler nem
> ismeri az eax, ebx, stb regisztereket. Foleg mov, add, mul, div kellene
> 32 bites regiszterekkel.
A Borland-nak sosem sikerult lepest tartani a processzorok fejlodesevel
A WatcomC mar pentiumra optimalizalt, amikor a Borland Pascal / C tudta
a 286 utasitaskeszletet. :)
A lenyeg az, hogy meg lehet trukkozni a byte-okkal de sok galibat okozhat.
A 32 bites utasitasok ugyanugy neznek ki mint a 16 bites tarsai, csak egy prefi
x van elotte.
$66 -> 32bites adat prefix
MOV EAX,EBX
igy nez ki
DB $66; MOV AX,BX
es igy tovabb...
a konstans ertekadasnal vigyazni kell, mert a konstansbol is 16bitet fordit be
a proci meg 32-t var
MOV EAX,1000
=
DB$66; MOV AX,1000
DW 0 - az 1000, 32 bites ertek felso 16 bitje
ha viszont a konstans ertek 8 bites pl: 256-nal kisebb, akkor azt byte-nak ford
itja, tehat a masodik sor DW nem kell
arra mar nem emlexem, hogy a MOV-nal is van-e, de a CMP-nel biztos kulonbseg va
n BYTE/WORD ertek kozott
van egy masik prefix is $67
ez a 32 bites cim prefix
tehat:
MOV AX,[ESI]
=
DB $67; MOV AX,[SI]
ezeket kombinalni is lehet:
MOV EAX,[ESI]
=
DB $66,$67; MOV AX,[SI]
ha speci 32-bites cuccokat/cimzesmodokat akarsz hasznalni, azoknak nincs 16bite
s megfeleloje,
ezeket maximum kozvetlen ertekekkel irhatod be.
A DIV-nel CWD-helyett CDQ kell, ami a CWD precixelt valtozata DB $66; CWD
Hat soxerencset a probalgatashoz. Ha nagyon komoly dolgokat akarsz csinalni, ak
kor erdemes
elgondolkodni egy olyan forditon ami tud 32-bites kodot csinalni, mert sok sziv
as lehet belole.
Egy masik megoldas lehet az, hogy pl: TurboAssemblerrel csinalod meg az ASM res
zt es ezt
bele lehet linkelni a programba, mint EXTERNAL procedure...
udv:
-marci
|
> hS [Hungary] kerdezte:
> >Meg lehet úgy nyitni egy alkalmazás legfobb ablakát, hogy az ott
> >elhelyezett vezérloelemek, tab-ra automatikusan váltsák a fókuszt.
> >Úgy, ahogy azt egy dialog-ban teszik.
Haho!
Ha nem akarod dialogboxkent kezelni, akkor csinald a kovetkezoket:
/*
globalis valtozokent deklarald a kovetkezo tombot:
*/
$define NUMBER_OF_CONTROLS
az_altalad_letrehozni_kivant_kontrollok_szama
static HWND HWND_OF_CONTROLS[NUMBER_OF_CONTROLS];
/*
ezt a tombot fel kell majd toltened az altalad createwindow al letrehozott
kontrollok hwnd-ivel..
*/
/*
a messagefeldolgozo reszbe rakd a kovetkezot:
*/
case WM_KEYDOWN:
if (wparam == VK_TAB)
{
HWND w;
int i;
w = GetFocus();
for (i = 0; i < NUMBER_OF_CONTROLS; i ++)
{
if (w == GetDlgItem(main_window_hwnd_je, HWND_OF_CONTROLS[i]))
{
if (GetKeyState(VK_SHIFT) < 0)
i --;
else
i ++;
if (i < 0)
i = NUMBER_OF_CONTROLS - 1;
if (i >= NUMBER_OF_CONTROLS)
i = 0;
SetFocus(GetDlgItem(window, HWND_OF_CONTROLS[i]));
return 0;
}
}
SetFocus(GetDlgItem(window, HWND_OF_CONTROLS[0]));
}
return 0;
Ez csak egy egyszeru megoldas, ha ugyanugy akarod, hogy viselkedjen, mint a
dialogbox, akkor ketdimenzios tombot kell epiteni a kontrollok ws_tabstop
es ws_group
stilusai szerint...no de ennek mar hazilag nincs tul sok teteje, akkor mar
jobb a dialogboxot hasznalni...
Egyebkent ha nem szereted a dialogproc-okat/dialogbox-okat, akkor sima
windowproc-cal is lehet dialogboxot csinalni... :-) Ennek modja a
kovetkezo:
DefWindowProc kidobva, helyette DefDlgProc
RegisterWindowClass utan CreateWindow kidobva, helyette
DialogBox/CreateDialog
Resource fileben ket sor beszurva az ablak deklaraciojaba:
CLASS az_a_class_name_amit_a_registerwindowclass_ban_is_megadtal
STYLE WS_POPUP | WS_SYSMENU
/*peldaul... es mar nem is dialogbox kinezetu...*/
Ugy fog kinezni es viselkedni ahogy akarod, es a resource fileben meg
egyszeruen felepitheted a kontrolljaidat...
Sok sikert!
Udv
STeve
|