load R1, AR1 mem(A)
Load/Store (1960 оноос хойш)
3 address add R1,R2,R3 R1 R2 + R3
load R1,R2 R1 mem(R2)
store R1,R2 mem(R1) R2
зураг 6.109.
Жишээ нь C=A+B үйлдлийг хэрхэн гүйцэтгэхийг үзье.
Accumulator Stack Memory-memory Register-memory Load/Store
Load A
Add B
Store C
Push A
Push B
Add
Pop C
Add C,A,B Load R1, A
Add R1, B
Store C, R1
Load R1, A
Load R2, B
Add R3, R1, R2
Store C, R3
Accumulator архитектур
Ашиглах заавар нь:
add A, sub A, mul A, div A
load A, store A
Жишээ: AB-(A+BC) (зураг 6.110)
load B
mul C
add A
store D
load A
mul B
sub D
зураг 6.110.
Stack архитектур
Ашиглах заавар:
add, sub, mul, div
push A, pop A
Жишээ: AB-(A+BC) (зураг 6.111)
push A
push B
mul
push A
push C
push B
mul
add
sub
зураг 6.111.
Memory-memory архитектур
Ашиглах заавар:
(3 үйлдэл) add A,B,C sub A,B,C mul A,B,C
(2 үйлдэл) add A,B sub A,B mul A,B
271
54.
Жишээ: AB-(A+BC)
3 үйлдэл
(зураг6.112)
2 үйлдэл
(зураг 6.113)
mul D,A,B
mul E,B,C
add E,A,E
sub E,D,E
move D,A
mul D,B
move E,C
mul E,B
add E,A
sub E,D
зураг 6.112.
зураг 6.113.
Register-memory архитектур
Ашиглах заавар:
add R1,A sub R1,A mul R1,A
load R1,A store R1,A
Жишээ: AB-(A+BC) (зураг 6.114)
load R1,C
mul R1,C
add R1,A
store R1,D
load R2,A
mul R2,B
sub R2,D
зураг 6.114.
Store/load архитектур
Ашиглах заавар:
add R1,R2,R3 sub R1,R2,R3 mul R1,R2,R3
load R1,A store R1,A move R1,R2
Жишээ: AB-(A+BC) (зураг 6.115)
load R1,A
load R2,B
load R3,C
mul R7,R2,R3
add R8,R1,R7
mul R9,R1,R2
sub R10,R9,R8
зураг 6.115.
ISA-гийн зааврууд нь дараах үйлдлүүдийг гүйцэтгэнэ.
Data movement
load (from memory)
store (to memory)
move (memory to memory)
move (register to register)
input (from I/O device)
output (to I/O device)
push (to stack)
pop (from stack)
Arithmetic integer and floating point (add subtract multiply divide)
Logical not and or
Shift shift left/right, rotate left/right
Control branch (conditional), jump (unconditional)
System system call, trap, return
String move, compare
Multimedia - 2D, 3D? e.g., Intel MMX and Sun VIS
Санах ойд томоохон хэмжээний өгөгдлийг байруулах үндсэн 2 арга байдаг. Өөрөөр хэлбэл
өгөгдлийн хэмжээ 1 үгнээс хэтэрсэн тохиолдолд түүнийг санах ойд байрлуулах үндсэн 2 арга
байдаг. Үүнд:
272
flag
Энэ нь арифметикийнoverflow, тоог тэгд хуваах зэрэг мэдээллүүдийг агуулна.
6.9.4. ISA MIPS 3000
Arithmetic
Add add $1,$2,$3 $1 $2+$3
Add unsigned addu $1,$2,$3 $1 $2+$3
Add immediate addi $1,$2,100 $1 $2+100
Add immediate unsigned addiu $1,$2,100 $1 $2+100
Subtract sub $1,$2,$3 $1 $2-$3
Subtract unsigned subu $1,$2,$3 $1 $2-$3
Multiply mult $2,$3 Hi, Lo=$2*$3
Multiply unsigned multu $2,$3 Hi, Lo=$2*$3
Divide div $2,$3 Hi=ноогдвор($2÷$3) Lo=хүртвэр($2÷$3)
Divide unsigned divu $2,$3 Hi=ноогдвор($2÷$3) Lo=хүртвэр($2÷$3)
Move from Hi mfhi $1 $1=Hi
Move to Hi mthi $1 Hi=$1
Move from Lo mflo $1 $1=Lo
Move to Lo mtlo $1 Lo=$1
Set on less than slt $1,$2,$3 If $2<$3 $1=1 else $1=0
Set on less than immediate slti $1,$2,10 If $2<10 $1=1 else $1=0
Logical
And and $1,$2,$3 $1=$2 and $3
And immediate and $1,$2,10 $1=$2 and $3
Or or $1,$2,$3 $1=$2 or $3
Or immediate ori $1,$2,10 $1=$2 or $3
Xor xor $1,$2,$3 $1=$2 xor $3
Xor immediate xori $1,$2,10 $1=$2 xor $3
Nor nor $1,$2,$3 $1=$2 nor $3
Shift left logical sll $1,$2,10 $1=$2<<10 shift left by constant
Shift right logical srl $1,$2,10 $1=$2>>10 shift right by constant
Shift right arith. sra $1,$2,10 $1=$2>>10 shift right (sign extend)
Shift left log. variable sllv $1,$2,$3 $1=$2<<$3 shift left by variable
Shift right log. variable srlv $1,$2,$3 $1=$2>>$3 shift right by variable
Shift right arith. variable srav $1,$2,$3 $1=$2>>$3 shift right arith. by variable
Data transfer
Store word sw 100($4),$3 Mem(100+$4) $3
Store half word sh 100($4),$3 Mem(100+$4) $3
Store byte sb 100($4),$3 Mem(100+$4) $3
Load word lw $1,100($2) $1 Mem(100+$2)
Load half word lh $1,100($2) $1 Mem(100+$2)
Load byte lb $1,100($2) $1 Mem(100+$2)
Control
Branch on equal beq $1,$2,100 If $1==$2 goto pc+4+100
Branch on not equal bne $1,$2,100 If $1!=$2 goto pc+4+100
Branch on less than or
equal to zero
blez $1,100 If $1<=0 goto pc+4+100
Branch on greater than zero bgtz $1,100 If $1>0 goto pc+4+100
Branch on less than zero bltz $1,100 If $1<0 goto pc+4+100
Branch on less than zero
and link
bltzal $1,100 If $1<0 goto pc+4+100 and link (into R31)
Branch on greater than or
equal to zero and link
bgezal $1,100 If $1>=0 goto pc+4+100 and link (into R31)
Jump j 1000 Goto 1000
Jump register jr $31 Goto $31
Jump and link jal 1000 $31=pc+4 goto 1000
6.9.5. MIPS 3000-ийн зааврын формат
MIPS 3000 нь 32 битийн R, J, K гэсэн 3 төрлийн заавартай (зураг 6.119)
275
58.
зураг 6.119.
op –operation code, 6 бит, тухайн заавраар гүйцэтгэх үйлдлийг тодорхойлно.
rs, rt – register source, тус бүр нь 5 бит
rd – register destination, 5 бит
shamt – shift amount, 5 бит
funct – function code, 6 бит, op талбарт тодорхойлогдсон үйлдлийн өөр хувилбар
16 bit address – address offset/immediate value
26 bit address – jump зааврыг ашиглах үеийн target address
Жишээ 6.5.
R төрлийн заавар:
add addu rd, rs, rt rd rs+rt
sub subu rd, rs, rt rd rs-rt
set on less than slt rd,rs,rt if rs<rt then rd=1 else rd=0
I төрлийн заавар:
load lw rt, rs, imm rt rs+imm
store sw rt, rs, imm mem(rs+imm) rt
branch beq rs, rt, offset if rs==rt then go to offset
branch bue rs, rt, offset if rs!=rt then go to offset
J төрлийн заавар:
jump j target go to target
6.9.6. MIPS 3000-ийн хаяглалтын хэлбэрүүд
R төрлийн зааврын хувьд шууд регистерт л хандана (register direct). Жишээ нь add $1, $2, $3
(зураг 6.120)
зураг 6.120.
I төрлийн зааврын хувьд регистерт утга олгоно (immediate). Жишээ нь add $1, $2, 100 (зураг
6.121)
зураг 6.121.
I төрлийн зааврын хувьд санах ой уруу displacement хэлбэрээр хандана (base index). Жишээ нь lw
$1,100($2) (зураг 6.122)
зураг 6.122.
Мөн түүнчлэн I төрлийн заавар нь РС-г ашиглана дараах хэлбэрээр санах ой уруу хандана (PC
relative). Жишээ нь beq $1,$2,100 (зураг 6.123)
зураг 6.123.
J төрлийн зааврын хувьд шууд санах уруу хандана. Жишээ нь j 1000. (зураг 6.124)
276