寻址方式与指令系统部分内容总结_第1页
寻址方式与指令系统部分内容总结_第2页
寻址方式与指令系统部分内容总结_第3页
寻址方式与指令系统部分内容总结_第4页
寻址方式与指令系统部分内容总结_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、寻址方式与指令系统部分内容总结一、寻址方式小结:1、三种类型操作数立即操作数、寄存器操作数、器操作数。2、三种类型操作数特点(1)立即操作数可以使用立即操作数指令有:数据传送指令、算术运算指令(乘、除运算指令除外)、立即数只能作为源操作数,不能作为目标操作数。逻辑运算指令等。(2)寄存器操作数寄存器操作数可能存放在:8086 /8088 的通用寄存器、地址指针或变址寄存器以及段寄存器。对段寄存器ES 、DS 、SS 进行赋值,不能将立即数直接送段寄存器,要将立即数送通用寄存器,再从通用寄存器送段寄存器。CS 一般不用赋值。隐含操作数某些指令规定只能使用指定操作数寄存器, 从汇编形式看,似乎没有

2、操作数,实际隐含某些特定寄存器操作数。该寄存器可能是:累加器 、通用寄存器、变址寄存器、某些段寄存器。(3)器操作数器操作数可能存放在一个、二个、或四个操作数类型分别为:字节、字、双字。器单元中。器操作数可以作为源操作数,也可以作为目标操作数。但不允许源操作数、目标操作数同时为器操作数。5 种直接寻址器选址方式主要区别是有效地址 EA 的方式不同。器操作数寻址方式:寄存器间接寻址指令 指令 或隐含 操作数 寄存 器A AA,A AD, AAM .AAS A L,A HC BW, CWD AL, AH或 AX ,DX D AA, DAS AL IN ,OU TAL或 AX MU L,IM UL,

3、 DIV ,IDI VAL, AH或 AX ,DX LA HF, SAH FAH LE SES LD SDS 移位 及循环 移位指 令CL 串操作 指令 C X,S I,D IX LAT A L,B X相对寄存器寻址基址变址寻址相对基址变址寻址3、三种寻址方式总览4、需说明的几个问题:1、指令中使用方括号的地址表达式必须遵循下列规则:立即数可以出现在方括号内,表示直接地址;只有 SI、BP、DI、BX 可以出现在方括号内,它们可以单独出现,也可以相加后出现,或以寄存器与立即数相加的形式出现,但 BX 和 BP 或 SI 和 DI 不能同时出现在同一个 内。方括号有相加的含义,下面几种写法都是等

4、价的:1200BXSIBXBX+ SISI* 方括号内包含 BP,则隐含使用 SS 提供2、其它寻址方式1)隐含寻址:指令中不指明操作数址;其余隐含情况均使用 DS 提供址。2)I/O 端口寻址:8086 有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为 00FFH 和0FH。转移类指令寻址一条指令有几种寻址方式例:MOVAX,SI5、寻址方式常见错误判别DS,2010H;错 不能将立即直接给段寄存器.MOV. PUSH3. MOV;错 不能对字节进行堆栈操作ALDX,SP;错,无SP寻址方式,器地址只能通过 BX,BP,SI,DI 寻址;错端口地址大于 FFH 应用 DX 寻址端口;

5、对;错 移位次数大于 1 时,应将其放于 CL 中.INAL,0A00H.XCHG CL,CH6 .SHR7.MOV8.ADD9.OUTAX,3AX,ES:BX;对BP+DI,1000H ;错 两个操作数不能均为器;错 端口只能通过 AL 或 AX 传送数据DX,CL操作数载体寻址方式名称典型指令示例说明指令内立即数寻址MOV AX,100H源数据 100H 为立即寻址寄存器寄存器直接寻址MOV AX,100H目的寄存器 AX 为寄存器直接寻址器器直接寻址MOV AX,100H源数据地址100H为器直接寻址寄存器间接寻址MOV AX,SI源数据地址SI为寄存器间接寻址寄存器相对寻址MOV AX

6、,SI+10源数据地址SI+10为寄存器相对寻址基址变址寻址MOV AX,BXSI源数据地址 BXSI为基址变址寻址相对基址变址寻址MOV AX,BXSI+10源数据地址 BXSI+10为相对基址变址寻址;错;错CBW 为无操作数指令,默认操作数 AL目的操作数不能为立即数无SP+DI寻址,必须是基址 (BX 或 BP)+变址(SI 或 DI)10.CBW11.ADDMOVMOVLEABH03ECH,AXBX,SI+DI;错;错 无AX寻址,器地址只能通过 BX,BP,SI,DI 寻址DI,AXBX,1000H;错 LEA 源操作数应为一个器操作数,不能是立即数器操作数,不能是寄存器;错 LE

