1.22k likes | 1.36k Views
第 3 章 16 位和 32 位微处理器的指令系统. 教学目的和要求 掌握 16 位微处理器的寻址方式、指令系统及汇编语言编程,了解 32 位微处理器的指令系统,掌握汇编语言编程的上机操作. 3.1 8086 微处理器的寻址方式与指令系统. 3.1.1 寻址方式 一条指令包含操作码和操作数两部分,操作码指出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。指令根据一定的方式,找到操作数或操作数的地址,然后取出操作数进行处理。寻找操作数地址的方式称为寻址方式. 表 3-1 8086/8088 的 6 种寻址方式. 一、寄存器寻址.
E N D
教学目的和要求 掌握16位微处理器的寻址方式、指令系统及汇编语言编程,了解32位微处理器的指令系统,掌握汇编语言编程的上机操作
3.1 8086微处理器的寻址方式与指令系统 3.1.1 寻址方式 一条指令包含操作码和操作数两部分,操作码指出该指令要进行的操作,操作数指出该指令需要的操作数或操作数的地址。指令根据一定的方式,找到操作数或操作数的地址,然后取出操作数进行处理。寻找操作数地址的方式称为寻址方式
一、寄存器寻址 汇编格式:R(R是寄存器名) 说明:寻找的操作数在寄存器R中 例【3-1】INC AX
二、寄存器间接寻址 汇编格式:[R](R是寄存器名) 说明:寄存器R的内容是操作数在内存的EA,先从寄存器R中取出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数,所以称为间接寻址。能用来作间接寻址的寄存器只能是BX、SI、DI或BP四者之一 例【3-2】MOV AX,[SI]
三、变址寻址 汇编格式:X[R](R是寄存器名,X表示位移量,其值是用8位或16位二进制补码表示的有符号数)。 说明:寄存器R内容和位移量X之和是操作数在内存的EA。先将寄存器R中的值和位移量X相加求出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数。能用来作变址寻址的寄存器只能是BX、SI、DI 或BP四者之一。 例【3-3】MOV BX,2[BX]
四、基址变址寻址 汇编格式:X[BR+IR]或X[BR][IR](BR为基址寄存器,IR为变址寄存器,X表示位移量,其值是用8位或16位二进制补码表示的有符号数) 说明:基址寄存器BR、变址寄存器IR的内容和位移量X三者之和是操作数在内存的EA。先将寄存器BR、IR中的值和位移量X相加求出操作数在内存的EA,再根据EA和某段寄存器生成PA寻找操作数。基址寄存器只能用BX或BP,变址寄存器只能用SI或DI
五、立即寻址 汇编格式:n(n是一个常数,称为立即数) 说明:指令操作码后面单元的内容为操作数(常数n),操作数在内存代码段。立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作码后面的一个可用8位或16位二进制补码表示的有符号数。立即寻址主要用来给寄存器或内存单元赋初值 例【3-4】MOV AX,2 ;是将立即数2送到AX中
六、直接寻址 汇编格式:含有变量的地址表达式或段寄存器:[EA] 说明:在一条指令中直接给出某一内存单元的EA,这个EA经过汇编后放在这条指令的下一个字单元。 例【3-5】MOV AX,[2000]是将数据段中EA为2000的内存单元中的内容送到AX中。
3.1.2 8086指令系统 一、数据传送指令
3.1.2 8086指令系统 一、数据传送指令(续1)
3.1.2 8086指令系统 一、数据传送指令(续2)
3.1.2 8086指令系统 一、数据传送指令(续3)
3.1.2 8086指令系统 二、算术运算指令
8086指令系统 二、算术运算指令(续1)
8086指令系统 二、算术运算指令(续2)
8086指令系统 三、位操作指令
8086指令系统 三、位操作指令(续1)
8086指令系统 三、位操作指令(续2)
8086指令系统 四、转移指令 转移指令分条件转移指令和无条件转移指令两大类,其特点是改变程序的执行顺序(即改变指令指针IP的值),但不改变状态标志位的状态。条件转移指令根据条件标志的状态判断是否转移。无条件转移指令则不作任何判断,无条件地转移到指令中指明的目的地址处执行。转移指令共有19条,具体见表3-8
8086指令系统 四、转移指令
8086指令系统 四、转移指令(续1)
8086指令系统 四、转移指令(续2)
8086指令系统 四、转移指令(续3)
8086指令系统 四、转移指令(续4)
8086指令系统 五、字符串操作指令 为了方便地实现字符串操作,8086/8088提供了字符串操作指令。只要按规定设置好初始条件,选用正确的字符串操作指令,就可完成规定的操作,这些指令的前面可加重复前缀,能在条件满足的情况下反复执行,而不用考虑指针如何移动、循环次数如何控制等问题,从而简化了程序设计。字符串操作指令在使用格式和使用方法上有许多类似的地方,它们隐含使用的寄存器、标志位和符号见表3-9
3.1.2 8086指令系统 五、字符串操作指令(续1)
8086指令系统 五、字符串操作指令(续2)
8086指令系统 五、字符串操作指令(续3) 系统规定:源串一定要在当前数据段中,目的串只允许在当前附加数据段中。所有的串操作指令均以寄存器间接方式访问源串或目的串中的各元素,并自动修改SI和DI的内容。若DF=0,则每次操作后,SI、DI自动增量(字节操作加1、字操作加2);若DF=1,则每次操作后,SI、DI自动减量(字节操作减1、字操作减2),使之指向下一个元素
8086指令系统 五、字符串操作指令(续4) 当指令带有重复前缀时,则指令重复执行,每执行一次,就检查一次重复条件是否成立,如成立,则继续重复;否则终止重复,执行后续指令 ① REP:重复,即无条件重复CX寄存器中指定的次数 ② REPE/REPZ:相等/为0时重复,即(CX)≠0(重复次数还未为0)同时ZF=1(比较时相等)时重复,否则,重复终止。 ③ REPNE/REPNZ:不相等/不为0时重复,即(CX)≠0(重复次数还未为0)同时ZF=0时重复,否则,重复终止
8086指令系统 五、字符串操作指令(续5)
8086指令系统 五、字符串操作指令(续6)
8086指令系统 五、字符串操作指令(续7)
8086指令系统 五、字符串操作指令(续8)
8086指令系统 五、字符串操作指令(续9)
8086指令系统 五、字符串操作指令(续10)
3.1.2 8086指令系统 六、 处理机控制指令
8086指令系统 六、 处理机控制指令(续1)
8086指令系统 六、 处理机控制指令(续2)
3.2 伪指令 3.2.1 伪指令 在汇编源程序中使用一些固定格式的约定符号,这些符号主要用来告诉汇编程序如何工作,这就是汇编控制命令,也称伪指令。伪指令和机器指令最大的区别有2点 ① 伪指令是在汇编源程序汇编期间,被汇编程序识别并解释。主要是为变量申请内存空间、建立堆栈、告诉汇编程序从何处开始汇编以及到何处结束等。而可执行指令是在程序执行期间被CPU译码并执行的
3.2.1 伪指令 ② 汇编结束后伪指令就完成任务,在程序执行期间不再考虑它,因此伪指令不翻译成目标码。而可执行指令经汇编程序汇编后,变成机器可以识别并执行的目标码 一、数据定义伪指令 格式:[变量名] 数据定义伪指令 表达式[,…] 功能:定义数据存储区,其类型由所使用的数据定义伪指令指定
3.2.1 伪指令 二、符号定义伪指令 ① 等价伪指令 格式:符号名 EQU 表达式 功能:用来为常量、表达式及其他各种符号定义一个等价的符号名,但它并不申请分配存储单元。 如果一个常量在程序中使用非常频繁可以用一个符号来表示它这就是符号常量。如假定学生成绩处理程序中经常使用某班的人数用等价伪指令定义为:N EQU 40。指令MOV AX,N在汇编时用40代替N变成MOV AX,40
3.2.1 伪指令 ② 等号伪指令 格式:符号名=表达式 功能:该语句的功能和EQU相似,不同的是等号伪指令能对所定义的符号名再重新定义,当使用等号语句连续定义同一符号名时,以最后一次定义的值为准
3.2.1 伪指令 三、段定义伪指令 格式: 段名 SEGMENT [定位方式][组合方式][ '类别'] ┇ 段名 ENDS 功能:定义了一个以SEGMENT伪指令开始,以ENDS伪指令结束,以段名命名的存储段
3.2.1 伪指令 说明: ① 段名是程序员为该段所起的名字,用来指出为该段分配的存储区起始位置。一个程序模块可以定义为若干段,段名可以各不相同,也可以重复,汇编程序将一个程序中的同名段处理成一个段。段的定义可以嵌套,但不能交叉。② 定位方式、组合方式和类别是可选项,可省略。 ③ 数据段(或附加数据段)中一般定义常量和变量,是为程序的代码段提供数据和保存计算结果的。它的一般格式如下: DATA SEGMENT 常量或变量定义 DATA ENDS