- Inaayos ng Assembly language ang mga tagubilin nito ayon sa layunin: paglipat, pagkalkula, kontrol sa daloy, at higit pa.
- Ang bawat pagtuturo ay binubuo ng isang opcode at operand, na may iba't ibang mga format depende sa arkitektura.
- Mayroong ilang mga mode ng pagtugon para sa pag-access ng data, tulad ng agaran, direkta, at hindi direkta.
Ang wika ng pagpupulong ay isa sa mga pangunahing haligi ng pagbuo ng software mula noong simula ng pag-compute. Bagama't ang mga wikang may mataas na antas ay nangingibabaw sa eksena ngayon, ang assembler ay nananatiling malawak na ginagamit at may kaugnayan sa mga kapaligiran kung saan ang kontrol ng hardware, pag-optimize, o mga hadlang sa mapagkukunan ay isang priyoridad.
Sa artikulong ito, susuriin natin ang mga uri ng mga instruksyon sa assembly language, susuriin ang kanilang istruktura, layunin, mga addressing mode, at kung paano ang mga ito ay nakaayos sa iba't ibang arkitektura. Makakakita ka rin ng mga halimbawa, format, at isang komprehensibong pangkalahatang-ideya na magbibigay-daan sa iyong lubos na maunawaan ang lohika sa likod ng mga instruksyong ito, na gumagana nang malapit sa hardware.
Ano ang pagtuturo sa wikang pagpupulong?
Ang isang assembly instruction ay isang utos na direktang mauunawaan ng CPU (kapag naisalin na sa machine code ng isang assembler program). Ang bawat instruction ay may partikular na layunin at karaniwang binubuo ng isang mnemonic na kumakatawan sa operasyon at isa o higit pang mga operand na nagpapahiwatig kung saan kinukuha ang data at/o kung saan nakaimbak ang mga resulta.
Ang mga tagubiling ito ay lubos na nakadepende sa arkitektura ng processor, kaya ang bawat uri ng CPU (kung x86, ARM, MIPS, bukod sa iba pa) ay may sariling hanay ng mga tagubilin na may partikular na syntax at mga kakayahan.
Istraktura ng isang pagtuturo
Ang mga tagubilin ay karaniwang binubuo ng dalawang bahagi:
- Code ng pagpapatakbo (opcode): Nagpapahiwatig ng aksyon na isasagawa, tulad ng pagdaragdag, paglipat ng data, paghahambing, atbp.
Ang mga operand ay nagbibigay ng impormasyong kinakailangan upang maisagawa ang operasyon at maaaring iimbak sa mga rehistro, memorya, o maging mga constant. Hindi lahat ng mga tagubilin ay nangangailangan ng mga operand, at sa ilang mga kaso, ang mga ito ay maaaring implicit sa tagubilin o nakaimbak sa mga paunang natukoy na rehistro.
Mga uri ng mga tagubilin sa wikang pagpupulong
Depende sa functionality na ginagawa nila sa loob ng isang programa, ang mga tagubilin sa assembly language ay maaaring uriin sa ilang grupo. Ang mga pinaka-nauugnay ay detalyado sa ibaba:
1. Mga tagubilin sa paglilipat ng data
Ang mga tagubiling ito ay nagpapahintulot sa pagkopya ng datos mula sa isang lokasyon patungo sa isa pa nang hindi binabago ang nilalaman nito sa pinagmulan. Mahalaga ang mga ito para sa paglipat ng impormasyon sa pagitan ng mga rehistro, memorya, at mga peripheral.
Ang ilan sa mga pinakakaraniwang tagubilin sa pangkat na ito ay:
- MOV: Kinokopya ang mga nilalaman ng isang operand sa isa pa. Halimbawa,
MOV AX, BXkopyahin ang nilalaman ng BX sa AX. - MOVS / MOVSB / MOVSW: Naglilipat ng mga string mula sa source address (SI) patungo sa destination address (DI), na nag-o-automate sa proseso ng paglilipat.
- LODS / LODSB / LODSW: Naglo-load ng value mula sa address na ipinahiwatig ng SI register sa accumulator (AL o AX).
- BASAHIN: Naglo-load ng isang epektibong address sa halip na ang halaga. Kapaki-pakinabang para sa pagkuha ng address ng isang variable o istraktura.
2. Mga tagubilin sa baterya
Ang stack ay isang istrukturang LIFO (huling papasok, unang labas) na ginagamit upang pansamantalang mag-imbak ng data, magpasa ng mga parameter, o mag-save ng konteksto ng pagpapatupad.
- PUSH: Nag-iimbak ng halaga sa stack, na binabawasan ang SP pointer.
- POP: Kinukuha ang pinakabagong halaga na nakaimbak sa stack, na dinadagdagan ang SP.
- PUSHF / POPF: Iniimbak at kinukuha nila ang estado ng mga flag ng CPU sa stack.
3. Arithmetic at lohikal na mga tagubilin
Pinapayagan nito ang mga kalkulasyon at operasyon na maisagawa sa mga bit. Ang mga instruksyong ito ay mahalaga para sa pagmamanipula ng numerical data at paggawa ng mga desisyon sa daloy ng programa.
Kabilang sa mga pinaka ginagamit na nakikita namin:
- ADD / SUB: Pagdaragdag at pagbabawas.
- MUL / IMUL: Binary multiplications.
- DIV / IDIV: Dibisyon (integer o nilagdaan).
- AT / O / XOR / HINDI: Bitwise na lohikal na operasyon.
- SHL / SHR / ROL / ROR: Mga bit shift at pag-ikot.
4. Mga tagubilin sa pagkontrol sa daloy
Pinapayagan ka nitong baguhin ang pagkakasunod-sunod ng pagpapatupad ng programa , na nagpapakilala ng mga pagtalon o kondisyonal at walang kondisyonal na mga tawag sa iba pang mga tagubilin.
- JMP: Walang kundisyon na tumalon sa isa pang address sa programa.
- TAWAG / RET: Tumawag sa isang subroutine at bumalik.
- JE/JNE/JG/JL/JZ/JNZ: Conditional jumps, ang mga ito ay isinasagawa kung ang ilang mga kundisyon ay natutugunan (pagkatapos ng isang paghahambing).
5. Mga Tagubilin sa Input/Output (I/O).
Nagbibigay-daan ang mga ito sa komunikasyon sa pagitan ng processor at mga panlabas na device. Ang mga tagubiling ito ay nagpapahintulot sa pagbabasa at pagsusulat ng data papunta/mula sa mga port (hardware).
- IN: Nagbabasa ng data mula sa isang input port.
- LABAN: Nagpapadala ng data sa isang output port.
6. Mga tagubilin sa floating point
Maraming CPU ang may mga math coprocessor (o mga espesyal na tagubilin) na nakatuon sa pagtatrabaho gamit ang mga decimal (floating-point) na numero. Ang mga tagubiling ito ay nagpapahintulot sa mga operasyon tulad ng:
- Pagdaragdag, pagbabawas, pagpaparami at paghahati ng mga tunay na numero.
- Trigonometric operations (sine, cosine, tangent).
- Logarithmic, exponential at root operations.
Ang mga tagubiling ito ay karaniwang sumusunod sa pamantayan ng IEEE 754 para sa katumpakan sa numero.
Mga mode ng pagtugon
Ang isang pangunahing bahagi ng disenyo ng instruksyon ay kung paano natutukoy ang lokasyon ng mga operand. Ang mga addressing mode ang tumutukoy kung paano ina-access ng CPU ang data.
1. Agarang pagtugon
Ang datos ay direktang kasama sa instruksyon. Mabilis ito, ngunit hindi nito pinapayagan ang pagbabago ng mga halaga nang hindi binabago ang instruksyon.
MOV AX, 5
2. Direktang pagtugon
Ang memory address na naglalaman ng data ay tahasang tinukoy.
MOV AX,
3. Hindi direktang pagtugon
Ang epektibong address ay nakukuha mula sa mga nilalaman ng isang record. Napaka-flexible at ginagamit para sa mga istruktura at mga linked list.
MOV AX,
4. Naka-index na pag-address
Ang address ay kinakalkula sa pamamagitan ng pagdaragdag ng base at index (halimbawa, sa mga traverse array). Gumagamit ito ng mga espesyal na register tulad ng SI, DI, o base + offset register.
MOV AX,
Mga format ng pagtuturo: iba't ibang uri depende sa arkitektura
Ang istraktura ng isang pagtuturo ay maaaring mag-iba depende sa arkitektura. Kasama sa mga karaniwang format ang:
4-way na format
Kabilang dito ang dalawang operand, isang lokasyon ng resulta, at ang address ng susunod na instruksyon. Ito ay lipas na ngayon dahil sa pagiging kumplikado nito.
3-way na format
Tinutukoy nito ang dalawang operand at isang destination address. Karaniwan ito sa mga modernong arkitektura ng RISC.
2-way na format
Gumamit ng source operand at destination operand (maaari ring mag-ambag ng halaga ang destination). Sikat sa x86 at iba pang mga arkitektura ng CISC.
1-way na format
Isang operand lamang ang tinukoy; ang isa ay ipinapalagay na ang accumulator. Karaniwan sa mga mas lumang processor at mga simpleng sistema.
0-address na format (batay sa stack)
Ginagamit ng mga operasyon ang stack upang kunin at iimbak ang mga operand at resulta. Napakahusay para sa mga stack-based na makina, tulad ng ilang programmable calculator.
Mga macro na tagubilin at pseudo-opcode
Upang mapabuti ang produktibidad, maraming assembler ang nag-aalok ng mga macro instruction , na nagpapalawak ng isang linya patungo sa ilang aktwal na instruksyon. Ang mga ito ay kapaki-pakinabang para maiwasan ang pag-uulit ng mga kumplikadong pattern o para sa paglikha ng mga istrukturang may mataas na antas tulad ng mga loop o mga conditional statement.
Los mga pseudo-opcode Ang mga ito ay mga tagubilin na isinasalin ng assembler sa loob ng isang tunay na pagkakasunod-sunod ng mga tagubilin. Halimbawa, NOP (walang operasyon) ay maaaring isalin bilang XCHG AX, AX sa x86 CPU.
Mga direktiba ng Assembler
Ang mga direktiba ( tinatawag ding pseudo-operations ) ay hindi mga instruksyon sa mahigpit na kahulugan. Nagsisilbi ang mga ito upang kontrolin ang proseso ng pag-assemble, tukuyin ang data, mga seksyon ng code, mga macro, mga kondisyon ng compilation, atbp.
Kasama sa mga karaniwang halimbawa ang:
- .data / .code: Ipinapahiwatig nila ang seksyon ng data o code.
- .org: Itinatakda ang address kung saan magsisimula ang pagpupulong.
- .equ: Tinutukoy ang mga simbolikong pare-pareho.
Mga kaso ng paggamit ng wika ng assembly
Sa kabila ng pagsikat ng mga high-level na wika, nananatiling mahalaga ang assembly language sa ilang aspeto:
- Pagbuo ng mga naka-embed na system at microcontroller.
- Mga driver ng programming, bootloader at BIOS.
- Extreme optimization sa mga application gaya ng mga video game o cryptography.
- Reverse engineering, pag-debug at mababang antas ng pag-hack.
Bukod pa rito, ang pagsasanay sa assembly language ay may mahalagang papel pa rin sa mga digri sa computer science at electronics, dahil nagbibigay ito ng malalim na pag-unawa sa kung paano gumagana ang isang processor, kung paano iniimbak at minanipula ang data, at kung paano isinasagawa ang mga instruksyon sa binary level.
Ang pag-unawa sa lahat ng uri ng mga tagubilin sa pagpupulong, ang kanilang istraktura, paggana, at mga mode ng pagtugon ay nagbibigay ng matibay na pundasyon para sa sinumang programmer na gustong magsaliksik sa mababang antas ng programming o maunawaan kung paano ang mga mataas na antas na wika ay ganap na isinalin sa machine code. Bagama't naging mas tiyak ang paggamit nito, nananatili itong mahalagang kasangkapan sa maraming kritikal na lugar ng pag-unlad ng software at system.