asembler masm - procesor intel x86

asembler masm - procesor intel x86
PB
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:7
0

Cześć, zastanawiam się czemu poniższy rozkaz procesora nie powoduje błędu asemblacji a uruchamia sie poprawnie biorąc pod uwagę wyłącznie dwa ostatnie nawiasy kwadratowe z rejestrami:

mov eax,dword PTR [edx][edi][ebx][ecx]

Co o tym myślicie ? Nie wiem czemu twórcy nie zrobili tego w ten sposób by powodowało to błąd asemblacji a brane są pod uwagę dwa ostatnie nawiasy kwadratowe. I have no idea. Dzięki za odpowiedzi.

PR
  • Rejestracja:około 11 lat
  • Ostatnio:3 miesiące
  • Lokalizacja:Pomorskie (Stare Kabaty)
1

Pokaż pod disassemblerem albo chociaż w hexach całą instrukcje, bo takie coś jak ty tam wpisujesz to jest niemożliwe imo.

edytowany 2x, ostatnio: Proxima
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Pewny jesteś że to sie kompiluje? Bo ja mam wątpliwości.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
PB
Asembluje jak już :)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:8 minut
3
Proxima napisał(a):

Pokaż pod disassemblerem albo chociaż w hexach całą instrukcje, bo takie coś jak ty tam wpisujesz to jest niemożliwe imo.

Shalom napisał(a):

Pewny jesteś że to sie kompiluje? Bo ja mam wątpliwości.

Kompiluje się do

Kopiuj
67668B0419        mov eax,[dword ecx+ebx]
pawel_bolak napisał(a):

Nie wiem czemu twórcy nie zrobili tego w ten sposób by powodowało to błąd asemblacji

  1. bo twórcom nie przyszło do głowy że ktoś napisze tak idiotyczną instrukcję
  2. bo im się nie chciało
  3. bo nie mieli czasu
  4. bo ważniejsze jest żeby działało to co powinno działać, a nie żeby nie działało to co nie powinno.
PB
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 9 lat
  • Postów:7
0

Bardzo rzeczowe wytłumaczenie nie ma co, wykładowca nam powiedział, że dostaniemy dodatkowe punkty jeśli odpowiemy czemu twórcy zrobili coś takiego, więc na pewno poprawną odpowiedzią jest jedna z czterech które napisałeś wyżej. Na pewno :) :) :)

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:8 minut
0

Pytanie jest bezsensowne. Jest tak, bo tak jest. To nie jest prawidłowa instrukcja i nie powinna się kompilować. Ot, niedoróbka.
Możesz do Microsoftu zgłosić błąd ale cię oleją.

stasinek
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:17
0
pawel_bolak napisał(a):

mov eax,dword PTR [edx][edi][ebx][ecx]
Co o tym myślicie ?.

Myśle że powinieneś przysiąść i poczytać o architekturze Intel IA32 x86 to Ci dobrze zrobi ;)
wmii.uwm.edu.pl/~askard/pliki/LABS/.../Instrukcja%20lab_3.doc

Zwróć uwage w szczególności na takie hasła jak ALU, AGU i ich ograniczenia oraz instrukcje LEA
Ponadto chyba nie rozumiesz indeksowania tablic i wskaźników.
Kompendium wiedzy... czas start.

PS Borland C++ Builder 6 (darmowe) ma bardzo prosty i ludzki debugger kodu C -> asm nie chodzi o pisanie programów w C ale o zobaczenie do jakiej postaci kompilator upraszcza instrukcje i zobaczenia co sie dzieje krok po kroku np. __int32 c = 2, d = 1, tabilca[3][2]; __int32 a = tablica[c][d]; itp. Chociaż jest milion lepszych metod polecam bo jest bardzo intuicyjna a robienie wstawek. Nie jest to może dobry nawyk na przyszłość al e świetna metoda na przyjemne kodowanie i nauke ;)
Ewentualni Fresh IDE(fasm)

http://www.binboy.org/asembler/
http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

edytowany 7x, ostatnio: stasinek
Zobacz pozostały 1 komentarz
stasinek
Taki że podstawowy problem to nie kompilator a kompletny brak podstawowej wiedzy opa w jaki sposób odbywa się adresowanie, w jakiej jednostce procesora do nich dochodzi, jakim to podlega ograniczeniom. Szkoda mi tracić czasu na debatowanie o bzdetach skoro autor nie zna podstaw. Ale chce mu pomóc dlatego pisze
Azarien
ale autor pyta DLACZEGO pod MASMem kompiluje się bez błędu zapis mov eax,dword PTR [edx][edi][ebx][ecx] co jest faktem który każdy może sprawdzić, a nie co on miałby znaczyć.
stasinek
To może powinien zapytać pomoc techniczną Microsoft? A może poczytać dokumentacje kompilatorów? Bo może kompilator milczeniem pomija kolejne nawiasy? Odpowiedział bym inaczej gdyby w treści była linijka mov eax, dword PTR[edx][edi] albo mov eax, [edx][4*edi] bo specjalnie nie znam masm'a - mam nadzieje że dostrzegasz różnice? Skoro jednak ciekawi Cie specyfika masm'a i fakt to conajmniej dziwne poszukam w ramach bonusa ;)
PB
Asembler (kompilator jak Ty to mówisz) wcale nie pomija początkowych nawiasów bo gdy wpiszesz do któregoś z nich rejestr który nie istnieje np. 'eee' to wywoła to błąd asemblacji. Po drugie to chciałem najpierw zapytać na forum, gdybyście mi nie odpowiedzieli to dopiero potem zacząłbym szukać w dokumentacji asemblera masm odpowiedzi na to pytanie.
PR
Geez, widocznie to po prostu bug. Różnica między kompilacją a asemblacją jest faktycznie, ale uwierz mi, nie musisz w kółko wszystkich o tym napominać, bo myśle że wiedzą, tylko na zamiane czegoś czytelnego dla ludzi (asembler też jest czytelny, w miare) na hexy przyszło mówić kompilacja i tyle, no i nie jest to forum stricte o budowie kompilatorów.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)