文档详情

IBM-PC汇编语言程序设计.ppt

壹****1
实名认证
店铺
PPT
940.60KB
约48页
文档ID:574755679
IBM-PC汇编语言程序设计.ppt_第1页
1/48

第3章 80x86的指令系统和寻址方式1编程工具编程工具v第三章 80x86指令系统和寻址方式v第四章 汇编语言程序格式 第3章 80x86的指令系统和寻址方式2第第3章章 80x86的指令系统和寻址方式的指令系统和寻址方式3.1 程序语言简介程序语言简介3.2 80x86的寻址方式3.3 程序占有的空间和时间3.4 80x86的指令系统 第3章 80x86的指令系统和寻址方式33.1 程序语言简介程序语言简介(1) 指令、指令系统和程序指令、指令系统和程序(2) 机器码和机器语言机器码和机器语言(3) 助记符和汇编语言助记符和汇编语言(4) 高级语言高级语言(5) 8086/8088指令格式简介指令格式简介 第3章 80x86的指令系统和寻址方式4l CPU是一个可以完成一些基本操作的电子器件是一个可以完成一些基本操作的电子器件l 用编码表示用编码表示CPU的的一个基本操作,称为一条一个基本操作,称为一条指令指令l 全部指令集称为全部指令集称为指令系统指令系统l 指令系统反映指令系统反映 CPU的基本功能的基本功能,, 是硬件设计人员和程序员能见到的是硬件设计人员和程序员能见到的机器的主要属性机器的主要属性,, 是硬件构成的计算机系统是硬件构成的计算机系统向外部世界提供的直接界面向外部世界提供的直接界面。

1) 指令、指令系统和程序指令、指令系统和程序 第3章 80x86的指令系统和寻址方式5l 程序程序是为要解决的问题编写出来的指令集合是为要解决的问题编写出来的指令集合l 一个一个CPU的指令系统是固定的,的指令系统是固定的, 不同类型的不同类型的CPU其指令系统不同其指令系统不同; 同一系列向上兼容同一系列向上兼容l 用户为解决自己的问题所编写的程序称为用户为解决自己的问题所编写的程序称为源程序源程序 第3章 80x86的指令系统和寻址方式6(2) 机器码和机器语言机器码和机器语言l 应用:显示设备简单的单片机应用:显示设备简单的单片机 家用电器、固化在家用电器、固化在ROM上的程序等上的程序等l 机器语言机器语言是机器码及其使用的一组规则是机器码及其使用的一组规则l 用机器语言编写的程序称为用机器语言编写的程序称为目标程序目标程序l 机器语言特点:机器语言特点:CPU能能直接识别直接识别的唯一语言的唯一语言 面向机器,可直接被计算机执行面向机器,可直接被计算机执行 执行速度快,占用内存空间小执行速度快,占用内存空间小 编程效率低、可读性差、可移值性差编程效率低、可读性差、可移值性差l 用二进制数编码表示的指令,称为用二进制数编码表示的指令,称为机器指令机器指令或或机器码机器码。

第3章 80x86的指令系统和寻址方式7例例 将地址为将地址为2000H和和2001H 的两内存单元内容相加,的两内存单元内容相加, 结果存在地址结果存在地址2002H单元中,程序如下:单元中,程序如下: A0 00 20A0 00 2002 06 01 2002 06 01 20A2 02 20A2 02 20数据暂存器数据暂存器PSW标志标志寄存器寄存器控制电路控制电路指令译码器指令译码器AXBXCXDXSIDIBPSP寄存器组寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地址总线地址总线AB数据总线数据总线DB控制总线控制总线CB地地址址译译码码器器IP地地址址加加法法器器DSESSSCS1010 00000000 00000010 00000000 00100000 01100000 00010010 00001010 00100000 00100010 0000A0A0000020200202060601012020A2A202022020MOV 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 , var1ADD AL , var2MOV var3 , AL 第3章 80x86的指令系统和寻址方式10l 汇编语言和机器语言编写的程序:汇编语言和机器语言编写的程序:4面向机器,反映机器运行的实际过程面向机器,反映机器运行的实际过程, 与计算机的硬件结构和指令系统密切相关与计算机的硬件结构和指令系统密切相关4算法是用计算机的指令算法是用计算机的指令, 寄存器等描述寄存器等描述,, 要了解要了解CPU的的编程结构、寻址方式、指令系统才能设计程序编程结构、寻址方式、指令系统才能设计程序4占内存少,执行速度快占内存少,执行速度快4编写繁琐、调试困难编写繁琐、调试困难l汇编语言相对于机器语言编写的程序:汇编语言相对于机器语言编写的程序: 汇编语言程序,易读易懂,便于修改。

