微机原理与接口技术3_第1页
微机原理与接口技术3_第2页
微机原理与接口技术3_第3页
微机原理与接口技术3_第4页
微机原理与接口技术3_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、1第三章第三章 80868086指令系统指令系统2内内 容容第一节第一节8086寻址方式寻址方式1第二节第二节8086指令系统指令系统 23第一节第一节8086寻址方式寻址方式 执行指令时就要从存储器或寄存器中去取出操作数,对其加工处理后还需要存放到存储器或寄存器中去。 寻找操作数有各种办法,我们称这些办法为寻址方式。“寻址”一词可理解成“找操作数” 4一、数据寻址方式一、数据寻址方式 1立即寻址(Immediate Addressing) 2寄存器寻址(Register Addressing) 3直接寻址(Direct Addressing) 4间接寻址(Indirect Addressin

2、g) 5直接变址寻址(Direct Index Addressing) 6基址变址寻址(Based Index Addressing) 7相对基址变址寻址(Based Index Addressing)51立即寻址立即寻址(Immediate Addressing) 操作数(8位或16位)直接放在指令之中(位于操作码之后),该操作数在指令执行时便可“立即”获得。这种寻找操作数的方法称为立即寻址 例子: MOV BL,8 MOV DX4532H ADD CL,37H 62寄存器寻址寄存器寻址(Register Addressing) 指令所需的操作数在CPU中的某个寄存器内 ; 例子 MOV A

3、L,BL INC AX 7数据在内存中:有效地址数据在内存中:有效地址(Effective Address) 指令中用如下形式来表示存储单元的地址:段基址:偏移地址 偏移地址中可有3个地址分量: 位移量: 是指令中的一个常数; 基址: 放于基址寄存器BX或基址指针寄存器BP之中 变址: 源变址寄存器SI或目的变址寄存器DI之中 83直接寻址直接寻址(Direct Addressing) 操作数的有效地址只包含位移量(此时不能为负值),即在指令中直接给出有效地址。 例子: MOV BX,1000H 等同于 MOV BX,DS:1000H MOV AXVALUE 等同于 MOV,AX,VALUE

4、M OV AX,ES:VALUE 9 4间接寻址间接寻址(Indirect Addressing) 操作数的有效地址存放在由指令指明的寄存器中 ; 例子 MOV AL,BX MOV AX,ES: BX 105直接变址寻址直接变址寻址(Direct Index Addressing) 操作数的有效地址为一个基址寄存器的内容或一个变址寄存器的内容与位移量之和 ; 例子: MOV AX,DATA SI MOV AX, DATA+ DI 116基址变址寻址基址变址寻址(Based Index Addressing) 操作数的有效地址为一个基址寄存器的内容与一个变址寄存器的内容之和 ; 例子 MOV A

5、X,BXSI 本寻址方式也常用于对成组数据的操作,由于它允许改变两个寄存器的内容,因此对二维数组的访问更为方便 127相对基址变址寻址相对基址变址寻址(Based Index Addressing) 操作数的有效地址是指令中指定的基址寄存器的内容、变址寄存器的内容与位移量三者之和 ; 例子: MOV AX,TABLEBX SI ;等于 MOV AX,TABLE BX+ SI 或 MOV AX, TABLE+ BX+ SI13二、地址(指令)寻址方式二、地址(指令)寻址方式 主要是解决控制转移指令中如何实现程序的正确转移 ; 程序顺序执行时,CPU根据CS的内容和IP的内容来计算指令的物理地址

