Transcript HW200_6

Монгол Улсын Шинжлэх Ухаан Технологийн Их
Сургууль
Компьютерийн зохион
байгуулалт, ассемблер
хэл
Код : CS200
Улирал : Хавар 2009
Багш : С. Байгалтөгс /проф, доктор/
Сэдэв 6 :Нэмэх болон хасах үйлдлүүд
[www.cdeq.mn/hw200]
1
Нэмэх болон хасах үйлдлийн команд






Энэ сэдэвт MIPS процессорын 32 битийн бүхэл тоон дээр
нэмэх болон хасах үйлдлийн талаар үзэх болно.
Агуулга :
Тэмдэггүй 2 – тын тоон дээрх халилт болон хоёртын
гүйцээлт
ADD болон ADDU команд
Тэмдгийн өргөтгөл
ADDI болон ADDIU команд
SUB болон SUBU команд
ADDI командыг хэрэглэх сөрөг бүхэл тоог регистрт ачаалах
[www.cdeq.mn/hw200]
2
Арифметик
Бүхэл тоог битүүдээр дүрслэх бөгөөд бүхэл тоондээрх
үйлдлүүд нь бит дээрх нарийн үйлдлүүд юм.
2 бүхэл тоог нэмэхдээ хоёртын нэмэх үйлдлийн алгоритмыг
хэрэгжүүлдэг бол MIPS процессорын хувьд бүхэл тоон
арифметикийг хэрэгжүүлдэг командуудтай.
Бүхэл тооны ердийн хэмжээ нь 32 бит бөгөөд урт болон
богино бүхэл тооны арифметик нь 32 битийн арифметик
командын комбинацийн бит дээрх үйлдлийн аргуудыг
хэрэглэдэг.
Хоёртын нэмэх үйлдлийн алгоритм
нь бүхэл тооны
дүрслэлийн 2 аргыг хэрэглэдэг. Хоёр арганд ижилхэн MIPS
команд хэрэглэдэг. Харин халилтын нөхцөл нь арга бүрт
ондоо байдаг.
[www.cdeq.mn/hw200]
3
ADDU команд
ADDU команд нь 32 битийн 2 регистр дээр хоёртын нэмэх
үйлдлийн алгоритмыг гүйцэтгэдэг бөгөөд үр дүн нь
тодорхой регистрт хадгалагдана. Нэмэх гэж байгаа 2 регистр
адилхан байж болно. ADDU команд нь хоёртын нэмэх
үйлдлийн алгоритмаар механикаар бодолт хийж 32 битийн 2
операндаас 32 битийн үр дүнг боловсруулдаг. Халилт
үүсэхийг хэрэгсдэггүй.
addu d, s, t
# регистр d < s + t
# халилт хамаарахгүй
Харин ADD команд нь халилтын үед хоёртын гүйцээлтийг
ашигладаг trap – аас шалтгаалдаг. Бусд тохиолдолд ADDU
командтай ижил. Trap нь энгийн машин цикл дэх тасалдал
юм.
[www.cdeq.mn/hw200]
4
ADDU команд
Энгийн компьютерийн системд тасалдлын үр дүнд
удирдлага эргээд үйлдлийн системрүү шилждэг.
add d, s, t # регистр d < s + t
# халилтыг тооцно
Ихэнх ассемблер програмын хувьд операндуудаас
шалтгаалан халилт үүсч болдог. Энэ үед ихэнхдээ ADDU
командыг хэрэглэсэн байдаг.
[www.cdeq.mn/hw200]
5
Жишээ програм
32 бит хүртэл өргөтгөсөн нэмэх үйлдэл
[www.cdeq.mn/hw200]
6
Програмын ажиллагаа
Шууд операндыг аравтын бичлэгээр илэрхийлсэн байна.
Ассемблер нь энэ тоог тодорхойлохдоо 16 – тын системийг
зөвшөөрөх бөгөөд эсвэл аравтын бүхэл тоог 16 бит тоо руу
хөрвүүлэх болно.
[www.cdeq.mn/hw200]
7
Хоёртын гүйцээлт
Хоёртын гүйцээлт гэдэг нь өгөгдлийн битүүдийн үгүйсгэл
дээр нэгийг нэмэхэд гарах үр дүн юм.
Жишээ програм :
[www.cdeq.mn/hw200]
8
Тэмдгийн өргөтгөл
Өмнөх програм хүссэн үр
дүнг үзүүлж чадсан.
Энд регистр $8 – д 1 – ийг нэмэхдээ өөр регистрт ачаалж
байж нэмж байгаа.
MIPS нь харин "add immediate unsigned“ командтай :
addiu $8,$8,1 - энэ нь регистр $8 – д 1 – ийг нэмэхтэй ижил
Энэ командын шууд операнд нь 16 бит. Харин ALU – ын
оролцоотойгоор операндын 32 бит хүртэлх өргөтгөл нь
тэмдгийн өргөтгөл юм. Энэ нь ахлах орон буюу шууд
операндын хамгийн зүүн талын битийн утга юм.
[www.cdeq.mn/hw200]
9
Тэмдгийн өргөтгөл
Тиймээс хэрвээ 16 бит шууд операнд нь 16 бит хоёртын
гүйцээлт буюу сөрөг бүхэл тоо байвал ALU дахь 32 бит
операнд нь сөрөг бүхэл тоо байна гэсэн үг юм.
Хоёртын гүйцээлт дэх бүхэл тооны зүүн талын битийг
тэмдгийн бит (sign bit) гэж нэрлэдэг.
[www.cdeq.mn/hw200]
10
ADDIU команд
ADDIU команд нь 16 бит шууд операндыг агуулдаг. ALU
командыг гүйцэтгэх үед шууд операнд нь тэмдэгтэй 32 битэд
өргөтгөгдсөн байдаг. Нэмэх үйлдлийн үед хоёртын гүйцээлт
дэх халилт үүсвэл хэрэгсдэггүй.
addiu d, s, const # регистр d < s + const
# const нь 16 бит хоёртын гүйцээлт
Харин ADDI командын хувьд нэмэх үйлдлийн үед халилтын
тасалдал үүсдэг.
addi d, s, const
# регистр d < s + const
# const нь 16 бит хоёртын гүйцээлт
[www.cdeq.mn/hw200]
11
SUBU команд
MIPS нь 2 бүхэл тооны хасах үйлдлийн командтай.
subu d, s, t # регистр d < s – t халилтын тасалдал үүсэхгүй
# энэ нь s + (-t) гэсэнтэй эквивалент
sub d, s, t # регистр d < s – t халилтын тасалдал үүснэ
# энэ нь s + (-t) гэсэнтэй эквивалент
[www.cdeq.mn/hw200]
12
Үргэлжлэл
Эдгээр SUB, SUBU хасах үйлдлийн командын оронд нэмэх
үйлдлийн командыг хэрэглэдэг.
Регистр $10 – аас 201 – ыг хасах үйлдэл нь :
addiu $8, $10, -201
#
$8 < $10 – 201
гэж нэмэх үйлдлээр хийдэг.
Одоо регистр $8 – д х гэсэн утга байрлаж байвал 5 * х – 74
гэдгийг тооцоолье. MIPS нь үржих үйлдлийн командтай,
харин үүнийг хэрэглэхгүй нэмэх үйлдлээр шийдье.
[www.cdeq.mn/hw200]
13
Үргэлжлэл
[www.cdeq.mn/hw200]
14
Бүхэл тооны үржих, хуваах арифметик шилжүүлэх
командууд