汇编语言程序,易读易懂,便于修改 第3章 80x86的指令系统和寻址方式11(4) 高级语言高级语言l 高级语言高级语言是独立于机器、面向过程或对象的语言是独立于机器、面向过程或对象的语言 算法是按照人的思维方式给出,比较接近人的自然语言算法是按照人的思维方式给出,比较接近人的自然语言上例上例 高级语言程序段为:高级语言程序段为: var3 = var1 + var2l 由由翻翻译程序译程序将高级语言源程序翻译目标程序,将高级语言源程序翻译目标程序, 即用机器码表示的程序,机器才能执行即用机器码表示的程序,机器才能执行不同类型机器由于指令系统不同,它们的编译程序不同不同类型机器由于指令系统不同,它们的编译程序不同)l Fortran、、 Basic、、 C等均是高级语言等均是高级语言l 使用高级语言编程,效率高,可读性、可移植性强使用高级语言编程,效率高,可读性、可移植性强 第3章 80x86的指令系统和寻址方式12(1) 操作码操作码指明指明CPU要执行什么样的操作要执行什么样的操作是一条指令必不可少的部分,用助记符表示是一条指令必不可少的部分,用助记符表示。

l 指令格式指令格式 例例 ADD AL,,10H数据传送数据传送算术运算算术运算逻辑运算逻辑运算串操作串操作控制转移控制转移处理机控制处理机控制 按功能按功能指令分六类指令分六类(2) 操作数操作数指明参与操作的数据或数据所在的地方指明参与操作的数据或数据所在的地方了解操作数的了解操作数的来源来源、、个数、类型个数、类型5)8086/8088指令格式简介指令格式简介 操作码操作码 操作数操作数 ... 操作数操作数 第3章 80x86的指令系统和寻址方式13q 操作数来源操作数来源 指明操作数所在的地方指明操作数所在的地方有三种来源:有三种来源:①① 操作数在指令中,称操作数在指令中,称立即数操作数立即数操作数 如如 MOV AL , 9 ②② 操作数在寄存器中,称操作数在寄存器中,称寄存器操作数寄存器操作数指令中给出用符号表示的寄存器名指令中给出用符号表示的寄存器名 如如 MOV AL , 9 ③③ 操作数在内存单元中,称操作数在内存单元中,称存储器操作数存储器操作数或或内存操作数内存操作数 指令中给出该内存单元的地址。

