ASSEMBLER inštrukcie pre prácu z reťazcami

Programovacie jazyky, rady, poradňa...
marti12
Amateur
Amateur
Príspevky: 12
Registrovaný: 02 dec 2009, 20:56

ASSEMBLER inštrukcie pre prácu z reťazcami

Príspevok od používateľa marti12 »

vie niekdo?

používam MASM32. keď chcem použiť inštrukciu ktorá pracuje z reťazcami tak mi vypíše chybové hlásenie.
V aplikaci MyFirstProg.exe došlo k problému a je třeba ji zavřít. Omlouváme se za vzniklé potíže.
napríklad inštrukcia LODSB ale aj ostatné.
treba pouziť nejakú knižnicu? kde môže byť problém?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

V (e)si registri máš správnu adresu?
marti12
Amateur
Amateur
Príspevky: 12
Registrovaný: 02 dec 2009, 20:56

Príspevok od používateľa marti12 »

Kód: Vybrať všetko

.586
.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

.data
.code
Start:
   
   
   stosb
 
    
	invoke	ExitProcess,NULL

end		Start
myslim ze nemusim mat nastavene registre aby mi takyto program siel bez chyboveho hlasenia nie?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Musíš. Ten príkaz zapisuje bajt z registra al do pamäte na adresu es:edi (ak tam nie je vhodná adresa, tak ten program "spadne").
marti12
Amateur
Amateur
Príspevky: 12
Registrovaný: 02 dec 2009, 20:56

Príspevok od používateľa marti12 »

diki moc. teraz mi to ide. len pre zaujimavost nevies preco program krachne ak nastaveny nieje? co sa konkretne udeje ze spadne?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Po spustení je v registri edi pravdepodobne nula, takže ten príkaz sa snaží zapisovať na nulovú adresu. Tam sa ale normálne zapisovať z rôznych dôvodov nedá a OS signalizuje programu, že sa pokúša zapisovať tam, kam nemôže. Keďže ty nijako neriešiš podobné chyby, tak sa použije ošetrovanie chýb, ktoré sa nachádza v štandardnej knižnici a to spôsobí, že sa vypíše chyba a program sa ukončí (pravdepodobne sa zavolá funkcia exit, alebo niečo podobné).
marti12
Amateur
Amateur
Príspevky: 12
Registrovaný: 02 dec 2009, 20:56

Príspevok od používateľa marti12 »

diki za odpoved. pytal som sa aj na inom fore a tam mi to zdvovodnili rovnako. este raz DIK.
Napísať odpoveď