MIPS汇编语言程序设计 学习笔记(更新中)


指令的概念:指令是对计算机硬件发出的指示和命令。
指令的组成:指令由操作码和操作数两部分组成。操作码指出指令的操作类型,操作数是指令需要进行处理的数据。
机器指令:用二进制代码表示的指令称为机器指令。计算机可以直接执行机器指令。
机器语言和机器语言源程序:机器语言是用机器指令编写程序的规范;机器语言源程序是用机器语言所编写的程序。
符号指令的概念:用符号和助记符书写的指令称为符号指令。
汇编语言和汇编语言源程序:汇编语言是用符号指令书写程序的规范;汇编语言源程序是用汇编语言编写的程序。
汇编程序的概念:将汇编语言源程序翻译成计算机能够执行的机器语言源程序的程序称为汇编程序。
汇编语言源程序的优点:汇编语言编写的源程序占用的内存空间小,执行效率高。

1.数据的定义和传送

1.1.计算机内数据的表示

位的概念:位是计算机信息的最小表示单位,用小写字母b表示。一个二进制可以描述一个开关的状态,称为开关量。
字节的概念:字节是计算机内信息读写和处理的基本单位,由8位二进制数构成,用大写字母B表示。字节中的最低位称为最低有效位LSB,最高位称为最高有效位MSB。
字和双字的概念:字和双字分别由16位和32位组成。字中的后八位称为低位字节,前八位称为高位字节。双字中也有类似的划分:低位字节、次低位字节、次高位字节和高位字节。
无符号数的扩展方式:无符号数在进行位数扩展时采用的是0扩展方法,也就是在左侧添加若干个零。
有符号数的扩展方式:有符号数在进行位数扩展时采用的是符号扩展方法,也就是用它的符号位来填充新增加的高位。
BCD码的概念:BCD码是一种用二进制表示的十进制数编码方式。BCD码可以分为压缩BCD码和非压缩BCD码:压缩BCD码用一个字节的高低四位分别存储两位十进制数;非压缩BCD码则只使用一个字节的低四位存储一位十进制数,对高四位没有要求。

1.2.数据的定义

汇编语言编写的基本单位:汇编语言以段为基本单位进行编写。在一般情况下,数据定义在数据段中,程序定义在代码段中。不能在一个段的内部定义另一个段,不同的段相互独立。程序员应该按照段的含义给每一个段取一个清晰的名字,名字要用字母或下划线开头。
段的定义语法

段名  SEGMENT      ;SEGMENT语句是一条伪指令
....(段的内容)....
段名  ENDS         ;END语句也是一条伪指令

伪指令与伪操作:伪指令是指只是进行标注,但是经过汇编后不会产生任何机器指令代码的指令语句,其对应的操作称为伪操作。
汇编语言书写的一般规范
①汇编语言对大小写字母不进行区分;
②汇编语言中一行只能写一条指令或一条伪指令;
汇编语言的注释:汇编语言后用分号表示注释,分号后的内容即为注释内容。
数据定义的概念:数据定义就是对给出的数据分配存储单元,把它们用标准的格式存储到数据段中。
字节定义的语法:参考下面的数据定义段。

DATA  SEGMENT
X     DB -1,255,'A',3+2,?
      DB "ABC",0FFH,11001010B
Y     DB 3 DUP(?)
DATA  ENDS

①第一行表示DATA数据定义段的开始。
②第二行定义了一个变量X。所谓变量,就是在程序里数据可以改变的一组数据,变量名其实就是变量后第一个数据的地址
③DB伪操作表示接下来定义一组字节类型数据。DB后接着可以定义一组不同类型的数据,将按照定义的先后顺序逐一存储到数据段中,数据之间用逗号分隔。
用 ?表示暂时不确定值的数据
⑤如果数据过多以至于一行定义不下,则可以转到下一行继续定义。不用重写变量名,但是需要重写伪命令DB。
⑥可以用单引号括起一个单字符,用双引号括起一个字符串(会被拆分为单个字符进行存储)。
可以使用DUP进行重复定义。具体语法如下。

N DUP(X)

该语句表示将数据X重复定义N次。

定义字数据、双字数据:分别使用DW和DD伪指令即可定义字数据和双字数据,其使用方法和DB指令完全相同。但是需要注意的是,无论是字数据还是双字数据,都是把数据的高位存放在地址较大的单元中。除此之外,还可以用DQ伪指令和DT伪指令来定义八字节和十字节的数据。

1.3.数据的传送

汇编语言的语句分类:汇编语言的语句可以分为指令语句、伪指令语句和注释行三类。

①指令语句:包含与一条机器指令相对应的符号指令,汇编以后可以获得这条机器指令的二进制代码,这个二进制代码称为目标。
②伪指令语句:一条起说明性作用的语句。有的伪指令汇编后没有结果(SEGMENT),而有些伪指令汇编后会产生目标(如DB)。
③注释行:书写说明性文字的内容,不进行汇编也不产生目标。

指令语句的一般格式:指令语句的一般格式如下

[标号:]  操作码  [操作数]  [;注释]

①标号:标号是程序员给这一行指令取的名字,标号后必须加上冒号。大多数行都不需要进行标号。标号名用字母开头。
②操作码:操作码指出指令所需完成的操作,用指令助记符表示。操作码本身都是保留字。
③操作数:操作数表示指令操作的对象。可以有0-3个操作数,彼此之间使用逗号进行分隔(大多数指令有2个操作数)。操作数可以分为源操作数和目的操作数。
④注释:注释用于对指令进行一些说明。

操作数的分类:操作数可以分为寄存器操作数、立即数操作数和存储器操作数。

①寄存器操作数:寄存器包括段寄存器、通用数据寄存器、通用地址寄存器。在所有寄存器中,寄存器IP和寄存器FLAGS不能作为操作数出现在指令中。
②立即数操作数:所有可以求出值的表达式、字符和符号等都可以用作立即数操作数。但是立即数操作数不能用作目的操作数。
③存储器操作数
1.对存储器的一个单元进行访问时需要给出这个单元的段基址和偏移地址。
2.大多数情况下,指令自动将DS寄存器中的内容作为操作数的段基址,因此,在编写汇编语言源程序时首先需要将数据段的段基址存入DS寄存器中。
3.存储器操作的偏移地址可以由几个部分进行组合得到,合成后得到的偏移地址称为有效地址。可以通过直接或间接的方式给出偏移地址。

直接偏移地址:直接偏移地址是指在指令中直接给出存储单元的偏移地址。例如

MOV AL, [1200H]     ;以1200H作为偏移地址读取一个字节,送到AL寄存器中
MOV AX, [1200H]     ;以1200H作为偏移地址读取一个字,送到AX寄存器中

这种方式虽然一目了然,但是一般情况下都不知道具体的偏移地址,因此容易导致错误,且降低了可读性。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值