asm
14 отговора
762 прегледа
asm
naskoro mi se slu4i ne6to za koeto vse o6te nqmam obqsnenie.
Imam masiv ot celi na adres pArray, iskam da pi6a w nego na opredelen offset:
.
.
.
mov ebx, pArray
mov ecx, Index ; Nqkakuw Index = 5 da re4m
mov [ebx+4*ecx], edi ; DAWA run-time error ?!?
oba4e ako zamestq posledniq red s:
mov [ebx+4*ecx], edx - vsi4ko e OK
Za6to se polu4awa taka ?
Imam masiv ot celi na adres pArray, iskam da pi6a w nego na opredelen offset:
.
.
.
mov ebx, pArray
mov ecx, Index ; Nqkakuw Index = 5 da re4m
mov [ebx+4*ecx], edi ; DAWA run-time error ?!?
oba4e ako zamestq posledniq red s:
mov [ebx+4*ecx], edx - vsi4ko e OK
Za6to se polu4awa taka ?
Re: asm
Абе забравил съм ги тия неща вече, ама ако не се лъжа имаше някаква особеност при индексните регистри. Май не можеха да се зареждат от всеки регистър, а явно не не могат и да зареждат памет с всяка адресация. То там полето за операнд регистър вероятно е само 2 бита и в него кодират регистрите с общо предназначение. Пък асемблерът кой знае каква невалидна инструкция ти е изгенерирал, или още по-лошо - набутал е кода на друг регистър. Пробвай го дали ще мине с друг асемблер. Мен на бъг ми мирише.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: asm
"mov ebx, pArray"
ти зарежда в ebx СТОЙНОСТТА на елемент 0 на pArray!
След това следва "access violation exception" и в двата случая, в зависимост от това, какво има в pArray[0].
Ползвай "lea ebx, pArray"
ти зарежда в ebx СТОЙНОСТТА на елемент 0 на pArray!
След това следва "access violation exception" и в двата случая, в зависимост от това, какво има в pArray[0].
Ползвай "lea ebx, pArray"
Re: asm
В прочем, ако ползваш inline assembler в C/C++:
При декларация
"int pArray[20]"
ползвай
"lea ebx, pArray".
При декларация
"int* pArray = new int [20]"
ползвай
"mov ebx, pArray".
При декларация
"int pArray[20]"
ползвай
"lea ebx, pArray".
При декларация
"int* pArray = new int [20]"
ползвай
"mov ebx, pArray".
Re: asm
хммм...като казваш run-time error, значи все пак го пишеш на език от високо ниво?
Защото съм забелязал, че inline-assembler-а на Delphi например, позволява да пишеш глупости, т.е. невалидни инструкции, които както казаха тука, се кодират в кой знае какво...
Освен това, май найстина не зареждаш правилно адреса, използвай lea...
Дори (не съм сигурен че ще стане коректно, не мога да пробвам в момента) но с lea може да си направиш и сметката. Спомням си, че преди много години MS C компилатора генерираше lea инструкции, за да представи сметне по-проста аритметична операция...
---
...и аз пиша на кирилица!
Защото съм забелязал, че inline-assembler-а на Delphi например, позволява да пишеш глупости, т.е. невалидни инструкции, които както казаха тука, се кодират в кой знае какво...
Освен това, май найстина не зареждаш правилно адреса, използвай lea...
Дори (не съм сигурен че ще стане коректно, не мога да пробвам в момента) но с lea може да си направиш и сметката. Спомням си, че преди много години MS C компилатора генерираше lea инструкции, за да представи сметне по-проста аритметична операция...
---
...и аз пиша на кирилица!
Редактирано от ess на
Re: asm
za bazowiq adres na masiwa spor nqma siguren sum 4e e pravilno.
t.e ako zadelam w steka :
mov ebx, [pArray] ili lea ebx, pArray
ako zadeleam s heap-a s HeapAlloc da re4em to togawa:
mov ebx, pArray
A ina4e run-time error v smisul 4e nqmam razre6enie da pi6a na tozi adres.
May Colombino e praw za indeksnite registri mislq 4e ottam idwa problema.
t.e ako zadelam w steka :
mov ebx, [pArray] ili lea ebx, pArray
ako zadeleam s heap-a s HeapAlloc da re4em to togawa:
mov ebx, pArray
A ina4e run-time error v smisul 4e nqmam razre6enie da pi6a na tozi adres.
May Colombino e praw za indeksnite registri mislq 4e ottam idwa problema.
Re: asm
Ам тъй, де...ти така и не каза, на какво го пишеш, но както казах, карал съм Delphi-то да генерира "странни" инструкции...
[offtopic]Ох...как ми се пише на асемблер, но напоследък няма време...[/offtopic]
---
...и аз пиша на кирилица!
[offtopic]Ох...как ми се пише на асемблер, но напоследък няма време...[/offtopic]
---
...и аз пиша на кирилица!
Редактирано от ess на
Re: asm
Дизасемблирай си резултатния обектен код и виж каква инструкция ти е генерирал асемблера.
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
"Всички науки са или физика, или колекциониране на пощенски марки." (Е. Ръдърфорд)
Re: asm
kakto sme na tema za assembler edno drugo ne6to.
Zna4i poprincip rqdko izpolzwam __asm{ ... }
Obiknoweno pi6a cqlata programa na assebmler (ako e po malka) ili s custom build compiliram w otdelni moduli ot *.asm. Ta stava vupros nqkoi pisal li e DLL s export-irani funkcii na assebmler i da vika tezi funkcii (implicitly) ot c++ programa ?
Imam problem s dekoriranite imena na assembler i C++; ima razli4iq i linker-a ne girazpoznawa pri import.
Zna4i poprincip rqdko izpolzwam __asm{ ... }
Obiknoweno pi6a cqlata programa na assebmler (ako e po malka) ili s custom build compiliram w otdelni moduli ot *.asm. Ta stava vupros nqkoi pisal li e DLL s export-irani funkcii na assebmler i da vika tezi funkcii (implicitly) ot c++ programa ?
Imam problem s dekoriranite imena na assembler i C++; ima razli4iq i linker-a ne girazpoznawa pri import.
Re: asm
това дето го казваш е вярно само за някои асемблери, а за тези за които важи зависи как е декларирано pArray