用指令中给出该内存单元的地址用[ ]表示存储器操作数表示存储器操作数 如如 MOV AL , [ 2000H ] 第3章 80x86的指令系统和寻址方式14q 操作数个数操作数个数 按指令格式中,操作数个数的多少分为四类:按指令格式中,操作数个数的多少分为四类:无操作数无操作数: 指令只有一个操作码,没有操作数指令只有一个操作码,没有操作数单操作数单操作数: 指令中给出一个操作数指令中给出一个操作数双操作数双操作数: 指令中给出两个操作数指令中给出两个操作数三操作数:三操作数:指令中给出两个操作数指令中给出两个操作数 第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的指令系统和寻址方式203.2 80x86的寻址方式v与数据有关的寻址方式与数据有关的寻址方式v与转移地址有关的寻址方式与转移地址有关的寻址方式 第3章 80x86的指令系统和寻址方式213.2.1 与数据有关的寻址方式与数据有关的寻址方式 以以 MOV 指令为例指令为例 1. 立即寻址方式立即寻址方式* —— 操作数在指令中给出操作数在指令中给出 MOV AL, 5 MOV AX, 3064H* 只能用于只能用于SRC字段字段* SRC 和和 DST的字长一致的字长一致   MOV AH, 3064H适用于给寄存器赋初值适用于给寄存器赋初值 第3章 80x86的指令系统和寻址方式222. 寄存器寻址方式寄存器寻址方式* —— 操作数在指定的寄存器中操作数在指定的寄存器中 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 ,816位/32位寻址时有效地址的四种成分的组成 第3章 80x86的指令系统和寻址方式25默认段选择规则访问类型所用段及段寄存器缺省选择规则指 令代码段 CS用于取指堆 栈堆栈段 SS所有堆栈的进栈与出栈任何用ESP或EBP作为基址寄存器的访问局部数据数据段 DS除相对于堆栈以及串处理指令的目的串以外的所有数据访问目 的 串附加段 ES串处理指令的目的串 第3章 80x86的指令系统和寻址方式26段跨越前缀段跨越前缀 用于改变系统所指定的默认段选择规则有三种情况不允许使用段跨越前缀:1、串处理指令的目的串必须用ES2、PUSH指令的目的和POP指令的源必须用SS段3、指令必须存放在CS段中 第3章 80x86的指令系统和寻址方式27访问存储器的方式访问存储器的方式 默认的默认的段寄存器段寄存器可跨越的可跨越的段寄存器段寄存器偏移地址偏移地址取指令 CS 无 IP堆栈操作 SS 无 SP一般数据访问 DS CS ES SS 有效地址EABP作为基址的寻址 SS CS DS ES BP串操作的源操作数 DS CS ES SS SI串操作的目的操作数 ES 无 DI段段 寄寄 存存 器器 的的 使使 用用 规规 定定 第3章 80x86的指令系统和寻址方式283. 直接寻址方式直接寻址方式* —— 有效地址有效地址EA由指令直接给出由指令直接给出 有效地址有效地址EA:操作数的偏移地址:操作数的偏移地址 物理地址物理地址PA = 16d   (DS) + EA 例例:MOV AX, [2000H] EA=2000H, 假设假设(DS)=3000H, 那么那么(PA)=32000H 例例:操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示 MOV AH, VALUE ( VALUE DB 10 )5030 32000AH AL3050(AX) = 3050H 第3章 80x86的指令系统和寻址方式293. 直接寻址方式直接寻址方式** 隐含的段为数据段隐含的段为数据段 DS* 可使用可使用段跨越前缀段跨越前缀 MOV AX, ES :[2000H]* 使用变量时,要注意变量的属性使用变量时,要注意变量的属性 VALUE DB 10   MOV AX, VALUE   MOV AX, WORD PTR VALUE* 适于处理单个变量适于处理单个变量 第3章 80x86的指令系统和寻址方式3080x86规定:规定:    双操作数指令中,只能有一个操作双操作数指令中,只能有一个操作数使用存储器方式,因此,经常有一个数使用存储器方式,因此,经常有一个变量要送到寄存器。