7、A 源操作数应为一个15.LEADX,DI16.MOVAX,BX+BP;错 无BP+BX寻址,必须是基址(BX 或 BP)+变址(SI 或 DI);错 双操作数不能均为器17.CMP BX,SI;错 MUL 为单操作数指令,且源操作数不能为立即数;错 端口只能通过 AL 或 AX 传送数据18.MULOUTANDSAL24HDX,BX0FH,AL;错 目的操作数不能为立即数;错 移位次数大于 1 时,应将其放于 CL 中;错 应该给出属性,是 B 还是W DWORD PTRBX+SI ;对BX,CXMOVSJMP;错 AAA 是一条指令.不能作为符号地址;对JNZJMPSBBAAANEXTAX

8、,DX;错 DX 不能间接寻址6、寻址方式综合例:1 已知(BX)=1000H,(SI)=2000H,请确定使用 BX 和SI 的基址变址寻址的有效地址。解:有效地址 EA=(BX)+(SI)= 1000H + 2000H = 3000H2用位移量为 0524H 的直接寻址方式把元。写出相应的汇编语言程序。器中的一个字与数 2A59H 相加,并把结果送回该单解: MOV ADDMOVAX,2A59H AX,0524H0524H,AX;将立即数 2A59H 送入AX 寄存器;将(DS:0524H)+AXAX;AX(DS:0524H)3 已知:寄存器(DS)=3000H;(BX)=0100H;(S

9、I)=0002H ;器地址单元(31202H)=0B7H;(31203H)=4CH。对于指令 MOV AX,1100HBXSI,问:1)源操作数属于哪种寻址方式? 2)物理地址是多少?3)指令执行完后 AX 寄存器的内容是多少?解: 1)为相对基址变址寻址2)EA=1100H+(BX)+(SI)=1100H物理地址=(DS)16 + EA=30000H 3)AX=4CB7HHH=1202HH=31202H4设(DS)=3000H,(SI)=2000H,COUNT=500H,第 32500H 单元内容为 34H,第 32501H 单元内容为 12H,指令 MOV AX,COUNTSI(也可表示为

10、 MOV AX,SICOUNT,其中 COUNT 为 16 位位移量的符号地址)中源操作数寻址方式及指令执行结果。解:源操作数为寄存器相对寻址方式,物理地址=30000H(2000H500H)=32500H;AX=1234H。5(1)(2)下列指令中源操作数和目的操作数的寻址方式,并说明操作数类型(字节或字数据)。MOV SI,1000H ;MOV BL,1000H ;解:源:立即寻址,目的:寄存器寻址,字数据解:源:直接寻址,目的:寄存器寻址,字节数据(3)(4)(5)6(1)(2)(3)(4)(5)(6)(7)(8)(9)MOVMOV MOVBXH,CX ; 解:源:寄存器寻址,目的:基址

11、寻址,字数据BYTE PTR BPSI,100 ;解:源:立即寻址;目的:基址变址寻址,字节数据AX,BX+DIH ;解:源:相对基址变址寻址,目的:寄存器寻址,字数据下列各指令的错误原因。MOV MOV MOV MOV MOV MOV MOVADDAL,BX CL,200HCS,AX;解:源、目的操作数类型不同;解:源、目的操作数类型不同; 解:CS 不能作为目的寄存器DS,3000H ;解:8086 不允许直接为段寄存器赋值,应该通过寄存器辗转设置。 DI,SI ;解:目的操作数段寄存器 ES 不能缺省。AL,CX ;解:寄存器间接寻址不能使用 CX 寄存器,只能用 BX,SI,DI。 A

