asm+C=bug

4 отговора 312 прегледа
#1

asm+C=bug

I've got a BIG problem:izpolzvam Microsoft Visual Studio i pri slednia __asm block:

__asm{
mov ah,01
int 21
mov ah,0x4c
int 21
}

PC- to mi BUGva.Taka stava vseki pat kogato izvikam nqkakvo prekusvane.Ako nqkoi ima nqkakvo re6enie na PROBLEMA-PLEASE HELP.

Thanks in advance!!!

Отговор
в отговор на __asm needer #2

Re: asm+C=bug

Hahahahaha, tui da ne ti e DOS be. Kvi prekusvania. Ti da si chuval za PROTECTED mode, osven INT 3 drug INT nema. Mozhe da iskash i video-rezhima da smenish s INT 10h, ama ne moe moi chovek, to ako tova se razreshava ti celia windows shte skapish.

Kogato izpulnish niakoia neredna instrukcia greshkata e General Protection Fault. Ako ne iskash da ima takava greshka triabva da si na priviligerovano nivo 0, a windowskite programi sa na nivo 3 (1 i 2 ne se izpolzvat). Toest za da mozhesh da pravish kvoto si iskash napishi si driver. Driverite sa na nivo 0 i tam mozhesh da pravish kvoto si iskash.

Отговор
в отговор на __asm needer #3

Re: asm+C=bug

е, не е толкова безнадеждно... :))))
верно че не може да се използват прекъсвания, но има предвиден начин все пак. погледни на "Using VWIN32 to Carry Out MS-DOS Functions" в MSDN. там е описано нещо което мисля ще ти свърши работа. идеята е следната - имаш структура с полета, които попълваш както съответните регистри за инт 21. след това се вика едно апи и то прави това което прави инт21. не съм го пробвал обаче:))))
а, има и нови функции, които заместват инт 25 и 26 за четене и запис на абсолютен сектор.

Отговор
в отговор на __asm needer #4

Re: asm+C=bug

То че няма да работи, няма, но все пак не трябва ли да бъде по-скоро "int 0x21", или пък "int 21h"?

Отговор
в отговор на __asm needer #5

Re: asm+C=bug

t.e. trebva da se polzvat DPMI funkcii koito sew vikat ot INT 33H!
predpolagam ce vse oste sa dostapni i pod novite windows-i!
drug e vaprosa ce edva li ima smisal da vikas DOS funkcii ot windows!

Отговор