Skip to content

Latest commit

 

History

History
142 lines (121 loc) · 7.31 KB

File metadata and controls

142 lines (121 loc) · 7.31 KB

Набор инструкций

Оглавление

Формат инструкций: <destination> <source>

Примечания:

  • длина определяется в машинных словах
  • M обозначает обращение к памяти данных

Работа с данными

Мнемоника Синтаксис Семантика Длина
mov mov rd, rs rd <- rs 1
mov rd, [rs] rd <- M[rs] 1
mov [rd], rs M[rd] <- rs 1
mov rd, imm rd <- imm 2
mov rd, [imm] rd <- M[imm] 2
mov [imm], rs M[imm] <- rs 2
mov rd, [rs+imm] rd <- M[rs+imm] 2
mov [rd+imm], rs M[rd+imm] <- rs 2
push_ds push rs SP <- SP-4
M[SP] <- rs
1
push imm SP <- SP-4
M[SP] <- imm
2
pop_ds pop rd rd <- M[SP]
SP <- SP+4
1
push_rs push rs RP <- RP-4
M[RP] <- rs
1
push imm RP <- RP-4
M[RP] <- imm
2
pop_rs pop rd rd <- M[RP]
RP <- RP+4
1
ret ret PC <- M[RP]
RP <- RP+4
1

Арифметические операции

Мнемоника Синтаксис Семантика Длина
add add rd, rs1, rs2 rd <- rs1 + rs2 1
add rd, rs1, imm rd <- rs1 + imm 2
adc adc rd, rs1, rs2 rd <- rs1 + rs2 + CF 1
adc rd, rs1, imm rd <- rs1 + imm + CF 2
sub sub rd, rs1, rs2 rd <- rs1 – rs2 1
sub rd, rs1, imm rd <- rs1 – imm 2
mul mul rd, rs1, rs2 rd <- rs1 * rs2 1
div div rd, rs1, rs2 rd <- rs1 / rs2 1
mod mod rd, rs1, rs2 rd <- rs1 % rs2 1
neg neg rd, rs1 rd <- -rs1 1
cmp cmp rs1, rs2 SR <- NZVC 1

Битовые операции

Мнемоника Синтаксис Семантика Длина
and and rd, rs1, rs2 rd <- rs1 & rs2 1
and rd, rs1, imm rd <- rs1 & imm 2
or or rd, rs1, rs2 rd <- rs1 | rs2 1
or rd, rs1, imm rd <- rs1 | imm 2
xor xor rd, rs1, rs2 rd <- rs1 ^ rs2 1
xor rd, rs1, imm rd <- rs1 ^ imm 2
not not rd, rs1 rd <- !rs1 1
xor rd, imm rd <- !imm 2

Операции управления потоком (условные и безусловные переходы)

Семантика для описанных ниже операций идентична: PC <- addr, если условия выполняются

Мнемоника Синтаксис Условия Длина
jmp jmp addr Безусловный 2
jcc jcc addr CF == 0 2
jcs jcs addr CF == 1 2
jeq jeq addr ZF == 1 2
jne jne addr ZF == 0 2
jlt jlt addr NF != VF 2
jgt jgt addr ZF == 0 && NF == VF 2
jle jle addr ZF == 1 || NF != VF 2
jge jge addr NF == VF 2

Операции управления процессором

Мнемоника Описание Длина
halt Остановка выполнения процессора 1
nop Ничего 1

Операции ввода-вывода

Мнемоника Синтаксис Семантика Длина
out out <port> шина ВУ <- DR 1
in in <port> DR <- шина ВУ 1

Операции управления прерываниями

Мнемоника Синтаксис Семантика Длина
en_int en_int SR[IE] <- 1 1
dis_int dis_int SR[IE] <- 0 1
iret iret PC <- SPC
EAX..EFX <- r6..r10
1

Коды операций

  • 000000 (0x00) - halt
  • 000001 (0x01) - push_ds
  • 000010 (0x02) - pop_ds
  • 000011 (0x03) - add
  • 000100 (0x04) - adc
  • 000101 (0x05) - sub
  • 000110 (0x06) - mul
  • 000111 (0x07) - div
  • 001000 (0x08) - mod
  • 001001 (0x09) - neg
  • 001010 (0x0A) - cmp
  • 001011 (0x0B) - and
  • 001100 (0x0C) - or
  • 001101 (0x0D) - xor
  • 001110 (0x0E) - not
  • 001111 (0x0F) - jmp
  • 010000 (0x10) - jcc
  • 010001 (0x11) - jcs
  • 010010 (0x12) - jeq
  • 010011 (0x13) - jne
  • 010100 (0x14) - jlt
  • 010101 (0x15) - jgt
  • 010110 (0x16) - jle
  • 010111 (0x17) - jge
  • 011000 (0x18) - mov
  • 011001 (0x19) - nop
  • 011010 (0x1A) - out
  • 011011 (0x1B) - in
  • 011100 (0x1C) - en_int
  • 011101 (0x1D) - dis_int
  • 011110 (0x1E) - iret
  • 011111 (0x1F) - push_rs
  • 100000 (0x20) - pop_rs
  • 100001 (0x21) - ret