12、L,SIDI ;解:基址加变址寻址中不能同时使用两个变址寄存器BX,DS ; 解:DS 段寄存器不能当通用寄存器用,故不可以出现在 ADD 指令中。INC BX;解:内存数据使用 INC 指令时必须用“BYTE PTR”或“WORD PTR”数据属性。(10) SHL AX,5指令小结:;解:移位指令中的移位次数多于 1 次时必须使用 CL 存放移位次数。1、数据传送指令2 算术运算类指令指令类型指令功能指令书写格式加运算自增 1(加 1)INC d加法(不带进位)ADD d, s带进位的加法ADC d, s对加法的十进制调整DAA (紧跟在加法指令后面)加法的 ASCII 码调整AAA (紧

13、跟在加法指令后面)减运算自减 1(减 1)DEC d减法SUB d, s带借位的减法SBB d, s对减法的十进制调整DAS (紧跟在减法指令后面)减法的 ASCII 调整AAS (紧跟在减法指令后面)比较两个操作数CMP d, s乘运算无符号数的乘法MUL d, s带符号的整数乘法IMUL d, s指令类型指令功能指令书写格式通用数据传送字节或字传送MOV d, s字压入堆栈PUSH s字弹出堆栈POP d字节或字交换XCHG d, s字节替换(换码)XLAT目标地址传送装人有效地址LEA d, s装入DS 寄存器LDS d, s装入ES 寄存器LES d, s标志位传送将FR 低字节装入A

14、H 寄存器LAHF将AH 内容装入 FR 低字节SAHF将FR 内容压入堆栈PUSHF从堆栈弹出FR 内容POPFI/O 数据传送输入字节或字IN 累加器,端口输出字节或字OUT 端口,累加器3逻辑运算类指令4数据串操作类指令5程序转移控制类指令指令类型指令功能指令书写格式无条件转移段内直接转移JMP lable(或 JMP NEAR lable)段内直接短转移JMP SH0RT lable段内间接转移JMP WORD PTR opr段间直接转移JMP FAR PTR lable段间间接转移JMP DWORD PTR opr条件转移指令功能指令助记符状态标志低于/不高于等于/有进位JB/JNA

15、E/JCCF=1高于或等于/不低于/无进位JAE/JNB/JNCCF=0溢出转移JOOF=1未溢出转移JNOOF=0奇偶位为 1/为偶数转移JP/JPEPF=1奇偶位不为 1/为奇数转移JNP/JPOPF=0指令类型指令功能指令书写格式MOVSB/MOVSW两个区字节/字数据的传输MOVSB/MOVSWCMPSB/CMPSW两个区字节/字数据的比较CMPSB/CMPSWSCASB/SCASWAL/AX 内容与区字节/字单元数据比对SCASB/SCASWLODSB/LODSW区字节/字数据向 AL/AX 传输LODSB/LODSWSTOSB/STOSWAL/AX 数据向区字节/字单元传输STOS

16、B/STOSWREP/REPE/REPNZ/PEPNE重复操作前缀型指令REP/REPE/REPNZ/PEPNE指令类型指令功能指令书写格式逻辑运算逻辑与AND d, s逻辑或OR d, s求反码或者求逻辑非NOT d异或XOR d, s检测或逻辑比较TESTd, s(不留结果的与操作)移位操作算术和逻辑SAL/SHL d循环ROL d带进位位循环RCL d算术右移SAR d逻辑右移SHR d循环右移ROR d带进位位循环右移RCR d乘法的 ASCII 调整AAM (紧跟在乘法指令后面)除运算无符号数的除法DIV d, s带符号的整数除法IDIV d, s除法的 ASCII 调整AAD (紧

17、跟在除法指令后面)其它操作求补码NEG d把字节扩展为字CBW d字变换为双字CWD d6处理器控制类指令一些具有代表性的指令运用说明一、通用传送指令(General Pure Transfer)通用传送指令(除了 XCHG 以外)是唯一允许以段寄存器为操作数的指令。通用传送指令包括:1、MOV2、PUSH3、POP4、XCHG(Movement)(Push word onto stack) (Pop wordoffstack) (Exchange)指令类型指令功能指令书写格式标志位操作清除方向标志CLD方向标志置 1STD清除中断标志CLI中断标志置 1STI清除进位标志CLC进位标志置 1

18、STC进位标志求反CMC空操作空操作NOP处理器暂停暂停处理器HLT处理器等待处理器等待WAIT总线锁定前缀总线锁定LOCK处理器交权挂起 CPUESC相等/为零转移JE /JZZF=1不等/不为零转移JNE/JNZZF=0CX 为 0 转移JCXZ dCX=0高于/不低于也不等于转移JA /JNBECFZF=0低于或不等于/不高于转移JBE/JNACFZF=1大于等于/不小于转移JGE/JNLSFOF=0小于/不大于不等于转移JL/JNGESFOF=1大于/不小于不等于转移JG/JNLE(SFOF)ZF=0小于等于/不大于转移JLE/JNG(SFOF)ZF=1循环无条件循环LOOP相等/为零

