AMcoder - javascript, python, java, html, php, sql

x86-ի վրա օֆսեթ գրություն կա՞:

ARM-ով ես կարող եմ մուտք գործել հիշողության տեղադրություն, ինչպիսին է.

LDR r0, [r1, #4]!

Այսինքն՝ ես ուզում եմ բեռնել r1-ով մատնանշված արժեքը՝ 4 բայթ օֆսեթով, և ! նշանակում է, որ ես ուզում եմ, որ r1-ի արժեքը թարմացվի այս հրահանգից հետո նոր արժեքով (այսինքն՝ +4):

x86-ի վրա համարժեք կա՞ (եթե հնարավոր է AT&T շարահյուսություն): Օրինակ:

movl 4(%ebx), %eax

Սա կբեռնի %ebx-ով մատնանշված արժեքը 4 բայթ շեղումով %eax-ում: Ինչպե՞ս կարող եմ թարմացնել %ebx-ի արժեքը բեռնումից հետո:

Շնորհակալություն։


  • Կարծում եմ՝ նկատի ունեք 4(%ebx), չէ՞: Բացի դրանից, ես չգիտեմ, թե արդյոք intel-ն ունի հասցեների ավտոմատ ավելացման ռեժիմներ: Ես արագ կնայեմ փաստաթղթերին... 03.07.2013
  • 4(%ebx)-ը համարժեք չէ՞ (%ebx,4): 03.07.2013
  • Իմ մոնտաժողը չի վերցնի: example.s:3:scale factor of 4 without an index register. 03.07.2013
  • Գոտչա. Կարծում եմ, որ փակագծում դուք կարող եք միայն մեկ այլ ռեգիստր ներառել որպես օֆսեթ: Շնորհակալություն 03.07.2013
  • Ապա դուք կունենաք ինդեքսային ռեգիստր, այո: Բազմապատկումը 1-ով անուղղակի է, կամ կարող եք ինքներդ ավելացնել 2-ը կամ 4-ը, եթե ցանկանում եք ինչ-որ բան ավելի հմայիչ: 03.07.2013
  • @DanielS. AT&T Syntax x86 հավաքման համար փակագծերի ներսում գտնվող թվերը նշանակում են մասշտաբի գործակից; դուք ասում եք offset(%basereg, %indexreg, scale), այսինքն՝ օգտագործվող հասցեն offeset + basereg + scale * indexreg է: Սանդղակի արժեքի միակ տարբերակներն են 0/1/2/4/8: Հասցեների գրման ձևը AT&T Syntax-ի ամենատարօրինակ մասն է. Intel-ի ոճով դուք իրականում գրում եք [ basereg + scale * indexreg + offset ]: 03.07.2013
  • @FrankH, շնորհակալություն, հիմա ավելի իմաստալից է: 03.07.2013

Պատասխանները:


1

Կարծում եմ, որ հրահանգը, որը դուք փնտրում եք, LODSD է, ինչը նշանակում է «բեռնել DWORD-ը տողից»: . Այնուամենայնիվ, դուք չեք կարող ընտրել գրանցամատյանները. ցուցիչը ESI-ում է, իսկ նպատակակետ ռեգիստրը EAX է:

Այն բանից հետո, երբ բայթը, բառը կամ կրկնաբառը փոխանցվում է հիշողության վայրից AL, AX կամ EAX ռեգիստր, (E)SI ռեգիստրը ավտոմատ կերպով ավելանում կամ նվազում է, համաձայն EFLAGS ռեգիստրում DF դրոշի կարգավորումների: (Եթե DF դրոշակը 0 է, ապա (E)SI ռեգիստրը ավելանում է, եթե DF դրոշակը 1 է, ապա ESI ռեգիստրը նվազում է: 2 բառային գործողությունների համար, կամ 4-ով երկբառի գործողությունների համար:

Ներեցեք, ես իմ գլխում արմատացած է Intex-ի շարահյուսությունը հենց հիմա: Ենթադրելով հարթ 32-բիթանոց պաշտպանված ռեժիմ.

mov   esi, _source_data_       ; ESI points to source data
cld                            ; Clear the direction flag
                               ; (ESI will increment)
lodsd                          ; Essentially   mov eax, [ds:esi]
                               ;               add esi, 4
02.07.2013
  • Այժմ, քանի դեռ այս հրահանգը կա ... mov (%esi),%eax; lea 4(%esi),%esi հաջորդականությունը կարող է ավելի արագ լինել: Այսպես կոչված լարային հրահանգները ունեն բավականին բարձր հրահանգների ուշացումներ, և դրանք կապված են ռեգիստրների օգտագործման հետ՝ %edi (խանութների համար) և %esi (բեռների համար) միայն: Ոչ, սա միանշանակ այնքան ճկուն չէ, որքան ARM-ի ընդհանուր post/pre-in/decrement հասցեավորումը: 03.07.2013
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..