IBM-PC汇编语言程序设计.ppt_第1页
IBM-PC汇编语言程序设计.ppt_第2页
IBM-PC汇编语言程序设计.ppt_第3页
IBM-PC汇编语言程序设计.ppt_第4页
IBM-PC汇编语言程序设计.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 80x86的指令系统和寻址方式1 编程工具 v第三章 80x86指令系统和寻址方式 v第四章 汇编语言程序格式 第3章 80x86的指令系统和寻址方式2 第3章 80x86的指令系统和寻址方式 3.1 程序语言简介 3.2 80x86的寻址方式 3.3 程序占有的空间和时间 3.4 80x86的指令系统 第3章 80x86的指令系统和寻址方式3 3.1 程序语言简介 (1) 指令、指令系统和程序 (2) 机器码和机器语言 (3) 助记符和汇编语言 (4) 高级语言 (5) 8086/8088指令格式简介 第3章 80x86的指令系统和寻址方式4 l CPU是一个可以完成一些基本操作的电子器件。 l 用编码表示CPU的一个基本操作,称为一条指令。 l 全部指令集称为指令系统。 l 指令系统反映 CPU的基本功能, 是硬件设计人员和程序员能见到的机器的主要属性, 是硬件构成的计算机系统向外部世界提供的直接界面。 (1) 指令、指令系统和程序 第3章 80x86的指令系统和寻址方式5 l 程序是为要解决的问题编写出来的指令集合 l 一个CPU的指令系统是固定的, 不同类型的CPU其指令系统不同; 同一系列向上兼容。 l 用户为解决自己的问题所编写的程序称为源程序。 第3章 80x86的指令系统和寻址方式6 (2) 机器码和机器语言 l 应用:显示设备简单的单片机 家用电器、固化在ROM上的程序等 l 机器语言是机器码及其使用的一组规则。 l 用机器语言编写的程序称为目标程序。 l 机器语言特点:CPU能直接识别的唯一语言 面向机器,可直接被计算机执行 执行速度快,占用内存空间小 编程效率低、可读性差、可移值性差 l 用二进制数编码表示的指令,称为机器指令或机器码 。 第3章 80x86的指令系统和寻址方式7 例 将地址为2000H和2001H 的两内存单元内容相加, 结果存在地址2002H单元中,程序如下: A0 00 20 02 06 01 20 A2 02 20 数据暂存器 PSW标志 寄存器 控制电路 指令译码器 AX BX CX DX SI DI BP SP 寄存器组 指 令 队 列 总线 接口 控制 电路 运 算 器 地址总线AB 数据总线DB 控制总线CB 地 址 译 码 器 IP 地 址 加 法 器 DS ES SS CS 1010 0000 0000 0000 0010 0000 0000 0010 0000 0110 0000 0001 0010 0000 1010 0010 0000 0010 0010 0000 A0 00 20 02 06 01 20 A2 02 20 MOV AL , 2000H ADD AL , 2001H MOV 2002H, AL 第3章 80x86的指令系统和寻址方式8 (3) 助记符和汇编语言 l 用助记符等表示的指令称为汇编格式指令 例 MOV AL, 0 l 汇编语言是汇编格式指令、伪指令及其使用的一组规则 。 l 用汇编语言编写的程序称汇编语言程序。 l 助记符是有助记忆、并能描述指令功能的符号。 通常是指令功能的英文单词的缩写。 例 数的传送指令用助记符MOV 加法用ADD,转移用JMP等 第3章 80x86的指令系统和寻址方式9 上例 将地址为2000H和2001H 的两内存单元内容相加, 结果存在地址2002H单元中。 l 汇编格式指令与机器指令一一对应 l 用汇编语言编好的程序, 必须翻译成机器码表示的程序,计算机才能运行。 l 汇编程序是将汇编语言程序翻译成机器语言的一种系统程序。 用机器码编程: A0 00 20 02 06 01 20 A2 02 20 用汇编语言编写的确程序段为: MOV AL , var1 ADD AL , var2 MOV var3 , AL 第3章 80x86的指令系统和寻址方式10 l 汇编语言和机器语言编写的程序: 4面向机器,反映机器运行的实际过程, 与计算机的硬件结构和指令系统密切相关 4算法是用计算机的指令, 寄存器等描述, 要了解CPU的编程结构、寻址方式、指令系统才能设计程序 4占内存少,执行速度快 4编写繁琐、调试困难 l汇编语言相对于机器语言编写的程序: 汇编语言程序,易读易懂,便于修改。 第3章 80x86的指令系统和寻址方式11 (4) 高级语言 l 高级语言是独立于机器、面向过程或对象的语言。 算法是按照人的思维方式给出,比较接近人的自然语言。 上例 高级语言程序段为: var3 = var1 + var2 l 由翻译程序将高级语言源程序翻译目标程序, 即用机器码表示的程序,机器才能执行。 (不同类型机器由于指令系统不同,它们的编译程序不同) l Fortran、 Basic、 C等均是高级语言。 l 使用高级语言编程,效率高,可读性、可移植性强。 第3章 80x86的指令系统和寻址方式12 (1) 操作码 指明CPU要执行什么样的操作。 是一条指令必不可少的部分,用助记符表示。 l 指令格式 例 ADD AL,10H 数据传送 算术运算 逻辑运算 串操作 控制转移 处理机控制 按功能 指令分六类 (2) 操作数 指明参与操作的数据或数据所在的地方。 了解操作数的来源、个数、类型。 (5)8086/8088指令格式简介 操作码 操作数 . 操作数 第3章 80x86的指令系统和寻址方式13 q 操作数来源 指明操作数所在的地方 有三种来源: 操作数在指令中,称立即数操作数 如 MOV AL , 9 操作数在寄存器中,称寄存器操作数 指令中给出用符号表示的寄存器名。 如 MOV AL , 9 操作数在内存单元中,称存储器操作数或内存操作数 指令中给出该内存单元的地址。用 表示存储器操作数 如 MOV AL , 2000H 第3章 80x86的指令系统和寻址方式14 q 操作数个数 按指令格式中,操作数个数的多少分为四类: 无操作数: 指令只有一个操作码,没有操作数 单操作数: 指令中给出一个操作数 双操作数: 指令中给出两个操作数。 三操作数:指令中给出两个操作数。 第3章 80x86的指令系统和寻址方式15 无操作数: 指令只有一个操作码,没有操作数。 有两种可能: 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 操作数隐含在指令中。 如 AAA , DAA等调整指令。 第3章 80x86的指令系统和寻址方式16 单操作数: 指令中给出一个操作数。 有两种可能: 有些操作只需要一个操作数 如 INC AL ; (AL) (AL)+ 1 有些操作将另一个操作数隐含在指令中 如 MUL BL ; (AX) (AL)(BL) 第3章 80x86的指令系统和寻址方式17 双操作数: 指令中给出两个操作数。 如 ADD AL , BL ;(AL) (AL) + (BL) 目的操作数 源操作数 操作后的结果通常存放在目的操作数中。 第3章 80x86的指令系统和寻址方式18 三操作数: 指令中给出三个操作数。 如 IMUL BX, DX, 6 ;(BX) (DX) *6 目的操作数 源操作数 立即数 操作后的结果通常存放在目的操作数中。 第3章 80x86的指令系统和寻址方式19 一地址指令: INC AX DEC CX 二地址指令: MOV AX, 2000H ADD AH, BL 三地址指令: IMUL BX,DX,7 操作码 操作数 . 操作数指令 : 通常,指令的第一个字节或头两个字节为指令的操 作码和寻址方式,统称为操作码域。 操作码域之后的字节统称为操作数域 (5) 指令的格式 l 指令格式 操作码 操作数 例 ADD AL,10H 第3章 80x86的指令系统和寻址方式20 3.2 80x86的寻址方式 v与数据有关的寻址方式 v与转移地址有关的寻址方式 第3章 80x86的指令系统和寻址方式21 3.2.1 与数据有关的寻址方式 以 MOV 指令为例 1. 立即寻址方式* 操作数在指令中给出 MOV AL, 5 MOV AX, 3064H * 只能用于SRC字段 * SRC 和 DST的字长一致 MOV AH, 3064H 适用于给寄存器赋初值 第3章 80x86的指令系统和寻址方式22 2. 寄存器寻址方式* 操作数在指定的寄存器中 MOV AX, BX MOV AL, BH * 字节寄存器只有 AH AL BH BL CH CL DH DL * SRC 和 DST的字长一致 MOV AH, BX * CS不能用MOV指令改变 MOV CS, AX 运算速度快 第3章 80x86的指令系统和寻址方式23 存储器寻址(除代码段) 四种成分的组合 EA基址+(变址*比例因子)+位移量 位移量:存放在指令中的一个8位、16位或32位的数, 通常是个地址 基 址: 基址寄存器中的内容,通常用来指向数组或字符串的首地址 变 址: 变址寄存器中的内容,通常用来指向数组中的某个元素或字 符串中的某个字符 比例因子:386+,值可为1,2,4,8,与变址相乘用于访问元素长度 为2、4、8字节的数组 第3章 80x86的指令系统和寻址方式24 四种成分16位寻址32位寻址 位移量0 , 8 , 16位0 , 8 , 32位 基址寄存器BX ,BP任何32位通用寄存器(包括ESP ) 变址寄存器SI,DI除ESP以外的32位通用寄存器 比例因子无1 ,2 ,4 ,8 16位/32位寻址时有效地址的四种成分的组成 第3章 80x86的指令系统和寻址方式25 默认段选择规则 访问类 型所用段及段寄存 器 缺省选择规则 指 令代码段 CS用于取指 堆 栈堆栈段 SS所有堆栈的进栈 与出栈 任何用ESP或EBP作为基址寄存器的访问 局部数据数据段 DS除相对于堆栈以及串处理指令的目的串 以外的所有数据访问 目 的 串附加段 ES串处理指令的目的串 第3章 80x86的指令系统和寻址方式26 段跨越前缀 用于改变系统所指定的默认段选择规则 有三种情况不允许使用段跨越前缀: 1、串处理指令的目的串必须用ES 2、PUSH指令的目的和POP指令的源必须用SS段 3、指令必须存放在CS段中 第3章 80x86的指令系统和寻址方式27 访问存储器的方式 默认的 段寄存器 可跨越的 段寄存器 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP 一般数据访问 DS CS ES SS 有效地址EA BP作为基址的寻址 SS CS DS ES BP 串操作的源操作数 DS CS ES SS SI 串操作的目的操作数 ES 无 DI 段 寄 存 器 的 使 用 规 定 第3章 80x86的指令系统和寻址方式28 3. 直接寻址方式* 有效地址EA由指令直接给出 有效地址EA:操作数的偏移地址 物理地址PA = 16d (DS) + EA 例:MOV AX, 2000H EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H 例:操作数地址可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 ) 50 30 32000 AH AL 3050 (AX) = 3050H 第3章 80x86的指令系统和寻址方式29 3. 直接寻址方式* * 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES :2000H * 使用变量时,要注意变量的属性 VALUE DB 10 MOV AX, VALUE MOV AX, WORD PTR VALUE * 适于处理单个变量 第3章 80x86的指令系统和寻址方式30 80x86规定: 双操作数指令中,只能有一个操作 数使用存储器方式,因此,经常有一个 变量要送到寄存器。 第3章 80x86的指令系统和寻址方式31 4. 寄存器间接寻址方式* EA在基址寄存器(BX/BP) 或变址寄存器(SI/DI)中 BX, SI, DI (DS) 物理地址 = 16d (DS) + BP (SS) 物理地址 = 16d (SS) + (BP) MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS) + (BP) (BX) (SI) (DI) 第3章 80x86的指令系统和寻址方式32 4. 寄存器间接寻址方式* * 不允许使用AX、CX、DX存放EA MOV AX, CX * SRC 和 DST的字长一致 MOV DL, BX ; BX指示一个字节单元 MOV DX, BX ; BX指示一个字单元 * 适于数组、字符串、表格的处理 第3章 80x86的指令系统和寻址方式33 5. 寄存器相对寻址方式(直接变址寻址)* 例: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么 PA = 35000H 假设(35000H)=1234H, 那么 (AX)=1234H * 适于数组、字符串、表格的处理 有效地址 = (BX) (BP) (SI) (DI) + 8位 16位 位移量 第3章 80x86的指令系统和寻址方式34 6. 基址变址寻址方式* MOV AX, BXDI 或 MOV AX, BX+DI MOV AX, ES:BXSI * 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BXBP MOV AX, SIDI 有效地址 = (BX) (BP) + (SI) (DI) 第3章 80x86的指令系统和寻址方式35 7. 相对基址变址寻址方式* MOV AX, MASKBXSI 或 MOV AX, MASKBX+SI 或 MOV AX, MASK+BX+SI * 适于堆栈处理和二维数组处理 有效地址 = (BX) (BP) + (SI) (DI) + 8位 16位 位移量 第3章 80x86的指令系统和寻址方式36 例:编写一段显示字符串STRING的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR!, 0DH , 0AH , $ COUNT DW 17 DATA ENDS (1)直接寻址 mov dl, string ; mov dl, H mov ah, 2 int 21h ; 显示字符H mov dl, string+1 ; mov dl, A mov ah, 2 int 21h ; 显示字符A . 第3章 80x86的指令系统和寻址方式37 (2)寄存器间接寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx next: mov dl, bx mov ah, 2 int 21h ; 显示一个字符 inc bx loop next ; 循环指令 (3)寄存器相对寻址 mov cx, count ; mov cx, 17 mov si, 0 next: mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令 第3章 80x86的指令系统和寻址方式38 (4)基址变址寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx mov si, 0 next: mov dl, bxsi ; mov dl, bx+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令 (5)DOS显示字符串功能 mov dx, offset string ; string的偏址 dx ; lea dx, string mov ah, 9 int 21h ; 显示一串字符 第3章 80x86的指令系统和寻址方式39 8. 比例变址寻址方式 EA= *比例因子+ (SI) (DI) 8位 16位 位移量 例 MOV EAX,COUNTESI*4 适于处理元素大小为2、4、8字节的数组 第3章 80x86的指令系统和寻址方式40 9. 基址比例变址寻址方式 EA= 基址+ *比例因子 (SI) (DI) 例 MOVE ECX,EAXEDX*8 适于处理元素大小为2、4、8字节的数组 第3章 80x86的指令系统和寻址方式41 10. 相对基址比例变址寻址方式 EA= 基址+ *比例因子+ (SI) (DI) 8位 16位 位移量 例 MOVE ECX,TABLEEAXEDX*8 适于处理元素大小为2、4、8字节的二维数组 第3章 80x86的指令系统和寻址方式42 3.1.2 与转移地址有关的寻址方式 用来确定 转移指令 及 CALL指令 的转向地址。 段内寻址 段间寻址 段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址 以 转移(条件转移/无条件转移)指令 为例 段内:转移指令与转向的目标指令在同一代码段中,(CS)不变 。 段间:转移指令与转向的目标指令在两个代码段中, (CS)变化 。 第3章 80x86的指令系统和寻址方式43 1. 段内直接寻址 转向的有效地址EA =用指令中提供的转向偏移地址 取代IP 物理地址 = 16d (CS) + (IP)新 例: JMP AGAIN (IP)当前 MOV BX, AX AGAIN: 例: JMP NEAR PTR NEXT 近转移 -32768 +32767 JMP SHORT NEXT 短转移 -128 +127 (IP)新 (IP)新 第3章

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论