Arifmetik operatorlar. Mikroprotsessorning arifmetik buyruqlari ikkilik va o’nlik (ikkilik ko’rinishida kodlangan) sinf buyruqlarga bo’linadi. Ikkinchi ko’rinishidagi sinf buyruqlari kamdan-kam ishlatiladi chunki ular hotira hajmini ko’p egallaydi.
Barcha arifmetik buyruqlar ishorali va ishorasiz bo’lishi mumkin. Ishorali buyruqlar manfiy va musbat sonllar ustida bajarilishi mumkin bo’lsa, ishorasiz buyruqlar esa faqat musbat sonlar ustida.
Assembler tilining arifmetik buyruqlarni to’rtda guruhga bo’lishni lozim topdik:
Qo’shish operatorlari
Ayirish operatorlari
Ko’paytirish operatorlari
Bo’lish operatorlari
Shu guruh operatorlarini ko’rib chiqamiz.
Qo’shish operatorlari:
ADD (qushish) ikkita operand (so’z yoki bayt) yig’indisini hisoblaydi. Amal natijasi birinchi operand o’rniga yoziladi.
Misollar:
ADD AX, BX ; AX-registrga BX-registrni qo’shish
ADD AX, Mem ; AX-registrga Mem-o’zgaruvchini qo’shish
ADD Mem, AX ; Mem-o’zgaruvchiga AX-registrni qo’shish
ADD AL, 40 ; AL-registrga 40-o’nlik konstantani qo’shish
ADD AL, 4Ah ; AL-registrga 4A-o’n oltilik konstantani qo’shish
ADD AL, 101010b ; AL-registrga 101010-ikkilik konstantani qo’shish
ADD AL, 44o ; AL-registrga 44-sakkizlik konstantani qo’shish
Ushbu buyruqda ikkita o’zgaruvchi qiymatlarini va birinchi bo’lib konstanta ko’rsatish ta’qiqlanadi, ya’ni xatoga olib keladi.
ADD A, B
ADD 10, AL
INC (inkrement) operand qiymatini birga oshiradi.
INC АХ ; AХ+1
Ayirish operatorlari:
1. SUB (ayirish) birinchi operanddan ikkinchi operand qiymatini ayiradi (operandlar bayt yoki so’z bo’lishi mumkin). Amal natijasi birinchi operand o’rniga yoziladi.
Misollar:
SUB AX, CX ; AX−CX → natijasi AX
SUB AX, Mem ; AX−Mem → natijasi AX
SUB Mem, AX ; Mem−AX → natijasi Mem
SUB AL, 10 ; AL−10 → natijasi AL
Ushbu buyruqda ham ikkita o’zgaruvchi qiymatlarini va birinchi bo’lib konstanta ko’rsatish ta’qiqlanadi.
DЕC (dekrement) operand qiymatini birga kamaytiradi.
Masalan:
DEC CХ ; CХ−1
NEG (ishora belgisini almashtirish) nol’ qiymatidan operand qiymatini ayiradi. Natijasi operand o’rniga yoziladi.
Masalan:
NEG АХ ; −(АХ) → АХ
СМР (ikkita operandlarni solishtirish) birinchi operanddan ikkinchi operand qiymatini ayiradi, SUB amalidan farqi shundaki u operand qiymatlarini o’zgartirmaydi natijasini bayroq-registrlarga o’rnatadi
Misollar:
СМР АH, ВL ; (АХ)−(ВХ)
CMP Mem, AX ; (Mem)−(AH)
CMP AL, 10 ; (AL)−10
Ko’paytirish operatorlari:
1. MUL (ko’paytirish) ikkita ishorasiz sonlarni (so’z yoki bayt) ko’paytirish amalini bajaradi. Bu buyruqda faqat bitta sonli operand ko’rsatiladi qaysiga ko’paytirish lozim. Bu operand registr yoki operativ hotiradagi o’zgaruvchi bo’lishi mumkin. Ikkinchi ko’paytiriluvchi operand AL registr qiymati (agar bayt amallari bo’lsa) yoki AX registr (so’zlarda). 16-bitli(bayt) ko’paytirish natijasi AH(katta bayt) va AL(kichik bayt) registrlarda saqlanadi. 32-bitli(so’z) ko’paytirish natijasi esa DX (katta so’z) va AX (kichik so’z) registrlarda saqlanadi.
Misollar:
MUL BX ; ishorasiz BXni AXga ko’paytirish
MUL Mem ; ishorasiz Mem o’zgaruvchini AXga ko’paytirish
MUL DL ; ishorasiz DLni ALga ko’paytirish
Bo’lish operatorlari:
1. DIV (bo’lish) ishorasiz ikkita sonni bo’lish amalini bajaradi. Bu buyruqda faqat bitta operand (registr yoki operativ hotiradagi o’zgaruvchi) ko’rsatiladi qaysi bo’linuvchini aniqlaydi. Bo’luvchi esa ikkilik o’lchamda berilishini inobatga olish lozim, ya’ni AH va AL registrlarda agar bytli bo’lish amali bajarilsa, 32-bitli bo’lish amalida DX va AX registrlarida.
Natijasi esa quyidagicha qayd qilinadi:
agar 16-bitli bo’lish bo’lsa butun qismi AL registrda, qoldigi esa AH registrda;
agar 32-bitli bo’lish bo’lsa butun qismi AX registrda, qoldigi esa DX registrda.
Misollar:
DIV BX ; ishorasiz DX:AX registrni BXga bo’lish
DIV Mem_byte ; ishorasiz AH:AL Operativ hotira katakchasiga bo’lish
Dastur tarkibi
INCLUDE settings.inc
INCLUDE Io2020.inc
.STACK 4096
; o’zgarmaslar
.DATA
; o’zgaruvchilarni tavsifi
.CODE
start:
; buyruqlar
EXIT
END start
Do'stlaringiz bilan baham: |