Aritmeettiset ja loogiset operaatiot
Opiskelkaa suorittamaan peruslaskutoimituksia (ADD, SUB, MUL, DIV) ja loogisia operaatioita (AND, OR, XOR, NOT) rekistereissä ja muistissa olevaan dataan.
Aritmeettiset ja loogiset operaatiot on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Johdatus assembly-operaatioihin
Tervetuloa x86-assemblyn keskeisten operaatioiden pariin! Tänään opitte, miten suorittimet tekevät peruslaskutoimituksia ja loogisia operaatioita.
Nämä käskyt ovat perustavanlaatuisia. Niiden avulla ohjelmanne voivat laskea arvoja, tehdä päätöksiä ja käsitellä dataa matalimmalla tasolla.
Yhteenlasku: ADD-käsky
ADD-käskyllä lasketaan yhteen kaksi lukua. Se ottaa kaksi operandia: kohteen ja lähteen.
- Syntaksi:
ADD destination, source source-arvo lisätäändestination-arvoon.- Tulos tallennetaan takaisin
destination-operandiin. - Operandit voivat olla rekistereitä, muistipaikkoja tai vakioarvoja.
Esimerkiksi ADD EAX, EBX lisää EBX-rekisterin arvon EAX-rekisterin arvoon ja tallentaa summan EAX-rekisteriin.
ADD käytännössä
Katsotaan, miten ADD-käskyä käytetään yksinkertaisessa ohjelmassa. Lisäämme 3 lukuun 5 ja tallennamme tuloksen EAX-rekisteriin.
Kokeilkaa suorittaa tämä esimerkki:
section .text
global _start
_start:
mov eax, 5 ; Load 5 into EAX
add eax, 3 ; Add 3 to EAX (EAX becomes 8)
; Exit the program (Linux 32-bit syscall)
mov eax, 1 ; sys_exit syscall number
xor ebx, ebx ; Exit code 0
int 0x80 ; Call kernelVähennyslasku: SUB-käsky
SUB-käsky on ADD-käskyn vastakohta. Se vähentää lähdeoperandia kohdeoperandista.
- Syntaksi:
SUB destination, source source-arvo vähennetäändestination-arvosta.- Tulos tallennetaan takaisin
destination-operandiin.
ADD-käskyn tavoin SUB voi käyttää operandeina rekistereitä, muistia tai vakioarvoja. Se on välttämätön peruslaskutoimituksissa ja vertailuissa.
SUB käytännössä
Tässä SUB-käsky on toiminnassa. Lataamme luvun 10 EAX-rekisteriin ja vähennämme siitä luvun 4.
Suorittakaa tämä koodi nähdäksenne vähennyslaskun:
section .text
global _start
_start:
mov eax, 10 ; Load 10 into EAX
sub eax, 4 ; Subtract 4 from EAX (EAX becomes 6)
; Exit the program (Linux 32-bit syscall)
mov eax, 1 ; sys_exit syscall number
xor ebx, ebx ; Exit code 0
int 0x80 ; Call kernelKertolasku: MUL ja IMUL
x86-assemblyssa kertolaskuun käytetään MUL-käskyä etumerkittömille luvuille ja IMUL-käskyä etumerkillisille luvuille.
MUL- jaIMUL-käskyt käyttävät usein implisiittisestiAX-,EAX- taiRAX-rekisteriä yhtenä operandina.- 32-bittisessä kertolaskussa, jossa
EAX-rekisterin arvo kerrotaan toisella rekisterillä, kutenEBX-rekisterillä, 64-b bittinen tulos tallennetaan kahteen rekisteriin: alemmat 32 bittiäEAX-rekisteriin ja ylemmät 32 bittiäEDX-rekisteriin.
Muistakaa aina huomioida operandienne koko ja tuloksen mahdollinen koko!
Kertolaskuesimerkki
Kerrotaan luku 5 luvulla 6 käyttäen MUL-käskyä. Tulokseksi saadaan 30.
Suorituksen jälkeen EAX sisältää tuloksen alemman osan ja EDX ylemmän osan, joka on tässä tapauksessa 0.
section .text
global _start
_start:
mov eax, 5 ; Load 5 into EAX
mov ebx, 6 ; Load 6 into EBX
mul ebx ; Multiply EAX by EBX. Result in EDX:EAX
; EAX will be 30, EDX will be 0
; Exit the program (Linux 32-bit syscall)
mov eax, 1 ; sys_exit syscall number
xor ebx, ebx ; Exit code 0
int 0x80 ; Call kernelJakolasku: DIV ja IDIV
Jakolaskuun käytetään DIV-käskyä (etumerkittömät luvut) ja IDIV-käskyä (etumerkilliset luvut). Nämä käskyt ovat hieman monimutkaisempia.
- 32-bittisessä jakolaskussa jaettava luku on odotetusti muodossa
EDX:EAX(EDXsisältää ylemmät 32 bittiä jaEAXalemmat 32 bittiä). - Jakaja määritetään operandina, esimerkiksi rekisterinä tai muistipaikkana.
- Jakolaskun jälkeen osamäärä (tulos) tallennetaan
EAX-rekisteriin ja jäännös tallennetaanEDX-rekisteriin.
Varmistakaa aina, että EDX on asetettu oikein (usein nollattu) ennen etumerkitöntä jakolaskua, jos jaettava luku mahtuu EAX-rekisteriin.
Jakolaskuesimerkki
Jaetaan luku 10 luvulla 3. Odotamme osamääräksi 3 ja jäännökseksi 1.
Huomioikaa, miten EDX nollataan ennen jakolaskua, koska jaettava luku (10) mahtuu kokonaan EAX-rekisteriin.
section .text
global _start
_start:
mov eax, 10 ; Load 10 into EAX (low part of dividend)
mov edx, 0 ; Clear EDX (high part of dividend for 32-bit)
mov ebx, 3 ; Load 3 into EBX (divisor)
div ebx ; Divide EDX:EAX by EBX.
; Quotient in EAX (3), Remainder in EDX (1)
; Exit the program (Linux 32-bit syscall)
mov eax, 1 ; sys_exit syscall number
xor ebx, ebx ; Exit code 0
int 0x80 ; Call kernelBittikohtainen logiikka: AND, OR, XOR, NOT
Aritmetiikan lisäksi assembly soveltuu erinomaisesti bittikohtaisiin operaatioihin. Näillä käskyillä käsitellään luvun yksittäisiä bittejä.
AND: Asettaa bitin arvoon 1, jos molemmat vastaavat bitit ovat 1. Hyödyllinen bittien maskauksessa.OR: Asettaa bitin arvoon 1, jos ainakin toinen vastaavista biteistä on 1. Hyödyllinen tiettyjen bittien asettamisessa.XOR: Asettaa bitin arvoon 1, jos vastaavat bitit ovat erilaiset. Hyödyllinen bittien vaihtamisessa tai rekisterin nopeassa nollaamisessa, esimerkiksiXOR EAX, EAX.NOT: Kääntää kaikki bitit (muuttaa nollat ykkösiksi ja ykköset nolliksi). Tämä on unaarioperaatio, joka ottaa yhden operandin.
Nämä ovat keskeisiä matalan tason ohjauksessa, lippujen käsittelyssä ja datan muokkauksessa.
Pikatarkistus: bittikohtaiset operaatiot
Tarkastelkaa seuraavaa assembly-koodikatkelmaa:
mov al, 0b11001010
and al, 0b00001111Mikä lopullinen arvo tallennetaan AL-rekisteriin näiden käskyjen suorittamisen jälkeen?
Kertaus: keskeiset operaatiot
Hienoa työtä! Olette oppineet x86-assemblyn keskeiset aritmeettiset ja bittikohtaiset loogiset operaatiot.
- Aritmetiikka:
ADD,SUB,MUL/IMUL,DIV/IDIVsuorittavat laskutoimituksia. - Logiikka:
AND,OR,XOR,NOTkäsittelevät yksittäisiä bittejä maskaamista, asettamista, vaihtamista ja kääntämistä varten.
Nämä käskyt muodostavat monimutkaisten ohjelmien perustan ja mahdollistavat suorittimelle datan tehokkaan käsittelyn ja päätösten tekemisen. Jatkakaa harjoittelua!
Opi Assembly tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Aritmeettiset ja loogiset operaatiot” ilmainen?
Kyllä – oppitunnin ”Aritmeettiset ja loogiset operaatiot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Aritmeettiset ja loogiset operaatiot”?
Opiskelkaa suorittamaan peruslaskutoimituksia (ADD, SUB, MUL, DIV) ja loogisia operaatioita (AND, OR, XOR, NOT) rekistereissä ja muistissa olevaan dataan. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Aritmeettiset ja loogiset operaatiot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?
Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Datan siirtokäskyt (MOV, PUSH, POP)
- Aritmeettiset ja loogiset operaatiot
- Ehdolliset hypyt ja silmukat
- Bittikohtaiset ja siirtokäskyt