19、则循环LOOPE/LOOPZ不相等/不为零则循环LPOONE/LOOPNZ过程调用 (子程序调用)段内直接调用CALL d段间直接调用CALL FAR d段内间接调用CALL WORD PTR opr段间间接调用CALL DWORD PTR d过程返回不指定 SP 额外递增值的返回RET ;(自动识别段内/段间)指定 SP 额外递增值的返回RET n;(注:n=偶数)软中断调用无条件软中断调用n以 OF=1 为条件的软中断调用O中断返回中断返回IRET5、XLAT(Translate)1、MOV 通用传送指令(dst) (src)目的 源MOVdst,目的功能:src;源把一个字节(B)或一个

20、字(W)操作数由源传送至目的。实现: 寄存器 寄存器/器之间;立即数寄存器/器寄存器/器段寄存器之间的数据传送。说明:* 指令中至少要有一项明确可用不同的寻址方式;不影响标志位;源操作数不变;传送的是字节还是字;器之间,立即数与段寄存器,段寄存器之间不能用一条指令完成数据传送。*MOV 指令合法的源和目的操作数关联图MOV 指令合法操作数的表述简表例: CPU寄存器之间的数据的任意传送(除了段寄存器 CS 和指令指针 IP 以外,注意:段寄存类型目的操作数源操作数1器累加器AX/AL2累加器AX/AL器3段寄存器器/寄存器4器/寄存器段寄存器5器/寄存器寄存器寄存器器/寄存器6寄存器立即数7器

21、/寄存器立即数器之间不能传送,且段寄存器 CS 不能做目的操作数)。;8 位寄存器 8 位寄存器; 16 位寄存器 16 位寄存器DL,CH AX,DX SI, BPDS,BXMOVMOV MOV MOV MOV;通用寄存器 段寄存器;段寄存器 通用寄存器通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI), 用于给寄存器赋AX,CS例:立即数传送至 CPU初值。注意:不能直接给段寄存器赋值;立即数8 位寄存器;立即数16 位寄存器MOV CL,04HMOV AX,03FFHMOVWORDPTR SI ,057BH ;立即数器器;立即数MOVBYTEPTR MEM,5思考:为什么加

22、WORDPTR , BYTEPTR ?不加对吗?例:CPU寄存器(除 CS 和 IP 外)与器(所有寻址方式)之间数据传送,可以实现一字节或一个字的传送。注意:两单元之间不能直接传送; 累加器;段寄存器;寄存器器,直接寻址器,直接寻址器,相对寻址MOVMOV MOV MOV MOV MOVMEM , AXMEM ,DS DISPBX ,CX AX , DISPSI DS , MEM;器累加器,相对寻址;器段寄存器,直接寻址;器寄存器,相对基址加变址CX , DISP BX SIMOV 指令小结:不能用一条 MOV 指令实现以下传送。1两 MOV MOVMOV单元之间的传送 MEM2 , MEM

23、1错。 AX,MEM1MEM2,AX对。2 立即数送段寄存器例 : MOVMOV MOVDS,2000HAX, 2000H DS , AX错。对。3段寄存器之间的传送ES , DS; 错AX , DS ES ,AXMOVMOV MOV; 对 。4注意 CS 和 IP 的使用CS 和 IP 不能作为目标操作数,CS 可以作为源操作数。例:MOVCS,AXMOVAX,CS; 错;对;错MOVIP,AX2、 PUSH、POP 指令这是两条堆栈操作指令。(1)先复习堆栈,为什么需要堆栈堆栈按照先进后出或后进先出原则组织的一段内存区域,特点:压入堆栈内容增加,SP 的值减少。注意:SP堆栈指针,始终指向

24、栈顶。 先进后出工作原则(堆栈在内存中的情况In Last Out简称 FILO)可以用一条立即数传送指令给 SP 赋值,确定 SP 在 SS 段中的初始位置。例:设: (SS)=9000H ,堆栈段为 64KBMOVSP,0E200H;(SP)=0E200H则:整个堆栈段的物理地址范围为:90000H9FH栈顶的物理地址为:9E200H堆栈在内存中的情况如右图所示:堆栈用途:存放 CPU 寄存器或器中暂时不使用的数据,使用数据时将其弹出;调用子程序,响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要保护断点的地址(即当前 CS 和 IP 的值),子程序或中断返回时再恢复断点。在进入子

