MIPS汇编语言

合集下载

mips 汇编代码

mips 汇编代码

MIPS汇编代码MIPS汇编代码是MIPS微处理器的汇编语言,由MIPS Technologies公司开发。

它是一种低级编程语言,允许程序员直接控制处理器的寄存器和指令。

MIPS汇编代码通常用于嵌入式系统和实时系统,因为它可以提供对硬件的精细控制和高性能。

MIPS汇编代码由一系列指令组成,每条指令由一个操作码和零个或多个操作数组成。

操作码指定要执行的操作,而操作数指定操作的参数。

MIPS汇编代码中的指令可以分为以下几类:算术和逻辑指令:这些指令用于执行算术和逻辑运算,例如加、减、乘、除、与、或、非等。

数据传送指令:这些指令用于在寄存器和内存之间传送数据。

控制流指令:这些指令用于控制程序的执行流程,例如跳转、分支、调用和返回等。

系统指令:这些指令用于与系统进行交互,例如加载和存储程序和数据、读写I/O设备等。

MIPS汇编代码通常使用以下语法:label: instruction operand1, operand2, ...其中,label是指令的标签,instruction是指令的操作码,operand1、operand2等是指令的操作数。

MIPS汇编代码的程序结构通常包括以下几个部分:数据段:数据段用于存储程序中使用的数据,包括常量、变量和数组等。

代码段:代码段用于存储程序的指令。

堆栈段:堆栈段用于存储程序的局部变量和临时数据。

MIPS汇编代码的编译过程通常包括以下几个步骤:预处理:预处理阶段将源代码中的宏和条件编译指令进行处理。

汇编:汇编阶段将源代码中的指令转换成机器码。

链接:链接阶段将汇编生成的机器码与库函数和系统库进行链接,生成可执行文件。

MIPS汇编代码的优点包括:高性能:MIPS汇编代码可以提供高性能,因为它可以直接控制处理器的寄存器和指令。

精细的控制:MIPS汇编代码允许程序员对硬件进行精细的控制,这对于嵌入式系统和实时系统非常重要。

可移植性:MIPS汇编代码可以移植到不同的MIPS处理器上,因为MIPS处理器具有相同的指令集架构。

MIPS汇编

MIPS汇编
ehb (执行遇险防护-当你需要保证上面指令的任何协处理器0 的副作用在随后的指令执行之前已经完成的时候所用的指令)
ext d,s,shf,sz 从32位寄存器提取位域。Shf是位域在s中的移位到 第0位所需要的位移量,sz是位域包含的位的个数。 mask=(2**sz-1)<<shf,d=(s&mask)>>shf
/p-141124298.html (MIPS指令与汇编)
or d,s,t
d=s | t
ori d,s,j 作OR
d=s|(unsigned)j,跟一个常数执行“或”操
sllv d,t,s d=t<<(s%32) (shift left logic by variable)
sll d,s,shf d=s<<shf;sll d,t,s,d=t<<(s%32)
sra d,s,shf d=(signed)s>>shf,shift-right arithmetic,算术右移, 最高位填充,适用于有符号数,sra d,s,t,d=(signed)s>>(t%32)
srav d,s,t sra d,s,t
srl d,s,shf d=(unsigned)s>>shf ,shift-right logical,逻辑右移, 类似C的无符号量的移位
.data伪指令
定义程序的数据段,程序的变量需要在该伪指令 下定义,汇编程序会分配和初始化变量的存储空间
.text伪指令
定义程序的代码段
.global伪指令
声明一个符号位全局的,全局符号可以被其他的 文件引用,用该伪指令声明一个程序的main过程
寻址
➢ 直接寻址

mips汇编语言指令

mips汇编语言指令

mips汇编语言指令MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的计算机处理器。

它的指令集被广泛应用于各种领域,包括嵌入式系统、操作系统和编译器等。

本文将介绍一些常见的MIPS汇编语言指令。

1. 加载和存储指令MIPS提供了一系列用于数据传输的指令。

其中,lw(load word)指令用于从内存中加载一个字(32位数据)到寄存器中,sw(store word)指令用于将一个字存储到内存中。

例如,lw $t0, 0($s0)表示将从地址$s0偏移量为0的内存位置加载一个字到$t0寄存器中。

