指令mov ax 1200h,100H[0100H]源操作数的有效地址EA和物理地址PA各是多少?

微机原理习题解答:4_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
微机原理习题解答:4
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢硬件基础问题_百度知道第4章指令系统4.1 寻址方式4.1.1 与数据有关的寻址方式4.1.2 与转移地址有关的寻址方式 4.2 指令系统 4.2.1 数据传送指令 4.2.2 算术运算指令 4.2.3 逻辑指令 4.2.4 串处理指令 4.2.5 控制转移指令 4.2.6 处理器控制指令 教学要求?掌握8086 CPU的寻址方式 ?掌握汇编语言的指令系统 学习指令的要点? 指令的功能――该指令能够实现何种操作。通常指令 助记符就是指令功能的英文单词或其缩写形式。 ? 指令支持的寻址方式――该指令中的操作数可以采用何种寻址方式。? 指令对标志的影响――该指令执行后是否对各个标志 位有影响,以及如何影响。? 其他方面――该指令其他需要特别注意的地方,如指 令执行时的约定设置、必须预置的参数、隐含使用的 寄存器等。 第 4.1节 4.1.1 指令格式 指令基本格式操作码OP一个地址码 A一个或几个?一条指令实际上包括两种信息即操作码和地址码。 ?操作码用来表示该指令所要完成的操作,其长度取决于指 令系统中的指令条数; ?地址码用来描述该指令的操作对象,或者直接给出操作 数或者指出操作数的存储器地址或寄存器地址 ( 即寄存器 名)。 4.1.1 指令格式指令中提供的地址数 1.指令提供地址的方式存储单元地址码 寄存器编号 直接或间接给出显地址方式 :指令中明显指明地址。 隐地址方式 :地址隐含约定,不出现在指令中。使用隐地址可以减少指令中的地址数, 简化地址结构。 4.1.1 指令格式指令和数据的联系和区别 联系:都是以二进制码的形式存储的。 区别: ?指令的地址是由程序计数器(PC)规定的; ?而数据的地址是由指令规定的。在程序执行过程中, 要避免修改指令,但可以修改数据。 指令系统● 指令的一般格式[标号:]操作码[ 操作数] [ ;注释]标号:给指令所在的地址取名字。注释:说明程序,汇编程序不对它作任何处理。操作码:指计算机所要执行的操作,是一种助记符。 操作数:指出在指令执行过程中所需要的操作数,即指出 操作数存放于何处―― CPU内部的寄存器或内存储器。 ●该字段可以是操作数本身外,也可以是操作数地址 或是地址的一部分,还可以是其它有关操作数的信息。 ●操作数通常为是0个---两个。 ●8086指令系统的指令大多数是双操作数指令。 指令系统 ● 8086指令系统的指令大多数是双操作数指令。 双操作数指令格式: 操作码 目的操作数,源操作数其中:① 源操作数:直接给出参加指令操作的操作数本 身,或指出操作数放在什么地方; ② 目的操作数:指出参加指令操作的操作数放在何 处,并指出操作结果送至何处。 ③ 指令执行前后,源操作数不变。 ●操作数的形式(3种) ? 立即数:操作数以常量形式出现(指源操作数) ?寄存器操作数:要操作的数据存在R中。 ?内存操作数:要操作的数据存在M中。 4.1 寻址方式 指令的寻址方式 就是寻找操作数所在地址的方法。操作数可能在哪?地址的表示方法注意?物理地址 ?逻辑地址:[段地址:段内偏移量]寻址方式:或者是寻找操作数有效地址(EA)的方法。有效地址(EA)的构成①位移量: disp8位或disp16位 ②基址寄存器: 存放在BX或BP中的内容 ③变址寄存器: 存放在SI或DI中的内容不同的组合方式 不同的寻址方式 4.1.1 与数据有关的寻址方式(7种)● 1.立即寻址 ―― 指令中直接给出操作数例如: MOV AL,34H 指令执行后,(AL)=34H例如: MOV AX,1234H 指令执行后,(AX)=1234 示意图如下:存储器 AH AL AX 12. . .低地址34MOV操作码34操作数送寄存器AX12. . .代 码 段演示高地址 4.1.1 与数据有关的寻址方式(7种)● 2.寄存器寻址――指令中给出存储操作数的寄存器号即操作数放在CPU内部寄存器 AX、BX、CX、DX、DI、SI、SP和BP中,不需要访问存储器。 例如: MOV AX,BX若执行前(AX)=1234H,(BX)=56EDH, 则执行后(AX)=56EDH, BX内容不变。示意图如下:AHAX 56ALED BXBH 56BL演示1ED 操作数送寄存器AX演示2 4.1.1 与数据有关的寻址方式(7种)●3.直接寻址――有效地址EA由指令直接给出。 物理地址=(DS)×10H+EA例如:MOVAX,[2000H]默认的段寄存器是DS,如(DS)=3000H, 则物理地址 PA=3000H×10H+2000H 例如:MOV AX,ES :[2000H]物理地址PA=(ES)×10H+2000H 4.1.1 与数据有关的寻址方式(7种)● 3.直接寻址例如:MOVAX,[2000H]如(DS)=3000H,存储器低地址DS 3000 ×10H + .MOV操作码00 20AH AX 12AL 3432000操作数送寄存器AX. . . 34 12代 码 段数 据 段高地址演示1演示2 4.1.1●与数据有关的寻址方式(7种)4.寄存器间接寻址 ――指令中直接给出操作数EA; EA在基址寄存器BP、BX或变址寄存器SI、DI中, 而操作数则在存储器中。?BX、SI、DI作间址寄存器,指示数据段中的数据; ?BP作间址寄存器,则指示的是堆栈段中的数据。例如: MOV AX,[BX] 若(DS)=3000H,(BX)=2000H则EA=(BX)=2000H 物理地址 PA= 3H 执行情况如图 (AX)=(32000)=1234H 4.1.1 与数据有关的寻址方式(7种)●4.寄存器间接寻址AX,[BX]DS 3000 ×10H 存储器低地址例如: MOV 执行情况如图+BX. . .操作码 操作码AL 34 32000 34演示1AH AX 12. . .代 码 段操作数送寄存器AX演示212数 据 段高地址 4.1.1 与数据有关的寻址方式(7种)● 5.寄存器相对寻址除有段跨越前缀者外, 对于寄存器为BX、SI、 DI的情况下,段寄存器 用DS;(BX)8位 (BP) 位移量 有效地址 = + 16位 (SI) (DI)例如: MOV 或 MOV AX,COUNT[SI] AX,[COUNT+SI]寄存器用BP,则使用SS段寄存器的内容作为 段地址。若 (DS)=3000H, (SI)=2000H,COUNT=3000H则 PA=35000H; 若 (35000H)=1234H,则 (AX)=1234H 4.1.1 与数据有关的寻址方式(7种)● 5.寄存器相对寻址例如:MOV MOV AX,COUNT[SI] AX,[COUNT+SI]DS+ SI3000 ×10H存储器低地址 . 操作码 操作码+ COUNT 300000 30. . AL代 码 段AH AX 12343500034 12数 据 段操作数送寄存器AX高地址演示1演示2 4.1.1 与数据有关的寻址方式(7种)●6.基址变址寻址有效地址 = (BX) (BP) + (SI) (DI) ?使用BX作为基址寄存器,例如: MOVAX, [BX][SI]如 (DS)= 2100H(BX)=0158H, (SI)=1200H,则数据默认在数据段; ?若使用BP作为基址寄存 器,则默认在堆栈段; ?允许使用段跨越前缀则 PA=22358H;若(22358H)= 1234H, 则(AX)=1234H 4.1.1 与数据有关的寻址方式(7种)●6.基址变址寻址AX, [BX][SI]DS 2100 ×10H + BX 0158 + SI
AH AX 12 AL 34例如: MOV存储器 . . . 操作码 操作码 . . .低地址代 码 段2235834 12数 据 段 高地址演示1演示2操作数送寄存器AX 4.1.1 与数据有关的寻址方式(7种) ● 7 . 相对基址变址寻址 有效地址 = (BX) (BP) + (SI) (DI) + 8位 16位 位移量例如: MOVAX, MASK[BX][SI]如 (DS)= 2100H (BX)=0158H, (SI)=10A5H, MASK=0134H 则 PA= 2148CH ; 若(2148CH)= 5678H 则(AX)=5678H 4.1.1 与数据有关的寻址方式(7种)●7 . 相对基址变址寻址AX, MASK[BX][SI]DS + BX + SI + MASK 2100 ×10H 34 2148C AL 78 存储器 操作码 操作码 34 01例如: MOV低地址 代 码 段AXAH 562148C78 56演示1 演示2数 据 段 高地址操作数送寄存器AX 第 4.2节 4.2 指令系统● 8086指令系统按功能可分为6大类:? ? ? ? ? ? ?数据传送指令 算术运算指令 逻辑指令 程序控制指令 串处理指令 输入输出类指令 处理机控制指令
4.2.1数据传送指令 ● 一.通用数据传送指令 (1)数据传送MOV指令 ●指令格式:MOV DST,SRC; ●指令功能:将数据从源地址传送到目的地址,具有“复制 ” 性质;DST、SRC分别为目的操作数和源操作数. 例如: MOV AX,1234H 注意 1) 2) 3) 4) 5) MOV AL,CL MOV指令源、目标操作数长度必须一致, 目的操作数DST不能为立即数;DST、SRC不能同时为段R,也不能同时为M单元; 不能使用此指令为CS及IP赋值; MOV指令不影响标志位寄存器PSW的值。 MOV指令传送功能立即数 存 储 器4.2.1 数据传送指令MOVDST,SRC通用寄存器 AX BX CX DX BP SP SI DI段寄存器 CS DS ES SSMOV也并非任意传送 具体实现1)数据在CPU内部寄存器之间传送MOV AL,BL MOV DI,BX MOV DS,AX4.2.1 数据传送指令; 通用寄存器之间字节传送 ; 通用寄存器之间字传送 ; 通用寄存器传送到段寄存器MOV AX,ES; 段寄存器传送到通用寄存器2)立即数传送至CPU内部通用寄存器或存储器中MOV DL,58MOV BP,016AH; 8位立即数传送到通用寄存器; 16位立即数传送到通用寄存器 ; 8位立即数传送到存储器MOV BYTE PTR [BX],7BHMOV WORD PTR [BX],057BH ; 16位立即数传送到存储器 具体实现4.2.1 数据传送指令3)数据在CPU内部寄存器与存储器之间的传送MOV CL,[BX+5] MOV AX,[SI] MOV DS,[BX+SI] ; 字节传送 ; 变址传送 ; 基址变址传送MOV AX,DATA[BP][SI] ; 相对基址变址传送 MOV [DI],BX MOV BX, DATA1 ; 将BX内容传送到DI所指位置; 将符号地址DATA1的存储器内容传送到BX中 常见错误① CS和IP不能作为目的操作数MOV CS,AX (X) MOV IP,AX (X)4.2.1 数据传送指令② 不允许数据直接从存储器传送到存储器如要把DS段内偏移地址为ADDR1的存储单元的内 容,传送至同一段内地址为ADDR2的存储单元中去,MOV ADDR2, ADDR1MOV AL,ADDR1 MOV ADDR2,AL( X) (V) 常见错误4.2.1 数据传送指令③ 立即数不允许直接送段寄存器, 也不允许在两个段寄存器之间直接传送信息。 MOV MOV DS,5000H (X) DS,ES (X)可以用通用寄存器(如AX)为桥梁来实现传送。 MOV AX,5000H MOV DS,AX (V) ●一.通用数据传送指令4.2.1 数据传送指令(2)交换指令XCHG ●指令格式:XCHG OPR1,OPR2; 执行操作:OPR1? OPR2; ●指令功能:将一个字节或一个字的源操作数和目的操作数相交换;注意1) 两个操作数必须有一个在寄存器中;2) 两个操作数不能同时为存储器; 3) XCHG指令不影响FR的值。 ●交换可在reg之间、reg与mem之间进行。可以是字节交换,也可以是字交换。段寄存器内容不能交换。
1. 说明程序功能,寻址方式,判断对错并改正 (1) MOV [2000H],BX (2) MOV 2000H,IP (3) MOV SS,2000H (4) MOV DS,[SI+DI] (5) MOV DS,ES (6) MOV [BX+DI],[AX] (7) MOV BL,[BP] (8) MOV BX,[BX+DI+2000H] (9) MOV BH,[BP+SI] (10)MOV AL,ES:[2000H] (11) PUSH 2000H (12) POP DS 2. 现有:(DS)=2000H,(BX)=0100H,(SI)=0002H, (20100H)= 12H,(20101H)= 34H, (20102H)= 56H,(20103H)= 78H, (21200H)= 2AH,(21201H)= 4CH, (21202H)= 0B7H,(21203H)= 65H。 试说明下列各指令执行后,AX寄存器的内容。 (1) MOV (2) MOV (3) MOV (4) MOV (5) MOV (6) MOV (7) MOV AX,1200H AX,BX AX,[1200H] AX,[BX] AX,1100H[BX] AX,[BX][SI] AX,1100H[BX][SI]复习提问 3. 假定:(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H。 指出下列源操作数的寻址方式?有效地址和物理地址值是多少? (1)MOV AX,00ABH (2)MOV AX,[100H] (3)MOV AX,[BX] (4)MOV AX,[BP] (5)MOV AX,[BX+10] (6)MOV AX,[BX][SI] (7)MOV AX,BX (8)MOV AX,VAL (9)MOV AX,ES:[BX] (10)MOV AX,[SI] (11)MOV AX,VAL[BX] (12)MOV AX,VAL[BP][SI] ●二.堆栈操作指令4.2.1 数据传送指令? 堆栈:在内存中开辟的一片数据存储区 (设置在堆栈段内), ? 存储方式:是一端固定,另一端活动,即只允许在一端 向该存储区存入或取出数据,数据的存取遵循“先进后 出”原则。 ? 从硬件来看,堆栈由一片存储单元和一个指示器(即堆 栈指针SP)组成。堆栈的固定端称栈底(BOTTOM)。 ? 堆栈指针SP用于指示数据进栈和出栈时偏移地址的变化, SP所指示的最后进入数据的单元称栈顶(TOP),堆栈中 所有数据的存取都在栈顶进行。 ●二.堆栈操作指令4.2.1 数据传送指令存储器AX SS 堆 栈 段 64 K B SS ×× ×× 堆栈底 堆 栈 段 64 K B PUSH AX 存储器堆栈区 SP 堆栈底SP SP=SP-2 ●二.堆栈操作指令4.2.1 数据传送指令(1)压栈指令格式 PUSH ●格式为: PUSH SRC;(先减后压) 执行的操作: (SP)←(SP)-2 ((SP)+1,(SP))←(SRC) SRC可以是内部寄存器、段寄存器、存储器 (2)出栈指令格式 POP ●格式为: POP DST;(先弹后加) (DST)←((SP)+1,(SP)) (SP)←(SP)+2; DST可以是内部寄存器、段寄存器(CS除外) 、存储器。 执行的操作: (2)堆栈操作指令 注意 1) 堆栈指令必须是16位双字节数,4.2.1 数据传送指令即每进行一次PUSH操作,SP减2; 每进行一次POP操作SP加2; 2)目的操作数DST,与原操作数SRC都不能为立即数; 3) DST不能为代码段寄存器CS; 4) 堆栈指令不影响标志位寄存器FR的值。例:PUSH 1234H ? POP CS ?不能用立即寻址方式 DST不能是CS 4.2.1 数据传送指令例:实现两个字型存储器操作数BUF1及BUF2的交换方法1:利用寄存器 MOV AX,BUF1 XCHG AX,BUF2 MOV BUF1,AX 例:寄存器间交换 MOV AX,1234H MOV BX,5678H XCHG AX,BX XCHG AH,AL ;AX=1234H ;BX=5678H ;AX=5678H,BX=1234H ;AX=7856H 方法1:利用堆栈PUSH BUF1PUSH BUF2 POP BUF1POPBUF2 ● 三 .标志传送指令 4.2.1 数据传送指令 (1) PUSHF指令 ●指令格式:PUSHF ●指令功能:把标志寄存器FR的内容压栈; 执行操作:(SP)←(SP-2); (SP)←(FR低8位); (SP+1)←(FR高8位); (2) POPF指令●指令功能:与PUSHF指令执行相反的操作,将堆栈栈顶 两个单元的内容弹出至FR。 ●指令格式: POPF 执行操作:(FR低8位)→(SP); (FR高8位)→(SP+1); (SP)←(SP+2); ? PUSHF和POPF是成对出现,用于保护和修改FR 例: 子程序应用 进入子程序 push ax push bx push cx pushf ∶ ∶ ∶ ∶ popf pop cx pop bx pop ax 返回4.2.1 数据传送指令进入子程序首先保护现场子程序内容从子程序返回前恢复现场 ● 四.地址传送指令4.2.1 数据传送指令(1)LEA有效地址送寄存器 ●指令功能:将源操作数的偏移地址传送给16位寄存器; ●指令格式: LEA REG,SRC; 执行操作: (REG) ←SRC的EA (2)LDS指针送寄存器和DS ●指令功能:将源操作数传送至一对目标寄存器; ●指令格式: LDS REG,SRC; 执行操作:(REG)←(SRC) (DS)←(SRC+2); ●四.地址传送指令4.2.1 数据传送指令(3) LES指针送寄存器和ES●指令功能:除地址指针的段地址送ES外,其他与LDS类似;●指令格式: LDS REG,SRC;执行操作: (REG) ←SRC; (ES)←(SRC+2); 注意 1)目的操作数16位通用寄存器(REG)不能使用段寄存器; 2)源操作数SRC只能使用存储器寻址方式来确定地址; 3)地址传送指令不影响标志位寄存器FR的值 例:LEA BX, [BX+SI+0F62H] LDS SI, [10H] LES DI, [BX]TABLE (DS):1000H4.2.1 数据传送指令MOV BX, TABLE40 H 00 H 00 H 30 H; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE LDS BX, TABLE ; (BX)=1000H ; (BX)=0040H ; (DS)=3000H LES BX, TABLE ; (BX)=0040H注意: * 不影响标志位 * REG 不能是段寄存器 * SRC 必须为存储器寻址方式; (ES)=3000H
4.2.2 算术运算指令? 运算的操作数允许是字节或字; ? 可以是有符号数,也可以是无符号数。 ? 指令中有单操作数指令,也有双操作数指令。? 指令格式: (1)双操作数指令:指令助记符 DST,SRCDST可以是reg、mem,SRC可以是data、reg、mem。 (2)单操作数指令:指令助记符 DSTDST可以是 reg、mem。 4.2.2 算术运算指令● 1. 加法指令(1)加法指令ADD ●指令格式: ADD DST,SRC; 执行操作:(DST)←(SRC)+(DST) (2)带进位加法指令ADC ●指令格式: ADC DST,SRC; 执行操作:(DST)←(SRC)+(DST)+CF ?运算结果影响的标志位:CF、DF、PF、SF、ZF和AF ?ADC指令主要与ADD配合,实现多精度加法运算 4.2.2算术运算指令ADD● 1. 加法指令注意:ADD和ADC影响标志位:ADC1 和的最高有效位 有向高位的进位 1 结果为负 CF= SF= 0 否则 0 否则 1 结果为0 ZF= 0 否则 OF= 1 同号相同,结果相异 0 否则? CF 位表示 无符号数 相加的溢出。 ? OF 位表示 带符号数 相加的溢出。 例: n=8bit 带符号数(-128~127) , 无符号数(0~255) + 00 1111 带:(+4)+(+11)=+15 OF=0 无:4+11=15 CF=0 带符号数和无符号数都不溢出
带:(+7)+(-5)=+2 OF=0 无:7+251=2 CF=1 无符号数溢出
带:(-121)+(-11)=+124 OF=1 无:135+245=124 CF=1 带符号数和无符号数都溢出
+ 00 0101 带: (+9)+(+124)=-123 OF=1 无: 9+124=133 CF=0 带符号数溢出 [例]双精度数加法计算已知: (DX) = 0002H (AX) = 0F365H (BX) = 0005H (CX) = 8100H 指令序列 ADD AX, CX ; (1) ADC DX, BX ; (2) (1) 执行后4.2.2 算术运算指令(1) 0F365H + 8100H (AX) 7465( CF=1)(2) SF=0 ZF=0(AX) = 7465HCF=1 OF=1H + 1 (DX) 0008H(2) 执行后 (DX) = 0008HCF=0OF=0SF=0ZF=0 4.2.2 算术运算指令(3)加1指令INC ●指令格式: INC OPR 执行操作:(OPR)←(OPR)+1 注意 影响的标志位:AF、OF、PF、SF和ZF, 对CF没有影响。 主要用于在循环程序中修改地址指针和循环次数等。 【例】 INC AL INC BYTE PTR [BX] INC WORD PTR [BX] INC ● 2. 减法指令4.2.2 算术运算指令(1) 减法SUB指令●指令格式: SUB DST, SRC 执行操作:(DST)←(DST)-(SRC) 说明:对标志位AF、CF、OF、PF、SF和ZF有影响。 (2)带借位减法指令SBB ●指令格式: SBB DST, SRC 执行操作:(DST)←(DST)-(SRC)-CF 说明:对标志位的影响与SUB相同。SUBSBB(3)减1指令DEC DEC ●指令格式: DEC OPR 执行操作:(OPR)←(OPR)-1 说明:影响AF、OF、PF、SF和ZF,对CF没有影响。 ● 2. 减法指令4.2.2 算术运算指令(5)比较指令CMP●指令格式: CMP OPR1, OPR2 CMP执行操作:(OPR1)-(OPR2) 注意 ?目的操作数减源操作数,结果只影响标志位, 不送入目的地址。 ?对于无符号数,若CF=0,则OPR1& OPR2; ?若为有符号数,则OFSF=0时OPR1& OPR2。 [例]x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,用指令序列实现: w ? x + y + 24 - z ,并用W, W+2单元存放wMOV MOV ADD ADC AX, DX, AX, DX, X X+2 Y Y+2 ; x+yADD AX, 24 ADC DX, 0 SUB AX, Z SBB DX, Z+2 MOV W, AX MOV W+2, DX; x+y+24 ; x+y+24- 结果存入W, W+2单元 ● 3. 乘法指令(1)无符号数乘法指令MUL ●指令格式: MUL SRC4.2.2 算术运算指令指令操作:(AX)←(AL)*(SRC);字节操作数(DX,AX)←(AX)*(SRC);字操作数 (2)带符号数乘法指令IMUL ●指令格式与操作同MUL指令。 注意 1) 乘法指令中源操作数不能为立即数; 2) AL(AX)为隐含的乘数寄存器; 3) AX(DX,AX)为隐含的乘积寄存器。 4) 乘法指令,影响CF和OF标志位; ● 3. 乘法指令乘法指令对 CF/OF 的影响:4.2.2 算术运算指令?MUL指令CF,OF = 00 11 乘积的高一半为零 否则? IMUL指令00 CF,OF = 11 乘积的高一半是低一半的符号扩展 否则 ● 4. 除法指令4.2.2 算术运算指令(1)无符号数除法指令DIV●指令格式: DIV ●指令操作: SRC AL(商)、AH(余数) AX(商)、DX(余数)字节除法: (AX)/(SRC) 字除法:(DX,AX)/(SRC) (2)带符号数除法指令IDIV●指令IDIV格式与操作同DIV指令。 注意 1)除法指令中源操作数不能为立即数; 2) AX(DX,AX)为隐含的被除数寄存器; 3)AL(AX)为隐含的商寄存器; 4)AH(DX)为隐含的余数寄存器; 5)除法指令对所有标志位无定义。 ● 4. 除法指令4.2.2 算术运算指令除法错中断:? 当被除数远大于除数时,所得的商有可能超出它所能表 达的范围。如果存放商的寄存器AL/AX不能表达,便产 生溢出; ? 8086CPU中就产生编号为0的内部中断――除法错中断。 ? 发生除法溢出的情况:? 对DIV指令,除数为0,或在字节除时商超过8位,或 者在字除时商超过16位。? 对IDIV指令,除数为0,或在字节除时商不在-128~ 127范围内,或者在字除时商不在-3范围 内。 ● 5.符号扩展指令(1)字节转换为字指令CBW ●指令功能: AL ? AX ●指令格式:CBW 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= FFH(2)字转换为双字指令CWD4.2.2 算术运算指令●指令功能:AX ? (DX,AX) ●指令格式:CWD 若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= FFFFH注意1) 无操作数指令,隐含对AL 或AX 进行符号扩展 2)不影响条件标志位 ● 5.符号扩展指令4.2.2 算术运算指令? 符号扩展; 指用一个操作数的符号位(即最高位)形成另一 个操作数。后一个操作数的各位是全0(正数)或全1(负 数)。 ? 符号扩展不改变数据大小,即将原操作数的符号位复制到扩 展后高半部分的各个位。?数据64H(表示+100),其最高位D7为0, 符号扩展后:0064H(仍表示数据100) ?数据ff00H(表示-256),其最高位D15为1, 符号扩展后:ffffff00H(仍表示有符号数-256) [例 ] (AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH ; (AX)=0BA45H [例] x y z v 均为16位带符号数,计算 (v C (x*y + z C 540 )) /x MOV AX, X IMUL Y ; X*Y →(DX,AX) MOV CX, AX MOV BX, DX MOV AX, Z CWD ;Z →(DX,AX) ADD CX, AX ADC BX, DX ; X*Y+Z →(BX,CX) SUB CX, 540 SBB BX, 0 ; X*Y+Z-540 MOV AX, V CWD ;V →(DX,AX) SUB AX, CX SBB DX, BX ; V-(X*Y+Z-540) IDIV X ; (V-(X*Y+Z-540))/X→(AX) 余数→(DX)
● 1. 逻辑运算指令 (1) 逻辑非指令NOT ●指令功能:将OPR内容按位取反并送回 ●指令格式: NOT OPR ●指令操作: (OPR) ← ┓(OPR) (2) 逻辑与指令AND4.2.3 逻辑操作类指令●指令功能:两个操作数按位逻辑与运算,结果送目的操作数 ●指令格式:AND DST,SRC ●指令操作:(DST) ← (DST)∧(SRC) ●运算法则: (全1为1,有0出0) 1∧1=1,1∧0=0,0∧1=0,0∧0=0 。 ●该指令可以清除目的操作数中与源操作数置0的对应位 ● 1.逻辑运算指令 (3) 逻辑或指令OR4.2.3 逻辑操作类指令●指令功能:两个操作数按位逻辑或运算, 结果送目的操作数 ●指令格式: OR DST, SRC ●指令操作: (DST) ← (DST)∨(SRC) ●运算法则:(全0为0,有1出1) 1∨1=1,1∨0=1,0∨1=1,0∨0=0 ●该指令可以使操作数中某些位置1,而其他位保持不变 (4) 逻辑异或指令XOR●指令功能:两个操作数按位异或运算,结果送目的操作数 ●指令格式: XOR DST, SRC ●指令操作: (DST) ← (DST)(SRC) ●运算法则:11=0,10=1,01=1,00=0 ●XOR指令可以将指定位求反 ● 1.逻辑运算指令4.2.3 逻辑操作类指令(5) 测试指令TEST●指令功能:与AND指令的唯一区别是结果不回送目的地址 ●指令格式: TEST OPR1,OPR2 ●指令操作: (OPR1) ∧(OPR2) ● 可在不改变源操作数的情况下,测试某一位或几位的值 逻辑运算指令名称逻辑与 逻辑或 测 试 逻辑非4.2.3 逻辑操作类指令格式AND DST,SRC OR DST,SRC TEST OPR1,OPR2 NOT DST功能(DST)∧(SRC) →DST (DST)∨(SRC) →DST OPR1∧OPR2 (DST)按位变 反送DST标 志清0 CF和OF, 影响SF、 ZF及PF, AF不定 同AND指令同AND指令 不影响 同AND指令逻辑异或XOR DST,SRC(DST)∨(SRC) →DST 4.2.3 逻辑操作类指令例:屏蔽AL的第0、1两位 AND AL, 0FCH 例:置AL的第5位为1 OR AL, 20H 例:使AL的第0、1位变反 XOR AL, 3 例:测试某些位是0是1 TEST AL, 1 JZ EVEN**** **** AND 1 1 1 1 1 1 0 0 **** **00OR**** ****
**1* ******** **01 XOR 0 0 0 0 0 0 1 1**** **10**** **** AND 0 0 0 0 0 0 0 1* 逻辑运算指令用途●AND指令:用于把某位清0(与0相与,也可称为屏蔽某位); 某位保持不变(与1相与)的场合。●OR指令 :用于把某位置1(与1相或)、 某位保持不变(与0相或)的场合。 ●NOT指令:可用于把操作数的每一位均变反的场合。 ●XOR指令:用于把某位变反(与1相异或)、 某位保持不变(与0相异或)的场合。 ●TEST指令:可用于只测试其值而不改变操作数的场合。注意逻辑运算指令中除逻辑非NOT指令不影响标志位外, 其余均影响标志位:CF=0;OF=0; SF、ZF、PF依据运算结果设置 4.2.3 逻辑操作类指令[例1]设从键盘接收的一个十进制数的ASCII码 在AL中,要求把它转换成非压缩BCD码的形式(数 字0-9)。 AND AL,0FH ;清0高4位,低4位不变[例2]把AL中的非压缩BCD码转换成十进制数的 ASCII码形式。OR AL,30H ; AL中的高4位变成0011B,低4位不变 4.2.3 逻辑操作类指令[例3] 按位加运算。MOV AL,45H;(AL)=45HXOR AL,31H;(AL)=74H
(45H) (XOR) (31H)
(74H) 4.2.3 逻辑操作类指令[例4]设某并行打印机的状态端口是379H,其 D7位是忙闲位,若D7=0表示忙,为1表示闲,测 试该打印机当前状态,若为忙继续测试,否则顺序 执行下一条指令。 MOV DX,379H WT:IN AL,DX TEST AL,80H JZ WT ● 2.移位指令4.3.3 逻辑操作类指令SHL(shift logical left)SHR(shift logical right) SAL(shift arithmetic left) SAR(shift arithmetic right) ROL(rotate left) ROR(rotate right) RCL(rotate left carry)逻辑左移逻辑右移 算术左移(乘2n) 算术右移(除2n) 不带进位循环左移 不带进位循环右移 带进位循环左移RCR(rotate right through carry)带进位循环右移 名 称 逻辑 左移格式功能标志SHL DST,CNT SAL DST,CNT SHR DST,CNT SAR DST,CNT0 0 0算术 左移逻辑 右移 算术 右移CF中总是最后移出的一位, ZF、SF、PF按结果设置, 当CNT= 1时,移位使符号 位变化置OF=1 ,否则清0注:当CNT>1时,OF值不确定。 说明:DST可以是8位、16位或32位的寄存器或存储器操作数,CNT是移位位数。 对CNT的限定是: 当CNT=1时,直接写在指令中; 适用于 当CNT>1时,由CL寄存器给出; 适用于80X86系列的所有型号 当CNT>1时,由指令中的8位立即数给出; 适用于80286以上 功能图中的符号表示: CF 数据流向 操作数 名 称 循环 左移 循环 右移格式功能标志ROL DST,CNT ROR DST,CNT带进位 RCL 循环左 DST,CNT 移 带进位 RCR 循环右 DST,CNT 移CF中总是最后移进的位, 当CNT=1时,移位使符号位 改变则置OF=1 ,否则清0, 不影响ZF、SF、PF注:当CNT>1时,OF值不确定。 说明:对DST和CNT的限定同基本移位指令。 [例1] (AX)= 0012H,(BX)= 0034H, 把它们装配成(AX)= 1234H4.2.3 逻辑操作类指令MOV CL, 8 ROL AX, CL ADD AX, BX[例2] (BX) = 84F0H(1) (BX) 为无符号数,求 (BX) / 2SHR BX, 1 SAL BX, 1 MOV CL, 2 SAR BX, CL; (BX) = 4278H ; (BX) = 09E0H, OF=1(2) (BX) 为带符号数,求 (BX) ×2(3) (BX) 为带符号数,求 (BX) / 4; (BX) = 0E13CH
4.2.4 程序控制类指令 ● 1. 无条件转移指令JMP ●根据转移的距离,JMP指令可分为下列两类:?段内转移:在同一代码段内进行,又称近(Near)转移, 只要修改IP的值即可实现。 ?段间转移:可在不同代码段之间进行,又称远( Far )转 移,需要同时修改CS和IP的值。●根据目标地址的指定方式,JMP指令又可分为直接转移和间 接转移。 ?直接转移:是指转移的目标地址直接出现在指令中,在程 序执行前就已确定。 ?间接转移:指转移的目标地址是寄存器或内存操作数的值, 只有执行到该条指令时才能确定。 4.2.4程序控制类指令● 1. 无条件转移指令JMP ●指令格式: JMP 地址标号●指令功能:无条件转移到DST所指向的地址 ● 段内直接短跳转 格式:JMP SHORT OPR ● 段内直接近转移 操作:(IP)←(IP)+8位位移量(符号扩展到16位) 格式:JMP NEAR PTR OPR 说明:其中8位位移量是由目标地址OPR确定的。 操作:(IP)←(IP)+16位位移量 注意:转移格式只允许在-128到+127字节的范围内转移。 说明:它和段内直接短跳转一样,也采用相对寻址方式。 注意:这种方式的位移量为16位,故它可转移到段内的任一个位置。 ● 1. 无条件转移指令JMP JMP label演示4.2.4 程序控制类指令;段内转移、相对寻址 ;IP←IP+位移量 ;段内转移、间接寻址 ;IP←r16/m16 ;段间转移、直接寻址 ;IP←偏移地址,CS←段地址 ;段间转移,间接寻址 ;IP←[mem],CS←[mem+2]JMP r16/m16演示 演示JMP far ptr label演示JMP far ptr mem演示 4.2.4 程序控制类指令● 2. 条件转移指令条件转移指令的通用汇编格式:JCC LABEL●功能:如果条件为真,则转向标号处,否则顺序执行下一 条指令。 ●说明:其中cc为条件,LABEL是要转向的标号。 在中,该地址应在与当前IP值的 - 128~+127范围之内,即只能使用与转移地址有 关的寻址方式的段内短转移格式,其位移量占用 一个字节。 汇编格式 JC LABEL JNC LABEL JO LABEL JNO LABEL功 有进位转移 无进位转移 溢出转移 无溢出转移能测试条件 CF=1 CF=0 OF=1 OF=0JP/JPE LABELJNP/JPO LABEL JS LABEL JNS LABEL JZ/JE LABEL JNZ/JNE LABEL偶转移奇转移 负数转移 非负数转移 结果为0/相等转移 结果不为0/不相等转移PF=1PF=0 SF=1 SF=0 ZF=1 ZF=0注:对实现同一功能但指令助记符有两种形式时,在程序中究竟选用哪一种视 习惯或用途而定,例如对于指令JZ/JE LABEL,当比较两数相等转移时常使用JZ助 记符,当比较某数为0转移时常使用JE指令。下同。(1)检测单个条件标志位转移指令 (2)有符号数的条件转移指令汇编格式 功 能 测试条件ZF=0 and SF=OF ZF=1 or SF≠OFJG/JNLE LABEL 大于/不小于等于 转移 JNG/JLE LABEL 不大于/小于等于 转移JL/JNGE LABEL 小于/不大于等于 转移JNL/JGE LABEL 不小于/大于等于 转移SF≠OFSF=OF注1. G=Greater, L=Less, E=Equal, N=Not 注2. 指令JZ/JE LABEL和 JNZ/JNE LABEL同样可以用于两个带符号数的 比较转移。 (3)无符号数的条件转移指令汇编格式 JA/JNBE LABEL JNA/JBE LABEL 功 能 转移 转移 测试条件 CF=0 ZF=0 CF=1 ZF=1 and or高于/不低于等于 不高于/低于等于JB/JNAE/JC LABEL 低于/不高于等于JNB/JAE/JNC LABEL 不低于/高于等于转移转移CF=1CF=0注1. A=Above, B=Below, C=Carry, E=Equal, N=Not可以看出,这里 的高于相当于带符号数的大于,低于相当于带符号数的小于。 注2. 指令JZ/JE LABEL和 JNZ/JNE LABEL同样可以用于两个无符号数 的比较转移。 4.2.4 程序控制类指令[例1]比较无符号数大小,将较大的数存放AX寄存器。 CMP AX,BX ;(AX)-(BX) JNB NEXT ;若AX&=BX,转移到NEXT XCHG AX,BX ;若AX&BX,交换 NEXT:… [例2]比较有符号数大小,将较大的数存放AX寄存器。 CMP AX,BX ;(AX)-(BX) JNL NEXT ;若AX&=BX,转移到NEXT XCHG AX,BX ;若AX&BX,交换 NEXT:… ●3. 循环控制指令4.2.4 程序控制类指令循环指令可以控制程序的循环。它们的特点是:① 循环入口地址(指令中的标号)只能在当前IP值的-128~+127范围之内。 ② 用CX作为循环次数计数器。 ③ 不影响标志。 (1) LOOP 循环指令 ●指令格式:LOOP 标号 ●指令功能:(CX)-1→CX,若(CX)≠0,则转向标号处执行循环体,否则顺序执行下一条指令。 ●3. 循环控制指令4.2.4 程序控制类指令(2) LOOPE/LOOPZ相等或为零时循环指令●指令格式:LOOPZ(LOOPE) OPR ●指令功能: (CX)-1→CX,若(CX)≠0 and ZF=1,则转向标号处执行循环体,否则顺序执行下一条指令。 (3) LOOPNE/LOOPNZ不相等或不为零时循环指令●指令格式:LOOPNZ(LOOPE) OPR ●指令功能: (CX)-1→CX,若(CX)≠0 and ZF=0,则转向标号处执行循环体,否则顺序执行下一条指令 ●3. 循环控制指令4.2.4 程序控制类指令[例] 用累加的方法实现M×N,并把结果保存到 RESULT单元。MOV AX,0 MOV BX,M CMP BX,0 JZ TERM MOV CX,N JCXZ TERM L1: ADD AX,BX LOOP L1 TERM: MOV RESULT,AX ;清0累加器;被乘数为0转;乘数为0转;保存结果 ● 4. 过程调用与返回指令4.2.4 程序控制类指令 ●过程调用指令CALL必须同返回指令RET成对使用。 ●过程定义的形式如下: 过程名 PROC [near / far] code segment code1 segment main main proc procfar far …… …… call call sub sub …… …… ret ret main main endp endp code1 ends过程体RET 过程名 ENDP?段内调用:子程序与调用指令在同一个段内 包括:段内直接近调用段内间接近调用?段间调用:子程序与调用指令在不同段内 包括:段间直接远调用段间间接远调用code2 segment sub sub proc procnear far …… …… ret sub endp ret code sub ends endp code2 ends 段内调用和返回段间调用和返回 ● 4. 过程调用与返回指令 (1) CALL指令4.2.4 程序控制类指令一、段内调用●指令格式:CALL DST ●执行操作:?保存断点(IP入栈):(SP)←(SP)-2;((SP)+1,(SP))←(IP)? 重新设置IP值:①段内直接近调用 (IP)←(IP)+16位位移量②段内间接近调用(IP)←(EA) ● 4. 过程调用与返回指令 二、段间调用4.2.4 程序控制类指令①段间直接远调用 ●指令格式:CALL FAR PTR 过程名 ②段间间接远调用: ●指令格式: CALL DWORD PTR 过程名 ●执行操作:?保存断点(IP和CS入栈):(SP)←(SP)-2; ((SP)+1,(SP))←(CS) (SP)←(SP)-2; ((SP)+1,(SP))←(IP)?重新设置IP值:①段间直接远调用 (IP)← 偏移地址;(CS)← 段地址 ②段间间接远调用:(IP)←(EA) ;(CS)←(EA+2) ● 4. 过程调用与返回指令 (2) RET返回指令 ①段内近返回4.2.4 程序控制类指令●指令格式:RET●执行操作:(IP)← ((SP)+1, (SP)) (SP)←(SP)+2 ②段间远返回 ●指令格式:RET●执行操作:(IP)← ((SP)+1, (SP)) ;(SP)←(SP)+2 (CS)← ((SP)+1, (SP)) ;(SP)←(SP)+ 2 ● 5.中断指令(1)软中断指令 ●指令格式: INT N ●执行操作: (SP)←(SP)-2; (SP)←(SP)-2; (SP)←(SP)-2; (IP)←(N*4); (2)中断返回指令4.2.4 程序控制类指令((SP)+1, (SP))←(PSW) ((SP)+1, (SP))←(CS) ((SP)+1, (SP))←(IP) (CS)←(N*4+2)●指令格式:IRET ●执行操作: (IP)← (SP)+1, (SP)) ; (SP)←(SP)+2 (CS)← ((SP)+1, (SP)) ;(SP)←(SP)+ 2 (PSW)←((SP)+1, (SP)) ;(SP)←(SP)+ 2 23:06 23:000A 23:000E 23:13 23:17 23:001A BMOV SP, 100H M0V AX, 1234H MOV BX, 3673H PUSH AX (1) CALL SUBR (2) POP CX MOV AH, 02 MOV DL, 35H INT 21H INT 3H SUBR:POP AX POP CX (3) SUB CX,BX PUSH CX PUSH AX (4) RET (5)写出标号指令执行后 AX,BX,IP,SP的值
4.2.5 数据串操作类指令 ? “串”是指一组连续存取的数,所占用的M单元 一定是连续一片M区域.?数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。?利用串操作指令可以方便地处理字符串或数据块。 4.2.5 数据串操作类指令 一、串指令的特点1.指令格式 串指令可以显式地带有操作数,也可以使用隐含格式, 经常使用隐含格式。[例如]串传送指令MOVS,可以有以下几种格式: 显式:MOVS DST,SRC 隐式:MOVSB ;字节传送 MOVSW ;字传送 MOVSD ;双字传送 ?若指令的最后一个字母是B,则实现字节传送; ?若是W,则实现字传送; ?若是D,则实现双字传送。 ?操作数时应先建立地址指针。 一、串指令的特点2.操作数4.2.5 数据串操作类指令?串指令可以处理寄存器操作数和存储器操作数。 ?若为R操作数则只能放在累加器中,对于字节操作数应放在AL中,字操作数放在AX中。 ?对于M操作数应先建立地址指针: 若为源操作数, DS: SI, 允许使用段超越前缀。 若为目标操作数,ES:DI, 不允许使用段超越前缀3.地址指针的修改?串指令执行后系统自动修改地址指针SI、DI。 ?若为字节型操作其修改量为1, ?若为字型操作其修改量为2, ?若为双字型操作其修改量为4。 一、串指令的特点4.方向标志4.2.5 数据串操作类指令? DF决定地址指针的增减方向。?若DF=0,则地址指针增量;若DF=1,则地址指针减量。?可以用CLD和STD指令复位和置位DF。5.重复前缀?串指令前可以加重复前缀REPE/REPZ、 REP或REPNE/REPNZ,使后跟的串指令重复执行。?重复次数应事先初始化在计数器CX中。 4.2.5 数据串操作类指令1.串传送指令 MOVS ● MOVS(Move String):串传送●指令格式:MOVS DST,SRCMOVSB MOVSW 演示 演示●指令功能:ES:[DI] ← DS:[SI];将DS:SI所指源串的1个元素复制到ES:DI所指的内存单元SI和DI增加或减少1/2。若DF = 0,则增加,否则减少。 对标志位的影响:无。 4.2.5 数据串操作类指令2.串比较指令 CMPS● CMPS(Compare Strings):串比较●指令格式 : CMPS SRC ,DSTCMPSB CMPSW●指令功能:DS:[SI] C ES:[DI]; 将 DS:SI 所 指 源 串 的 1 个 元 素 与 ES:DI所指目的串的1个元素进行比较,不传送结果, 只根据比较结果设置标志位。 然后,SI和DI增加或减少1/2/4。 4.2.5 数据串操作类指令3.串扫描指令 SCAS● SCAS(Scan String):串扫描●指令格式 : SCAS DSTSCASB SCASW●指令功能:(先将AL/AX/ ←关键字 ),AL/AX―ES:[DI]; 将AL/AX与ES:DI所指目的串进行比较, 不传送结果,只根据比较结果设置标志位。然后,DI增加或减少1/2。 4.2.5 数据串操作类指令4.重复前缀? 无条件重复前缀 REP当CX ≠ 0重复执行后面的串指令, 每执行1次,CX = CX C 1;若(CX)=0,则结束重复? ( 相等/为零时)重复前缀REPE/REPZ当CX ≠ 0且ZF = 1时,重复执行后面的串指令; 每执行1次,CX = CX C 1,若(CX)=0(计数到)或ZF=0 (不相等),则结束重复。 4.2.5 数据串操作类指令 4.重复前缀? (不等/不为0时)重复前缀 REPNE/REPNZ当CX ≠ 0且ZF = 0时,重复执行后面的串指令; 每执行1次,CX = CX C 1 ,若(CX)=0(计数到)或ZF=1 (相等),则结束重复。 说明:若CX初值为0,则不执行任何操作,而且标志位不变。 4.2.5 数据串操作类指令字符串指令演示可添加的前缀 REP REPZ/REPE,REPNZ/REPNE REPZ/REPE, REPNZ/REPNEMOVS CMPS SCAS 4.2.5 数据串操作类指令串指令的用途?串指令主要用于处理连续的内存单元,与重复前缀配合使用更有效。? MOVS用于将一个内存块的数据复制到另一块; ?CMPS用于比较两个内存区的数据; ?SCAS可以在一个内存区中扫描与给定值首次匹配或不匹配的元素; [例1] 已知:在某50个字节的字符串中查找是否有‘$’ 字符,若有,将该字符的地址送入BX; 否则将BX清 ‘0’,字符串的偏移地址为0100H。 CLD MOV CX, 50 MOV DI,0100H MOV AL, ’$’ REPNE SCASB AND CX, 0FFH JZ ZER DEC DI MOV BX,DI JMP STOP ZER :MOV BX,0 STOP:HLT [例2] 检验100个字节被传送的数据是否与源串完全相 同。若相同将BX清‘0’,若不同BX指向源串中第一 个不相同字节的地址,并将该字节的内容保留在AL 中。假设源串的偏移地址为2400H,目标串的偏移地 址为0100H。 CLD MOV CX, 100 MOV SI, 2400H MOV DI, 0100H REPE CMPSB AND CX, 0FFH JZ EQQDEC SI MOV BX, SI MOV AL, [SI] JMP STOP EQQ: MOV BX, 0 STOP: HLT
【预备知识】1.外部设备的信号 ?数据信息 ?状态信息 ?控制信息 2.接口与端口的关系4.2.6 输入输出指令状态CPU系统 接 系统总线 总线数据外 外 设 设口控制?I/O接口包含多个存放数据、状态和控制信息的寄存器,分别以端口地址标识。 ?数据的输入/输出是通过I/O端口实现的。 ?80x86系统通过I/O指令实现对I/O端口的读写。 1.输入指令 IN4.26 输入输出指令?指令格式: IN 累加器, PORT ?功 能:把外设端口(PORT)的内容传送给累加器。 ?四种形式:格 式1 2 3 4 IN AL,DX功([DX])→AL能IN AL,PORT (PORT)→AL IN AX,PORT (PORT+1; PORT )→AX IN AX,DX ([DX]+1; [DX] )→AX 4.2.6 输入输出指令注意?端口地址PORT 是一个8位的立即数,其范围为0-255;?可以传送的数据为8位、16位或32位,相应的累加器 选择AL、AX或EAX; ?若端口号在0-255之间, 端口号直接写在指令中; 此为直接端口寻址方式?若端口号大于255,端口号通过DX寄存器间接寻址,即端口号应先放入DX中。此为间接端口寻址方式。 ?输入指令不影响标志位。 4.2.6 输入输出指令【例1】;AL← (21H端口);AX ← (21H,22H端口)(1) IN AL,21H(2) IN AX,21H(3) MOV DX,3F8HIN AL,DX ;AL ← (3F8H端口) 2.输出指令 OUT4.2.6 输入输出指令?指令格式:OUT PORT,累加器 ?功 能:把累加器的内容传送给外设端口。? 四种形式:格 式1 2 3 4 OUT DX,AL功(AL)→[DX]能OUT PORT,AL (AL)→PORTOUT PORT,AX (AX)→ PORT+1;PORT OUT DX,AX (AX)→[DX]+1;[DX]注意 累加器、端口号的选择,标志位的影响同IN指令。 4.2.6 输入输出指令【例2】对80H 端口下字节数据作取反操作。 MOV DX , 800H IN AL, 80H DX NOT ALOUT 80H DX , AL若端口地址改为800H, 程序作何修改? 4.2.6 输入输出指令3.I/O端口编址方式? I/O端口独立编址 ?内存储器和I/O端口各自有自己独立的地址空间; ?访问I/O端口需要专门的I/O指令(如8086 CPU) ? I/O端口与存储器统一编址 ? 把内存的一部分地址分配给I/O端口,一个8位端口 占用一个内存单元地址; ? 不设置专门的I/O指令;?优点:使用方便,降低CPU电路的复杂性; ?缺点:减少了内存可用范围;难以区分访问内存和I/O的指令,降低了程序的可读性和可维护性; 4.2.6 输入输出指令【总结】-- I/O端口的应用? 8086用于寻址外设端口的地址线为16条,无需分段,端口最多为216=64K个,端口号为0000H ~ FFFFH;? PC系列微机中I/O端口地址分配 : ? 仅使用A0~A9共10条地址线定义I/O端口设A10~A15= 0,寻址范围为0~3FFH;? 前256个端口地址供主板上寻址I/O接口芯片使用,后768个供扩展槽接口卡使用;
4.2.7 处理器控制类指令 标志操作指令CLD STD CLI STIDF←0 DF←1 IF←0(关中断) IF←1(开中断) ● 小结第4章 指令系统4.1 寻址方式 4.1.1 与数据有关的寻址方式 4.1.2 与转移地址有关的寻址方式 4.2 指令系统 ● 4.2.1 数据传送指令 ● 4.2.2 算术运算指令 ● 4.2.3 逻辑指令 ● 4.2.4 串处理指令 ● 4.2.5 控制转移指令 4.2.6 处理器控制指令● ―― 重要知识点 选择题:1.在MOVSB指令中,其目的串的物理地址为( ) A. DS*2*2*2*2+SI B. DS*2*2*2*2+DI C. ES*2*2*2*2+SI D. ES*2*2*2*2+DI 2.在串指令REP MOVSB中,重复次数一定放在( ) 寄存器中。 A. AX B. BX C. CX D. DX 3.下面指令中,合理而有意义的指令是( ) A. REP LODSB B. REP SCASB C. REP CMPSB D. REP MOVSB 4.串操作指令中,目标串操作数的段地址一定在 ( )寄存器中。 A. CS B. SS C. DS D. ES 5. 唯一代表存储空间中每个字节单元地址的是( ) A.段地址 B.偏移地址 C.有效地址 D.物理地址 6.在8086中存储器是分段组织,每段最大长度是( ) A.16KB B.32KB C.64KB D.128KB 7.下列四组寄存器中,属于通用寄存器的是( ) A. AX,BX,CX,DX B.SP,BP,IP C. SI,DI,FLAGS D.上属三者都是 8.下列四组寄存器中,在段内寻址时可以提供偏移 地址的寄存器组是( ) A. AX,BX,CX,DX B. BP,SP,IP,CS C. BX,BP,SI,DI D. BH,BL,CH,C 1. 程序分析题 MOV AX, 0 MOV BX, 1 MOV CX, 5 LOP:ADD AX, BX ADD BX, 2 LOOP LOP问题:(1)程序的功能是什么(可用算式表示)? (2)运行后,(AX)=? 2 .在BUF起的3个单元中有3个字节的数据,要求: 将第一个字节的高4位清零,第二个字节右移4位,且 移入第三个字节的低4位,而保持第三个字节的高4 位不变,试编写有关程序段。 LEA BX,BUF AND [BX],0FH MOV DL,[BX+1] AND DL,0FH MOV CL,4 SHR [BX+1],CL AND [BX+2],0F0H OR [BX+2],DL 3.已知(AX)=3200H,(DX)=0A000H,执行下 列程序段: (1)(AX)=(0CE00H) NOT AX NOT DX (DX)=(5FFFH) ADD AX,1 (2)双字长数DX,AX求补 ADC DX,0 问题:(1)程序执行后(AX)=( )(DX)=( ) (2)程序功能是什么? 4. 程序分析题,给出程序执行后SP和CX的运行结果 设(SP)=80H,(BX)=0FFH;(AX)=1 PUSH BX ADD BX,AX XOR BX,AX PUSH BX POP CX 立即寻址演示: MOV AL,34 立即寻址演示2 寄存器寻址演示: MOVBX ,AX 寄存器寻址演示2 直接寻址演示:MOV AX,[2000] 直接寻址演示2 寄存器间接寻址演示:MOV AX,[BX] 寄存器间接寻址演示2 寄存器相对寻址演示:MOV AL,1000[BX] 寄存器相对寻址演示2:MOV AX,1000[SI] 基址变址寻址演示:MOV AX,[BX] [SI] 基址变址寻址演示2 相对基址变址寻址演示:MOV AX,1000H[BX] [SI] 相对基址变址寻址演示2
更多相关文档

我要回帖

更多关于 mov ax 1200h 的文章

 

随机推荐