6、; 程序在转移时,不再继续接着从下一个存储单元去取指令,而是跳到另外一个不和前面连续的存储单元去取指令,该存储单元的地址称为转移地址 14转移地址转移地址 转移地址由转移段基值和转移有效(或偏移)地址组成 一个段最大是64 kB。指令在此范围内的转移,称为段内转移,否则称为段间转移。 151段内寻址方式段内寻址方式 (1)段内直接寻址(Intrasegment Direct Addressing) 偏移量可以以立即寻址方式得到。例子: JMP SHORT LOP: 短跳转:-127至+128 JMP NEAR PTR CHECK近跳转:- 32768+32767 (2)段内间接寻址(Intra

7、segnlent Ineirect Addressing) 偏移量可以从六种方式得到:例子 JMP BX JMP WORD PTR ADDR1 JMP WORD PTRBX+ ARRY 162段间寻址方式段间寻址方式 段间寻址方式的转移地址超出当前指令代码段的范围; 需要改变指令指针寄存器IP的内容,而且还需要改变代码段寄存器CS的内容。 所以,对有关指令,其操作数要同时指示转移地址的转移段基值和转移有效地址。 17(1)段间直接寻址段间直接寻址(Intersegement Direct Addressing) 在操作数中直接给出转移段基值和转移有效地址 ; JMP FAR PTR GAMMA

8、 设( CS)=2000H,(IP)=1000H,GAMMA= 3000:4000,: 起始地址为: 20000H +1000H= 21000H 转移地址为: 30000H+ 4000H= 34000H18(2)段间间接寻址段间间接寻址(Intersegement Indirect Addressing) 在段间间接寻址方式中,指令中给出存放地址的存储单元地址 ; 从这一存储单元起连续占用4个字节,前两个字节(低)存放转移有效地址(偏移量),后两个字节(高)存放转移段基值 例子:JMP DWORD PTR DELTABX 19第二节第二节8086指令系统指令系统 指令类型:五类 数据传送; 算