2. 算术和逻辑指令MIPS提供了一系列用于算术和逻辑运算的指令。

例如,add指令用于将两个寄存器中的值相加,并将结果存储到目标寄存器中。

而and 指令用于对两个寄存器中的值进行按位与操作,并将结果存储到目标寄存器中。

例如,add $t0, $s0, $s1表示将$s0和$s1中的值相加,并将结果存储到$t0寄存器中。

3. 分支和跳转指令MIPS提供了一系列用于控制程序流程的指令。

其中,beq(branch if equal)指令用于在两个寄存器中的值相等时跳转到目标地址。

而j (jump)指令用于无条件跳转到目标地址。

例如,beq $t0, $t1, label表示如果$t0和$t1中的值相等,则跳转到标签为label的位置。

4. 移位指令MIPS提供了一系列用于移位操作的指令。

其中,sll(shift left logical)指令用于将一个寄存器中的值左移指定的位数,并将结果存储到目标寄存器中。

例如,sll $t0, $s0, 2表示将$s0中的值左移2位,并将结果存储到$t0寄存器中。

5. 系统调用指令MIPS提供了一系列用于进行系统调用的指令。

其中,syscall指令用于触发系统调用,并根据不同的系统调用号执行相应的操作。

MIPS架构及其汇编语言【英】

MIPS架构及其汇编语言【英】

MIPS架构及其汇编语⾔【英】说明:MIPS指令包含硬件及MIPS汇编器所提供的指令,其中汇编器指令⼀般是将⼏个硬件指令合并为⼀个指令,以⽅便使⽤。

MIPS指令类型有以下⼏类:1. 数据传送类2. 算术、逻辑运算类3. 控制类4. 输⼊输出类还可详细划分为以下这些种:算术运算指令:各种数据的加减乘除逻辑运算指令:与或⾮、移位常数操作指令:⽴即数操作⽐较指令:⼤⼩等与不等分⽀指令:条件控制跳转指令:直接跳转、跳转并链接陷阱指令:各条件下的陷阱中断取数指令:按字节、半字、字从RAM取数保存指令:取数的逆操作数据传送指令:乘除寄存器、协处理器间的数据存取浮点运算指令:单精度、双精度浮点数的加减乘除、⽐较、传送、整型转换、舍⼊、平⽅根异常和中断指令:异常返回、系统调⽤、跳出、空操作⽽本⽂只介绍了⼀部分类型的指令,不过模式⼤同⼩异,应⽤时还需举⼀反三。