Энэ сэдвээр MIPS процессорын 32 битийн үржүүлэх гэх мэт
командын тухай гарах болно.
Агуулга :
Бүхэл тооны үржүүлэх болон хуваах үйлдэл
Hi болон lo регистр
MULT болон MULTU командууд
DIV болон DIVU командууд
MFHI болон MFLO командууд
Арифметик баруун шилжүүлэлт
SRA команд
[www.cdeq.mn/hw200]
15
Оронгийн 2 – тын дугаар
N оронтой аравтын бүхэл 2 тооны үржвэрийн үр дүнд 2N
орон хэрэгтэй. Ямар ч суурьтай тооны хувьд энэ нь
биелэгддэг. Ялангуяа N битийн хоёртын 2 тооны үржвэрийн
үр дүнд 2N бит хэрэгтэй. Жишээ нь энд тэмдэггүй 2 бүхэл
тооны үржвэрийг харуулъя.
8 битийн 2 операндын
үржвэрийн үр дүнд
15 бит тоо гарчээ.
16 болон 10 – тын
суурьтай бичлэгийн
хувьд ижилхэн
байна.
[www.cdeq.mn/hw200]
16
MIPS процессорын үржвэрийн хэмжигдэхүүн
MIPS процессорын үржвэрийн хэмжигдэхүүн нь 32 битийн 2
регистрийг агуулах бөгөөд hi болон lo гэж нэрлэдэг. Эдгээр
нь ерөнхий зориулалтын регистр биш бөгөөд 32 битийн 2
операнд үржигдэх үед үр дүнд үүссэн 64 бит нь hi болон lo –
д ордог. 0 – оос 31 дэх бит нь lo – д, харин 32 – 63 дах битүүд
нь hi – д ордог.
Дээрх командын операндууд нь тэмдэггүй болон тэмдэгтэй
операндууд дээр хийгдэх үржих команд бөгөөд операндууд
нь ерөнхий зориулалтын регистрт агуулагдана.
[www.cdeq.mn/hw200]
17
Өгөгдлийн чухал битүүд
Ихэнхдээ програм бичихдээ өгөгдлийн үр дүнгээ 32 битээс
бага урттайгаар хадгалдаг.
Хоёртын эерэг тэмдэггүй тооны хувьд өгөгдлийн чухал
битүүд нь зүүн талаас эхний “1” битээс хойших битүүд юм.
Жишээ нь доорх тоо нь яг чухал өгөгдлийн 23 биттэй
0000 0000 0100 0011 0101 0110 1101 1110
Сөрөг буюу хоёртын гүйцээлт дэх өгөгдлийн чухал битүүдэд
зүүн талаасаа эхний “0” битээс хойших битүүд орно. Жишээ
нь доорх тоо нь яг чухал өгөгдлийн 23 биттэй
1111 1111 1011 1100 1010 1001 0010 0010
[www.cdeq.mn/hw200]
18
MFHI болон MFLO командууд
MFHI болон MFLO нь ерөнхий зориулалтын регистрт
үржвэрийн үр дүнг шилжүүлдэг 2 команд юм.
hi болон lo регистрүүд нь арифметик болон логик
командуудад хэрэглэгддэггүй.
Дүрэм : MFHI ба MFLO командын дараа үржих болон хуваах
командыг хэрэглэдэггүй.
Үүний учир нь MIPS процессорын pipeline – ы
ажиллагаанаас болдог. Харин SPIM симулятор дээр энэ
дүрэм нь асуудалгүй.
[www.cdeq.mn/hw200]
19
Жишээ програм
х нь регистр $8 – д агуулагдаж байх үед 5*х – 74 томъёог
үнэлэх програмыг бичье. Х нь хоёртын гүйцээлт гэж бодоод
програмыг эхлүүлвэл :
[www.cdeq.mn/hw200]
20
Жишээ програмын төгсгөл
Регистр $9 нь үр дүнг тооцоолоход хэрэглэгдэж байгаа.
[www.cdeq.mn/hw200]
21
Програмын ажиллагаа
Үр дүн нь доорх бодолтоор :
5 × 12 - 74 = -14 = 0xFFFFFFF2
Үржвэр 5 × 12 = 60ten = 0x3C нь lo – д агуулагдах болно.
[www.cdeq.mn/hw200]
22
DIV болон DIVU команд
N оронтой бүхэл тооны хуваах үйлдэл нь N оронтой
коеффициент болон N оронтой үлдэгдэл өгөх болно. 32
битийн операндын хувьд 32 битийн 2 үр дүнг өгнө. Эдгээр
үр дүнд MIPS нь hi болон lo регистрүүдийг хэрэглэдэг.
Энд бүхэл тоог хуваах MIPS – ын командыг харуулья. “u” нь
операндууд ба үр дүн нь тэмдэггүй хоёртын тоог
илэрхийлнэ.
[www.cdeq.mn/hw200]
23
Жишээ програм
Энэ жишээ нь (y + x) / (y - x) илэрхийллийг тооцоолох
болно. Аргумент х нь регистр $8 – д, y нь регистр $9 – д
агуулагдана. Коеффициент буюу ноогдвор нь регистр $10 –
д, үлдэгдэл нь регистр $11 – д хадгалагдах болно.
[www.cdeq.mn/hw200]
24
Жишээ програм (Гүйцэт)
[www.cdeq.mn/hw200]
25
Програмын ажиллагаа
[www.cdeq.mn/hw200]
26
Арифметик баруун шилжүүлэх
Логик баруун шилжүүлэх үйлдэл нь сөрөг бүхэл тоог
хуваахад хэрэглэгддэггүй. Учир нь логик баруун шилжүүлэх
үйлдэлд ахлах оронд 0 бичигддэг. Энэ нь зарим үед тустай,
харин ахлах орон тэмдгийн битийг илэрхийлж байхад сөрөг
бүхэл тоог хуваахад тохиромжгүй.
Харин арифметик баруун шилжүүлэлт нь тэмдгийн битийг
хаяхгүй эргэж байрлалд нь хуулж тавьдаг.
[www.cdeq.mn/hw200]
27
SRA команд
MIPS нь арифметик баруун шилжүүлэх командтай.
Энэ команд нь div командыг
тохиромжтой байх болно.
бодвол
[www.cdeq.mn/hw200]
илүү
хурдан
28