9、术运算; 逻辑指令; 串处理; 控制转移20一、数据传送指令(一、数据传送指令(Data transfer) 通用数据传送指令: 输入、输出指令; 目标地址传送指令; 标志传送指令。211:通用数据传送指令:通用数据传送指令 通用传送指令包括MOV( -般传送),PUSH和POP(堆栈操作),XCHG(交换)和XLAT(查表转换)指令。 基本格式 MOV dest, src; (dest)-(src) 注意:不能用一条MOV指令实现以下传送: 存储单元之间的传送; 立即数至段寄存器的传送; 段寄存器之间的传送。22堆栈操作指令堆栈操作指令 PUSH (Push word onto stack)

10、 POP (Pop word off stack) 指令格式及操作: PUSH src;(SP)=(SP)-2 (SP)+1:(SP)=(src) POP dest;(dest)=(SP)+1:(SP) (SP)=(SP)+2232输入输出指令输入输出指令(Input and Output) 两条。 输入指令IN: 用于从外设端口接收数据, 输出指令OUT向端口发送数据。 无论接收到的数据或准备发送的数据都必须在累加器AX(字)或AL(字节)中,所以这是两条累加器专用指令 24(1) IN(lnput byte or word) 指令格式及操作: IN acc,port ;( acc)一(pr

11、ot) 端口地址:用一个8位立即数表示,此时最多允许寻址256个端口(0FFH)。 端口地址:也可以放在16位寄存器DX中,则端口总数最多可达64 kB(O FFFFH)。 例子: IN AL, data8 IN AX, data8 IN AL, DX25(2) OUT(Output byte or word) 指令格式及操作: OUT port, acc ;( prot)-( acc); 端口寻址与IN指令相同; 例子: OUT data8, AL OUT data8, AX OUT DX, AL OUT DX, AX263目标地址传送指令(目标地址传送指令(Address-object t

12、ransfer) 把地址指针写入寄存器:近地址指针指令LEA BXBUFFER ; 把buffer的地址写入BX 把地址指针写入寄存器对:远远地址指针。 LDS SI,O010H : 地址写入 DS:SI LES DI,BX : 地址写入 ES:DI 274标志传送指令标志传送指令(Flag register transfer) (1) LAHF(Load AH from flags) 指令将标志寄存器FIAGS中的5个标志位,即符号标志SF、零标志ZF、辅助进位标志AF、奇偶标志PF以及进位标志CF分别传送到累加器AH的对应位 ; (2) SAHF(Store AH into flags)

13、:相反操作;28 (3) PUSHF(Push flags onto stack) 将标志寄存器flAGS(16位)推入堆栈。 (4) POPF(Pop flags off stack) 它将堆栈内容弹出到标志寄存器 29二、算术运算指令二、算术运算指令( Arithmetic) 算术运算指令共有以下五组: 加法运算指令; 减法运算指令; 乘法运算指令; 除法运算指令; 转换指令。301加法指令加法指令(Addition) 加法指令包括 普通加法: ADD DX,SI ;DX+SI 带进位加法ADC CX,300 ;CX+300+cf(进位标志) 加1INC DL ;DL+1 ASCII调整(

14、AAA) 十进制调整(DAA) 312减法指令减法指令(Subtraction) 七条减法指令, 普通减法: SUB AL,37H ;AL-37H 带借位减: SBB CX,DX ;CX-DX-CF 减1: DEC CX ;CX-1 求补:NEG AX ;0-AX 比较: CMP CX,DI ;CX-DI,但结果只影响标志 减法的ASCII调整(AAS) 十进制调整(DAS) 32 3乘法指令乘法指令(Multiplication) 三条: 无符号数乘法指令 MUL AL ;AL乘AL,送AX MUL BX ;AX乘BX,送DX:AX 带符号数乘法指令(IMUL) :指令将两个操作数均按符号数

15、处理。这是它与MUL指令的区别所在 乘法的ASCII调整指令(AAM) 334除法指令除法指令(Division) 三条: 无符号数除法指令(DIV) DIV BL ;AX除以BL,商在AL中,余数在AH中 DIV CX;DX:AX除以CX,商在AX中,余数在DX中 带符号数除法指令IDIV:其操作与DIV指令类似,区别在于IDIV指令将两个操作数作为带符号数对待 ; 除法的ASCII调整指令(AAD)。 345转换指令转换指令 两条:用于扩展带符号数的字长 CBW(ConveIt byte to word): CBW指令将一个字节(8位) AL转换成为字(16位) AH 。 CWD指令将一个

16、字(16位)(AX)转换成为双字(32位)(DX) 。35三、逻辑运算和移位指令三、逻辑运算和移位指令 这一类指令包括以下几组: 逻辑运算指令 移位指令 循环移位指令361逻辑运算指令逻辑运算指令 五条:对操作数中的各个位分别进行布尔运算,前四条影响标志位。 逻辑“与”: AND CXDI ; CX DI送CX 测试,:TEST SI,CX:SI CX,不送SI 逻辑“或 “OR BL,OF6H;BLF6H,送BL 逻辑“异或”:XOR AX,AX ; 用于AX清零 逻辑“非”: NOT CX ;16位寄存器求反 372移位指令移位指令 移位操作可以是向左或向右移一位,也可以移多位。当要求移位

17、时,指令规定移动位数必须放在CL寄存器中 逻辑左移SHL/算术左移SAL:SHL SI,CL; 逻辑右移SHR/算术右移SAR : SHR BL,1 ;寄存器逻辑右移1位 移位指令的操作对象可以是一个8位或16位的寄存器或存储器,38393循环移位指令循环移位指令( Rotate) 四条 不带进位标志CF左循环移位指令ROL:ROL BH,1 不带进位标志CF右循环移位指令ROR,ROR BH,CL 带进位的左循环移位指令RCL :RCL BYTE PIR ARRAY DI ,1 带进位的右循环移位指令RCR。RCR WORD PTR SI+ BX+3,1 4041四、串操作指令四、串操作指令

18、( String manipulation) 串操作指令的操作对象不只是单个的字节或字,而是内存中地址连续的字节串或字串。在每次基本操作后,能够自动修改地址为下一次操作做好准备。串操作指令还可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完成预定的循环次数。 串操作指令共有以下五条: MOVS 串传送指令 CMPS 串比较指令 SCAS 串扫描指令 LODS 串装入指令 STOS 串送存指令42串操作指令的共同特点:串操作指令的共同特点: (1)源操作数:总是DS:SI寄存器寻址,允许段超越;目的操作数用ES: DI寄存器寻址。不允许段超越。 (2)每一次操作以后修改地址指针,是增量还

19、是减量决定于方向标志DF。 (3) 重复前缀REP,则指令规定的操作重复进行,重复循环的次数由CX寄存器决定。 (4)若串操作指令的基本操作影响零标志ZF(如CMPS,SCAS),则可加重复前缀REPE(即REPZ)或REPNE(即REPNZ),此时操作重复进行的条件不仅要求(CX)O,而旦同时要求ZF的值满足重复前缀中的规定 (5)串操作汇编指令的格式可以写上操作数,也可以只在指令助记符后加上字母“B”(字节操作)或“w”(字操作)。431MOVS(Move string) MOVS是字符串传送指令,它将一个字节或字从存储器的某个区域传送到另一个区域,然后根据方向标志DF自动修改地址指针。

20、MOVS的基本操作: (ES):(DI) (DS):(SI) 示例: MOVS BUFFER2,ES:BUFFER1 REP MOVS WORD PIR DI , SI REP MOVSB MOVSW44使用举例使用举例 将数据段中首地址为BUFFER1的200个字节传送到附加段首地址为BUFFER2的内存区中。使用字节串传送指令的程序如下: LEA SI,BUFFER1 ;(SI)一源串首址指址 LEA DI,BUFFER2 ;(DI)一目标串首址指针 MOV CX,200 ;(Cx)一字节串长度 CLD ;清方向标志DF REP MOVSB ;传送200个字节 HLT ;停止452.CMP

21、S(Compare string) 该指令将两个字符串中相应的元素逐个进行比较(即相减),但不将比较结果送回目的操作数,而反映在标志位上。 CMPS指令对大多数标志位有影响,如SF,ZF,AF,PF,CF和OF。 CMPS与其他指令不同,指令中的源操作数在前,而目的操作数在后 REPE CMPSB ;如相等,重复进行比较 463SCAS(Scan string) 在一个字符串中搜索特定的关键字。字符串的起始地址只能放在( ES: DI)中,不允许段超越。待搜索的关键字必须放在累加器AL或AX中 指令可以加上重复前缀REPE或REPNE REPNE SCASB ;如未找到,重复扫描 474LOD

22、S( Load string) 它将一个字符串中的字节或字逐个装入累加器AL或AX。 指令的基本操作为: 字节串装入(AL) (DS):(SI) 字串装入(AX) (DS):(SI) LODS指令不影响标志位; 示例:LODSB 485STOS( Store string) 该指令将累加器AL或AX的值送存到字符串中的某个位置上。 指令的基本操作为: 字节串装入(ES):(DI)一(AL) 字串装入(ES):(DI)一(AX) STOS指令对标志位没有影响。指令若加上重复前缀REP,则操作将一直重复进行下去,直到(CX)=0。 示例:REP STOSW 49五、控制转移指令(五、控制转移指令(

23、Control transfer) 转移指令; 循环控制指令; 过程调用指令; 中断指令。501转移指令转移指令 (1)无条件转移指令JMP( Jump) 段内直接转移 JMP NEXT ;近标号:16位地址 段内直接短转移 JMP SHORT target ;短标号:8位 段内间接转移 JMP AX ;IPAX,CS不变 段间间接转移 JMP DWORD PTR BP DI (2)条件转移指令Jcc:为短转移 JS Xl;如为负,转Xl JZ X2;如为零,转X2512循环控制指令循环控制指令 (1) LOOP:LOOP NEXT (2) LOOPE/LOOPZ(Loop if equal/

24、Loop if zero) (3) LOOPNE/LOOPNZ(Loop if not equal/Loop if not zero) 计数器为CX,为短地址寻址523过程调用指令过程调用指令 一些程序段需要在不同的地方多次反复地出现,则可以将这些程序段设计成为过程(相当于子程序),每次需要时进行调用 被调用的过程可以在本段内(近过程),也可在其他段(远过程)。调用的过程地址可以用直接的方式给出,也可用间接的方式给出。过程调用指令和返回指令对标志位都没有影响。53(1) CALL(Call a procedure ) 段内直接调用 段内间接调用 CALL BYTE PTR BX 调用一个近过程 段间直接调用 段间间接调用 CALL WORD PIR BX 调用一个远过程 操作共同特点:先将IP内容压入堆栈,然后根据操作数修改IP内容。54 (2)RET(Return from procedure) 过程体中一般总是包含返回指令RET,它将堆栈中的断点弹出,使

温馨提示

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

评论

0/150

提交评论