⽬录:MIPS汇编语⾔的数据类型MIPS处理器中的寄存器及分类MIPS汇编程序结构MIPS汇编语⾔变量声明⽴即寻址、间接寻址与基址寻址MIPS汇编语⾔中的各种指令算术指令RAM存取指令分⽀&跳转指令系统调⽤与I/O以下为原⽂内容:,可以参考这篇⽂章Data Types and LiteralsData types:Instructions are all 32 bitsbyte(8 bits), halfword (2 bytes), word (4 bytes)a character requires 1 byte of storagean integer requires 1 word (4 bytes) of storageLiterals:numbers entered as is. e.g. 4characters enclosed in single quotes. e.g. 'b'strings enclosed in double quotes. e.g. "A string"Registers32 general-purpose registersregister preceded by $ in assembly language instructiontwo formats for addressing:using register number e.g. 0through31using equivalent names e.g. t1,spspecial registers Lo and Hi used to store result of multiplication and divisionnot directly addressable; contents accessed with special instruction mfhi ("move from Hi") and mflo ("move from Lo") stack grows from high memory to low memoryThis is from Figure 9.9 in the Goodman&Miller textRegister Number AlternativeNameDescription0zero the value 01$at(assembler temporary) reserved by the assembler2-3v0−v1(values) from expression evaluation and function results4-7a0−a3(arguments) First four parameters for subroutine. Not preserved across procedure calls8-15t0−t7(temporaries) Caller saved if needed. Subroutines can use w/out saving.Not preserved across procedure calls16-23s0−s7(saved values) - Callee saved.A subroutine using one of these must save original and restore it before exiting.Preserved across procedure calls24-25t8−t9(temporaries) Caller saved if needed. Subroutines can use w/out saving.These are in addition to t0−t7 above.Not preserved across procedure calls.26-27k0−k1reserved for use by the interrupt/trap handler28$gp global pointer.Points to the middle of the 64K block of memory in the static data segment.29$sp stack pointerPoints to last location on the stack.30s8/fp saved value / frame pointer Preserved across procedure calls31$ra return addressSee also Britton section 1.9, Sweetman section 2.21, Larus Appendix section A.6Program Structurejust plain text file with data declarations, program code (name of file should end in suffix .s to be used with SPIM simulator) data declaration section followed by program code sectionData Declarationsplaced in section of program identified with assembler directive .datadeclares variable names used in program; storage allocated in main memory (RAM)Codeplaced in section of text identified with assembler directive .textcontains program code (instructions)starting point for code e.g.ecution given label main:ending point of main code should use exit system call (see below under System Calls)Commentsanything following # on a line# This stuff would be considered a commentTemplate for a MIPS assembly language program:# Comment giving name of program and description of function# Template.s# Bare-bones outline of MIPS assembly language program.data # variable declarations follow this line# ....text # instructions follow this linemain: # indicates start of code (first instruction to execute)# ...# End of program, leave a blank line afterwards to make SPIM happyData Declarationsformat for declarations:name: storage_type value(s)create storage for variable of specified type with given name and specified valuevalue(s) usually gives initial value(s); for storage type .space, gives number of spaces to be allocated Note: labels always followed by colon ( : )examplevar1: .word 3 # create a single integer variable with initial value 3array1: .byte 'a','b' # create a 2-element character array with elements initialized# to a and barray2: .space 40 # allocate 40 consecutive bytes, with storage uninitialized# could be used as a 40-element character array, or a# 10-element integer array; a comment should indicate which!Load / Store InstructionsRAM access only allowed with load and store instructionsall other instructions use register operandsload:lw register_destination, RAM_source#copy word (4 bytes) at source RAM location to destination register.lb register_destination, RAM_source#copy byte at source RAM location to low-order byte of destination register,# and sign-e.g.tend to higher-order bytesstore word:sw register_source, RAM_destination#store word in source register into RAM destinationsb register_source, RAM_destination#store byte (low-order) in source register into RAM destinationload immediate:li register_destination, value#load immediate value into destination registerexample:.datavar1: .word 23 # declare storage for var1; initial value is 23.text__start:lw $t0, var1 # load contents of RAM location into register $t0: $t0 = var1li $t1, 5 # $t1 = 5 ("load immediate")sw $t1, var1 # store contents of register $t1 into RAM: var1 = $t1doneIndirect and Based AddressingUsed only with load and store instructionsload address:la $t0, var1copy RAM address of var1 (presumably a label defined in the program) into register $t0 indirect addressing:lw $t2, ($t0)load word at RAM address contained in t0into t2sw $t2, ($t0)store word in register t2intoRAMataddresscontainedin t0based or indexed addressing:lw $t2, 4($t0)load word at RAM address (t0+4)intoregister t2"4" gives offset from address in register $t0sw $t2, -12($t0)store word in register t2intoRAMataddress(t0 - 12)negative offsets are fineNote: based addressing is especially useful for:arrays; access elements as offset from base addressstacks; easy to access elements at offset from stack pointer or frame pointerexample.dataarray1: .space 12 # declare 12 bytes of storage to hold array of 3 integers.text__start: la $t0, array1 # load base address of array into register $t0li $t1, 5 # $t1 = 5 ("load immediate")sw $t1, ($t0) # first array element set to 5; indirect addressingli $t1, 13 # $t1 = 13sw $t1, 4($t0) # second array element set to 13li $t1, -7 # $t1 = -7sw $t1, 8($t0) # third array element set to -7doneArithmetic Instructionsmost use 3 operandsall operands are registers; no RAM or indirect addressingoperand size is word (4 bytes)add $t0,$t1,$t2 # $t0 = $t1 + $t2; add as signed (2's complement) integerssub $t2,$t3,$t4 # $t2 = $t3 Ð $t4addi $t2,$t3, 5 # $t2 = $t3 + 5; "add immediate" (no sub immediate)addu $t1,$t6,$t7 # $t1 = $t6 + $t7; add as unsigned integerssubu $t1,$t6,$t7 # $t1 = $t6 + $t7; subtract as unsigned integersmult $t3,$t4 # multiply 32-bit quantities in $t3 and $t4, and store 64-bit# result in special registers Lo and Hi: (Hi,Lo) = $t3 * $t4div $t5,$t6 # Lo = $t5 / $t6 (integer quotient)# Hi = $t5 mod $t6 (remainder)mfhi $t0 # move quantity in special register Hi to $t0: $t0 = Himflo $t1 # move quantity in special register Lo to $t1: $t1 = Lo# used to get at result of product or quotientmove $t2,$t3 # $t2 = $t3Control StructuresBranchescomparison for conditional branches is built into instructionb target # unconditional branch to program label targetbeq $t0,$t1,target # branch to target if $t0 = $t1blt $t0,$t1,target # branch to target if $t0 < $t1ble $t0,$t1,target # branch to target if $t0 <= $t1bgt $t0,$t1,target # branch to target if $t0 > $t1bge $t0,$t1,target # branch to target if $t0 >= $t1bne $t0,$t1,target # branch to target if $t0 <> $t1Jumpsj target # unconditional jump to program label targetjr $t3 # jump to address contained in $t3 ("jump register")Subroutine Callssubroutine call: "jump and link" instructionjal sub_label # "jump and link"copy program counter (return address) to register $ra (return address register)jump to program statement at sub_labelsubroutine return: "jump register" instructionjr $ra # "jump register"jump to return address in $ra (stored by jal instruction)Note: return address stored in register ra;ifsubroutinewillcallothersubroutines,orisrecursive,returnaddressshouldbecopiedfrom ra onto stack to preserve it, since jal always places return address in this register and hence will overwrite previous value System Calls and I/O (SPIM Simulator)used to read or print values or strings from input/output window, and indicate program enduse syscall operating system routine callfirst supply appropriate values in registers v0and a0-$a1result value (if any) returned in register $v0The following table lists the possible syscall services.Service Codein $v0Arguments Resultsprint_int1$a0 = integer to be printedprint_float2$f12 = float to be printedprint_double3$f12 = double to be printedprint_string4$a0 = address of string in memoryread_int5integer returned in $v0read_float6float returned in $v0read_double7double returned in $v0read_string8a0=memoryaddressofstringinputbuffer a1 = length of string buffer (n)sbrk9$a0 = amount address in $v0exit10The print_string service expects the address to start a null-terminated character string. The directive .asciiz creates a null-terminated character string.The read_int, read_float and read_double services read an entire line of input up to and including the newline character.The read_string service has the same semantices as the UNIX library routine fgets.It reads up to n-1 characters into a buffer and terminates the string with a null character.If fewer than n-1 characters are in the current line, it reads up to and including the newline and terminates the string with anull character.The sbrk service returns the address to a block of memory containing n additional bytes. This would be used for dynamicmemory allocation.The exit service stops a program from running.e.g. Print out integer value contained in register $t2li $v0, 1 # load appropriate system call code into register $v0;# code for printing integer is 1move $a0, $t2 # move integer to be printed into $a0: $a0 = $t2syscall # call operating system to perform operatione.g. Read integer value, store in RAM location with label int_value (presumably declared in data section)li $v0, 5 # load appropriate system call code into register $v0;# code for reading integer is 5syscall # call operating system to perform operationsw $v0, int_value # value read from keyboard returned in register $v0;# store this in desired locatione.g. Print out string (useful for prompts).datastring1 .asciiz "Print this.\n" # declaration for string variable,# .asciiz directive makes string null terminated.textmain: li $v0, 4 # load appropriate system call code into register $v0;# code for printing string is 4la $a0, string1 # load address of string to be printed into $a0syscall # call operating system to perform print operatione.g. To indicate end of program, use exit system call; thus last lines of program should be:li $v0, 10 # system call code for exit = 10syscall # call operating sysProcessing math: 100%。

