Draft
32-bit general-purpose registers: R0 ~ RD, stack pointer SP (RE), base pointer BP (RF) RAb, RAw, RA correspond to x86's al, ax, eax, respectively R0 always 0 flags register: FR flags: zero, carry, overflow, signed program counter: PC instruction register: IR 8-bit opcode 12-bit memory address, 1-byte per addressable unit 2^12 = 4096 bytes of memory in total 0xFFC ~ 0xFFF as the stdio port variable-length instruction (at most 32-bit) an adder and a shifter between register file and ALU to support stack / procedure operations and addressing mode instruction set: hlt ; ALU operations (20) ; affects FR except inc & dec, RC may be a constant ; always performs 32-bit calculation add RA, RB, RC ; RA <- RB + RC sub RA, RB, RC ; RA <- RB - RC and RA, RB, RC ; RA <- RB & RC or RA, RB, RC ; RA <- RB | RC xor RA, RB, RC ; RA <- RB ^ RC shl RA, RB, RC ; RA <- RB << RC shr RA, RB, RC ; RA <- RB >> RC not RA, RC ; RA <- ~RC inc RA, RC ; RA <- RC + 1 dec RA, RC ; RA <- RC - 1 ; data transfer operations (9) ; ldi & sti are integrated into ld & st ; RA may be replaced by RAb or RAw lea RA, addr + RB + RC * c ; RA <- addr + RB + RC * c, 3 versions ld RA, addr + RB + RC * c ; RA <- [addr + RB + RC * c], 3 versions st RA, addr + RB + RC * c ; [addr + RB + RC * c] <- RA, 3 versions ; jump operations (19) jz addr ; jump if zero jnz addr ; jump if not zero jc addr ; jump if carry jnc addr ; jump if not carry jo addr ; jump if overflow jno addr ; jump if not overflow js addr ; jump if signed jns addr ; jump if not signed je addr ; jump if equal jne addr ; jump if not equal ja addr ; jump if above jna addr ; jump if not above jb addr ; jump if below jnb addr ; jump if not below jg addr ; jump if greater jng addr ; jump if not greater jl addr ; jump if less jnl addr ; jump if not less jmp addr ; unconditional jump ; stack operations (8) ; RA may be replaced by RAb or RAw push RA ; SP -= 4, [SP] <- RA, 3 versions pop RA ; RA <- [SP], SP += 4, 3 versions pushf ; --SP, [SP] <- FR popf ; FR <- [SP], ++SP ; procedure operations (2) call addr ; SP -= 4, [SP] <- PC, jmp addr ret ; PC <- [SP], SP += 4
--
只是草稿 XD。
Labels: TOY86
<< 回到主頁