变量要送到寄存器 第3章 80x86的指令系统和寻址方式314. 寄存器间接寻址方式寄存器间接寻址方式* ——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的指令系统和寻址方式324. 寄存器间接寻址方式寄存器间接寻址方式** 不允许使用不允许使用AX、、CX、、DX存放存放EA   MOV AX, [CX]* SRC 和和 DST的字长一致的字长一致 MOV DL, [BX] ; [BX]指示一个字节单元指示一个字节单元 MOV DX, [BX] ; [BX]指示一个字单元指示一个字单元* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理 第3章 80x86的指令系统和寻址方式335. 寄存器相对寻址方式(直接变址寻址)寄存器相对寻址方式(直接变址寻址)*例例: MOV AX, COUNT[SI] 或或 MOV AX, [COUNT+SI] 假设假设(DS)=3000H, (SI)=2000H, COUNT=3000H 那么那么 PA = 35000H 假设假设(35000H)=1234H, 那么那么 (AX)=1234H* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理 有效地址有效地址 =(BX)(BP)(SI)(DI)+8位位16位位位移量位移量 第3章 80x86的指令系统和寻址方式346. 基址变址寻址方式基址变址寻址方式* MOV AX, [BX][DI] 或或 MOV AX, [BX+DI] MOV AX, ES:[BX][SI]* 适于数组、字符串、表格的处理适于数组、字符串、表格的处理* 必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合   MOV AX, [BX][BP]   MOV AX, [SI][DI]有效地址有效地址 =(BX)(BP)+(SI)(DI) 第3章 80x86的指令系统和寻址方式357. 相对基址变址寻址方式相对基址变址寻址方式* MOV AX, MASK[BX][SI] 或或 MOV AX, MASK[BX+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, string[si] ; 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, [bx][si] ; 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的指令系统和寻址方式398.比例变址寻址方式比例变址寻址方式 EA= *比例因子比例因子+(SI)(DI)8位位16位位位移量位移量例MOV EAX,COUNT[ESI*4]适于处理适于处理元素大小为元素大小为2、、4、、8字节的字节的数组数组 第3章 80x86的指令系统和寻址方式409. 9. 基址比例变址寻址方式基址比例变址寻址方式 EA= 基址基址+ *比例因子比例因子(SI)(DI)例MOVE ECX,[EAX][EDX*8]适于处理适于处理元素大小为元素大小为2、、4、、8字节的字节的数组数组 第3章 80x86的指令系统和寻址方式4110. 10. 相对基址比例变址寻址方式相对基址比例变址寻址方式 EA= 基址基址+ *比例因子比例因子+(SI)(DI)8位位16位位位移量位移量例MOVE ECX,TABLE[EAX][EDX*8]适于处理适于处理元素大小为元素大小为2、、4、、8字节的二维字节的二维数组数组 第3章 80x86的指令系统和寻址方式423.1.2 与转移地址有关的寻址方式与转移地址有关的寻址方式 用来确定用来确定 转移指令转移指令 及及 CALL指令指令 的转向地址。

的转向地址段内寻址段内寻址段间寻址段间寻址段内直接寻址段内直接寻址段内间接寻址段内间接寻址段间直接寻址段间直接寻址段间间接寻址段间间接寻址以以 转移(条件转移转移(条件转移/无条件转移)指令无条件转移)指令 为例为例段内段内::转移指令与转向的目标指令在同一代码段中转移指令与转向的目标指令在同一代码段中,(,(CS)不变段间:段间:转移指令与转向的目标指令在两个代码段中转移指令与转向的目标指令在两个代码段中, (CS)变化 第3章 80x86的指令系统和寻址方式431. 段内段内直接寻址直接寻址 转向的有效地址转向的有效地址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章 80x86的指令系统和寻址方式442. 段内段内间接寻址间接寻址 转向的有效地址转向的有效地址EA是一个寄存器或存储单元的内容。

是一个寄存器或存储单元的内容 ((可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到)) 物理地址物理地址 = 16d   (CS) + EA 例:例: (BX)=1256H (SI)=528EH TABLE=20A2H (DS)=2000H (232F8H)=3280H (264E4H)=2450H JMP BX ; (IP)=1256H JMP TABLE[BX] JMP WORD PTR TABLE[BX] ; (IP)=3280H JMP [BX][SI] JMP WORD PTR [BX][SI] ; (IP)=2450H 第3章 80x86的指令系统和寻址方式453. 段间直接寻址段间直接寻址 用指令中提供的转向段地址和偏移地址取代用指令中提供的转向段地址和偏移地址取代CS和和IP。

物理地址物理地址 = 16d   (CS) + (IP) 例例:code1 segment …… jmp far ptr next ……code1 ends code2 segment …… next: …... …… code2 ends 第3章 80x86的指令系统和寻址方式464. 段间间接寻址段间间接寻址 用存储器中的两个相继字的内容取代用存储器中的两个相继字的内容取代CS和和IP存储单元的地址可用除立即数和寄存器以外的任何一种存储单元的地址可用除立即数和寄存器以外的任何一种 数据寻址方式得到数据寻址方式得到)) 物理地址物理地址 = 16d   (CS) + (IP) 例:例: JMP DWORD PTR [INTERS+BX] 第3章 80x86的指令系统和寻址方式473.3 程序占有的空间和时间程序占有的空间和时间空间空间 80x86的机器指令是可变字节指令,即不同指令的机器指令是可变字节指令,即不同指令或不同寻址方式的机器指令长度不同或不同寻址方式的机器指令长度不同时间时间 一条指令的执行时间是一条指令的执行时间是取指令取指令、、取操作数取操作数、、执行时执行时间间及及传送结果传送结果各个阶段所需时间的总和。

各个阶段所需时间的总和 频率与时钟周期(节拍)的关系频率与时钟周期(节拍)的关系 频率(频率(Mhz)=)= 1时钟周期时钟周期(T) 第3章 80x86的指令系统和寻址方式48 判断程序质量的标准判断程序质量的标准l l 程序的正确性程序的正确性 l l 程序的可读性程序的可读性 清晰清晰 l l 程序的执行时间程序的执行时间 l l 程序所占内存大小程序所占内存大小效率效率 。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档