汇编语言的种类

汇编语言的种类

汇编语言的种类汇编语言是计算机领域中的一门编程语言,它与机器语言密切相关,用于书写可以被计算机直接执行的程序代码。

汇编语言直接操作计算机底层硬件,因此在性能和效果上具有很大优势。

在汇编语言中,不同的体系结构和处理器都有不同的指令集和语法规则,这导致了汇编语言的种类繁多。

本文将介绍几种常见的汇编语言。

1. x86汇编语言x86汇编语言是最为广泛应用的汇编语言之一,在PC和服务器领域得到广泛使用。

x86指令集是英特尔和AMD等处理器厂商所采用的指令集架构,在x86汇编语言中,可以直接操作寄存器、内存以及其他外设,具有很高的灵活性和可操作性。

x86汇编语言使用Intel语法和AT&T语法两种不同的语法规则,常用的编译器有MASM、NASM和GAS。

2. ARM汇编语言ARM汇编语言广泛应用于移动设备、嵌入式系统和物联网等领域。

ARM处理器以其低功耗、高性能和内容丰富的架构而闻名,ARM汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和可扩展性。

ARM汇编语言使用ARM体系结构定义的指令集和语法规则,常用的编译器有ARM汇编器和GNU汇编器等。

3. MIPS汇编语言MIPS汇编语言被广泛应用在嵌入式系统、数字信号处理以及网络设备等领域。