25、程序和中断处理后,还需要保存通用寄存器的值,子程序或中断处理返回前,再恢复通用寄存器的值。子程序嵌套或子程序递归(自调自)时,要使保留的许多信息正确返回,必须后进先出。堆栈操作指令 (堆栈操作指令有两条):(2)入栈指令格式:PUSHsrc;(SP) (SP)2, (SP)+1,(SP) 先修改堆栈指针,然后把一个字从源操作数压入堆栈顶部。操作如:PUSHAX出栈指令(src)(dst) (SP)+1,(SP),(SP) (SP)+2格式:POPdst;把现行 SP 所指向堆栈顶部的一个字 弹出到目的操作数,再进行修改堆栈指针的操作。操作如: POPBX例: 存放 CPU 寄存器或器中暂时不使

26、用的数据,使用数据时将其弹出:;将(AX)入栈PUSHAXAXAX使用数据时将其弹出:POPBX例:调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。子程序嵌套断点地址压入和弹出情况应用时注意:堆栈操作都按字操作。低字节放在低地址,高字节放在高地址。PUSH ,POP 指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器),段寄存器(CS 除外,PUSHCS合法,POPCS器。堆栈工作原则后进先出,且 SP 总是指向栈顶。PUSH ,POP 指令应该成对使用,保持堆栈原有状态。),堆栈最大容量为 64KB。堆栈应用举例:例 :压入堆栈的内容与弹出内容顺序

27、相反PUSHPUSH PUSH POP POPPOPAXBX CXCXBX AX例:用 BP 的基址指令代替 POP 指令MOVPUSH PUSH PUSH MOV MOV MOVADDBP,SPAX BXCXCX,BP6BX,BP4AX,BP2SP, 63、XLAT 换码指令该指令不影响标志位。格式: XLATstr_table;(AL)(BX或XLAT)+(AL)str_table表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用 BX。XLAT 指令使用方法:先建立一个字节表格; 表格首偏移地址存入 BX;需要转换代码的序号(相对于表格首地址位移量)存入 AL;(表中第一个元素

28、的序号为 0)执行 XLAT 指令后,表中指定序号的元素存于 AL 中。 (AL)为转换的代码。XLAT 指令应用:若把字符的扫描码转换成 ASCII 码;或数字 09 转换成 7 段数码所需要的相应代码(字形码)等就要用 XLAT 指令。例:内存的数据段中有一张十六进制数字的 ASCII 码表。首地址为:Hex_table ,欲查出表中第 10 个元素(A)执行指令序列:MOVBX,OFFSETHex_table MOVAL,0AH16 进制数的 ASCII 码表XLATHex_table假设:(DS)=F000H,Hex_table=0040H(AL)=0AH执行 XLAT 以后:(AL)

29、=41H=(F004AH),即“A”的 ASCII 码。4、输入输出指令输入输出指令共两条: 1、IN(Input byte or word); 2 、OUT (Output byte or word)输入指令用于 CPU 从外设端口接受数据,输出指令用于 CPU 向外设端口发送数据。无论接受还是发送数据,必须通过累加器 AX(字)或 AL(字节),又称累加器输入、输出指令不影响标志位。传送指令 。8086 系统端口地址由A0A15译码形成。外部设备最多有 65536 个I/O端口。外设端口地址范围:0000HFH。当端口地址是 8 位时(0FFH),可以用直接寻址方式,即在指令中直接给出 8

30、 位端口地址。当端口地址超过 8 位(FFH)时,只能使用间接寻址方式。即先把端口地址放到 DX 寄存器中。且间接寻址仅能使用 DX 寄存器。端口地址只有一个单一地址,不需要任何段寄存器参与,这与1、IN(Input byte or word) 输入指令格式:器地址不同。;端口地址 8 位,输入一个字节;端口地址 8 位,输入一个字;端口地址 16 位,输入一个字节;端口地址 16 位,输入一个字ININ ININAL,AX,AL,AX,data8data8 DXDX必须通过累加器 AX(字)或 AL(节)输入数据。2 、OUT(Output byte or word) 输出指令格式:OUT data8,AL ;端口地址 8 位

温馨提示

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

评论

0/150

提交评论