MIPS处理器以其简洁的指令集和高效的架构而著称,MIPS汇编语言可以直接控制寄存器、存储器以及其他外设,具有很高的执行效率和指令流水线能力。

MIPS汇编语言使用MIPS体系结构定义的指令集和语法规则,常用的编译器有MIPS汇编器。

4. PowerPC汇编语言PowerPC汇编语言主要应用于IBM PowerPC架构的服务器、工作站以及游戏机等领域。

PowerPC处理器以其高性能和可扩展性而著称,PowerPC汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和性能表现。

PowerPC汇编语言使用PowerPC指令集和语法规则,常见的编译器有PowerPC汇编器。

MIPS指令系统和汇编语言

MIPS指令系统和汇编语言

MIPS指令系统和汇编语言MIPS(Microprocessor without Interlocked Pipeline Stages)指令系统,是一种以RISC(Reduced Instruction Set Computer,精简指令集计算机)为基础的处理器架构。

作为一种广泛应用于嵌入式系统和计算机组成的指令集架构,MIPS指令系统以其简洁高效的特性而受到广泛关注和应用。

一、MIPS指令系统概述MIPS指令系统的设计目标之一是提高处理器的性能,并降低设计的复杂性。

它采用了统一的指令格式,包括操作码、源操作数以及目的操作数等字段,使得指令的译码和执行过程更加高效。

此外,MIPS的指令集还支持延迟槽、流水线和分支延迟等特性,以进一步提升指令执行的效率。

二、MIPS指令格式MIPS指令格式遵循统一的规则,包括三种基本类型的指令格式:R 型、I型和J型指令。

R型指令主要用于寄存器之间的操作,包括算术运算、逻辑运算等;I型指令用于立即数和寄存器之间的操作,涵盖了数据传输、分支跳转等功能;J型指令主要用于无条件跳转。

三、MIPS指令编码和寻址方式MIPS指令采用固定长度的指令编码格式,使得指令的解析和处理更加高效。

在寻址方面,MIPS支持多种寻址方式,包括立即寻址、寄存器寻址和间接寻址等。

这些灵活的寻址方式使得MIPS指令更加适用于不同的计算需求。

四、MIPS汇编语言MIPS汇编语言是一种用于编写MIPS指令的低级语言。

它是一种基于文本的表示形式,使用助记符来表示不同的指令和操作。

MIPS汇编语言具有简单易学的特性,更加接近底层硬件的工作原理,使得程序员可以更加精准地控制和优化程序的执行过程。

五、MIPS指令系统的应用由于MIPS指令系统的优越性能和灵活性,它被广泛应用于各种领域。

在嵌入式系统中,MIPS处理器可以实现高性能和低功耗的设计,广泛应用于智能手机、路由器、电视机等设备中。

在计算机组成和操作系统领域,MIPS指令系统被用于讲解和研究计算机的工作原理和底层机制。

汇编语言的类型

汇编语言的类型

汇编语言的类型汇编语言是一种底层的编程语言,它与计算机硬件密切相关,常用于控制硬件的操作。

汇编语言的类型也有多种,下面将分别介绍。

1. x86汇编语言x86汇编语言是一种广泛使用的汇编语言,主要用于Intel和AMD 处理器。

它是一种基于寄存器的汇编语言,通过寄存器来访问内存和其他设备。

x86汇编语言非常灵活,可以用来编写各种类型的应用程序,包括操作系统、驱动程序、安全软件等。

2. ARM汇编语言ARM汇编语言是一种使用ARM处理器的汇编语言。

ARM处理器是一种低功耗的处理器,广泛应用于移动设备和嵌入式系统。

ARM 汇编语言是基于寄存器的汇编语言,也可以通过其他方式来访问内存和其他设备。

ARM汇编语言通常用于编写嵌入式系统的驱动程序和操作系统。

3. MIPS汇编语言MIPS汇编语言是一种使用MIPS处理器的汇编语言。

MIPS处理器是一种高性能的处理器,常用于路由器、交换机和数字信号处理器等。

MIPS汇编语言是基于寄存器的汇编语言,也可以通过其他方式来访问内存和其他设备。

MIPS汇编语言通常用于编写嵌入式系统的驱动程序和操作系统。

4. AVR汇编语言AVR汇编语言是一种使用AVR微控制器的汇编语言。

AVR微控制器是一种低功耗的微控制器,广泛应用于嵌入式系统、电子设备和工业控制等领域。

AVR汇编语言主要基于寄存器,也可以通过其他方式来访问内存和其他设备。

AVR汇编语言通常用于编写嵌入式系统的驱动程序和操作系统。

5. SPARC汇编语言SPARC汇编语言是一种使用SPARC处理器的汇编语言。

SPARC处理器是一种高性能的处理器,常用于服务器和超级计算机等。

SPARC汇编语言主要基于寄存器,也可以通过其他方式来访问内存和其他设备。

SPARC汇编语言通常用于编写操作系统和高性能计算程序等。

总结汇编语言的类型有很多种,不同的汇编语言适用于不同的处理器和应用场景。

汇编语言虽然比高级语言难以学习和使用,但它可以直接控制硬件,因此在某些特定的应用领域中有着不可替代的作用。

MIPS 指令系统和汇编语言

MIPS 指令系统和汇编语言

这种寻址方式不需作任何寻址运算,简单直观,也便于硬件实现,但地址空间受到指令中 地址码字段位数的限制。 (4)间接寻址 间接寻址意味着指令中给出的地址 A 不是操作数的地址,而是存放操作数地址的主存单 元的地址, 简称操作数地址的地址。 通常在指令格式中划出一位作为直接或间接寻址的标志位,
间接寻址时标志位@=1。 间接寻址中又有一级间接寻址和多级间接寻址之分。在一级间接寻址中,首先按指令的地 址码字段先从主存中取出操作数的有效地址,即 EA=(A),然后再按此有效地址从主存中读出 操作数,如图(a)所示。操作数 S 与地址码 A 的关系为:S=((A))。 多级间接寻址为取得操作数需要多次访问主存,即使在找到操作数有效地址后,还需再访 问一次主存才可得到真正的操作数,如图(b)所示。对于多级间接寻址来说,在寻址过程中所 访问到的每个主存单元的内容中都应设有一个间址标志位。 通常将这个标志放在主存单元的最 高位。 当该位为 “1” , 表示这一主存单元中仍然是间接地址, 需要继续间接寻址; 当该位为 “0” , 表示已经找到了有效地址,根据这个地址可以读出真正的操作数。
有效地址的概念
寻址方式是根据指令中给出的地址码字段寻找有效地址的方式。 我们把指令中地址码字段 给出的地址称为形式地址(用字母 A 表示) ,这个地址有可能不能直接用来访问主存。例如, IBM PC/XT 机的主存容量可达 1MB, 而指令中的地址码字段最长仅 16 位, 仅能直接访问主存 的一小部分,而无法访问到整个主存空间。就是在字长很长的大型机中,即使指令中能够拿出 足够的位数来作为访问整个主存空间的地址,为了灵活方便地编制程序,也需要对地址进行必 要的变换。 有效地址是指能够直接访问主存的地址(用字母 EA 表示) ,形式地址经过某种寻址方式 的转换才能变为有效地址。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无符号数比较小于时置位 sltu $s1, $s2, $s3 比较小于立即数时置位 sltiu $s1, $s2, 100
j 2500 无 跳转 条 件 跳转至寄存器所指的位置 jr $ra 跳 转 跳转并链接 jal 2500
MIPS汇编语言 类 指令 别 加 减 加立即数 无符号加 无符号减 举例 add $s1, $s2, $s3 sub $s1, $s2, $s3 addi $s1, $s2, 100 addu $s1, $s2, $s3 subu $s1, $s2, $s3 含义 $s1 = $s2 + $s3 $s1 = $s2 - $s3 $s1 = $s2 + 100 $s1 = $s2 + $s3 $s1 = $s2 - $s3 $s1 = $s2 + 100 $s1 = $epc Hi, Lo = $s2 × $s3 Hi, Lo = $s2 × $s3 Lo = $s2 / $s3 Hi = $s2 mod $s3 Lo = $s2 / $s3 Hi = $s2 mod $s3 $s1 = Hi $s1 = Lo $s1 = Memory[$s2 + 20] Memory[$s2 + 20] = $s1 $s1 = Memory[$s2 + 20] Memory[$s2 + 20] = $s1 $s1 = Memory[$s2 + 20] Memory[$s2 + 20] = $s1 $s1 = Memory[$s2 + 20] Memory[$s2 + 20] = $s1; $s1 = 0或1 $s1 = 100 * 2^16 $s1 = $s2 & $s3 $s1 = $s2 | $s3 $s1 ~($s2 | $s3) $s1 = $s2 & 100 $s1 = $s2 | 100 $s1 = $s2 << 10 $s1 = $s2 >> 10 备注 三个操作数;检测溢出 三个操作数;检测溢出 加常数,检测溢出 三个操作数;不检测溢出 三个操作数;不检测溢出 加常数;不检测溢出 复制异常PC到专用寄存器 64位有符号积存在Hi,Lo中 64位无符号积存在Hi,Lo中 Lo = 商, Hi = 余 无符号商和余数 用来获得Hi的拷贝 用来获得Lo的拷贝 将一个字从内存取到寄存器中 将一个字从寄存器中存到内存中 将半个字从内存取到寄存器中 将半个字从寄存器中存到内存中 将一个字节从内存取到寄存器中 将一个字节从寄存器中存到内存中 取字作为原子交换的前半部分 存字作为原子交换的后半部分 取立即数并放在高16位 三个寄存器操作数;按位与 三个寄存器操作数;按位或 三个寄存器操作数;按位或非 和常数按位与 和常数按位或 根据常数左于时置位 件 跳 转 小于立即数时置位
beq $s1, $s2, 25 bne $s1, $s2, 25 slt $s1, $s2, $s3 slti $s1, $s2, 100
if($s1 == $s2)跳至PC + 4 + 100 if($s1 != $s2)跳至PC + 4 + 100
相等检测; 和PC相关的跳转 不相等检测; 和PC相关的跳转
if($s2 < $s3) $s1 = 1;否则 $s1 = 0 比较是否小于;补码形式 if($s2 < 100) $s1 = 1;否则 $s1 = 0 比较是否小于常数;补码形式 if($s2 < $s3) $s1 = 1;否则 $s1 = 0 比较是否小于;自然数 if($s2 < 100) $s1 = 1;否则 $s1 = 0 比较是否小于常数;自然数 跳至10000 跳至$ra $ra = PC + 4;跳至10000 跳转至目标地址 用于switch语句,以及过程调用返回 用于过程调用
无符号加立即数 addiu $s1, $s2, 100 算 术 从协处理器寄存器中获得 mfc0 $s1, $epc 运 算 乘 mult $s2, $s3 无符号乘 除 无符号除 从Hi中获得 从Lo中获得 取字 存字 取无符号半字 存半字 数 据 取无符号字节 传 输 存字节 取链接字 存条件字 立即数读入高16位 与 或 或非 逻 辑 与立即数 运 算 或立即数 逻辑左移 逻辑右移 multu $s2, $s3 div $s2, $s3 divu $s2, $s3 mfhi $s1 mflo $s1 lw $s1, 20($s2) sw $s1, 20($s2) lhu $s1, 20($s2) sh $s1, 20($s2) lbu $s1, 20($s2) sb $s1, 20($s2) ll $s1, 20($s2) sc $s2, 20($s2) lui $s1, 100 AND $s1, $s2, $s3 OR $s1, $s2, $s3 NOR $s1, $s2, $s3 ANDi $s1, $s2, 100 Ori $s1, $s2, 100 sll $s1, $s2, 10 srl $s1, $s2, 10
相关文档
最新文档