《第二章 微处理器指系统.ppt》由会员分享,可在线阅读,更多相关《第二章 微处理器指系统.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章微处理器指令系统l微处理器的内部结构l8088/8086的寻址方式l8088/8086指令系统2.1微处理器的内部结构l2.1.1 微处理器的基本结构1)算术逻辑单元(运算器)2)寄存器组:包括通用寄存器,地址寄存器,标志寄存器。3)指令处理单元(控制器):包括指令寄存器,指令译码逻辑,时序和控制逻辑2.1.2 8088/8086的功能结构l1、总线接口单元(BIU):由指令队列、指令指针、段寄存器、和总线控制逻辑等组成,负责CPU对存储器和外设进行访问。l2、执行单元(EU):由ALU、通用寄存器、地址寄存器、标志寄存器和指令译码逻辑等组成,负责指令的译码、执行和数据的运算。图2-1
2、8086内部结构框图 8088/8086执行程序的操作过程执行程序的操作过程(1)形成20位的地址,并将此地址送至程序存储器指定单元,从该单元取出指令字节,依次放入指令队列中。(2)每当8086的指令队列中有2个空字节,8088指令队列中有1个空字节时,总线接口部件就会自动取指令至队列中。(3)执行部件从总线接口的指令队列首取出指令代码,执行该指令。(4)当队列已满,执行部件又不使用总线时,总线接口部件进入空闲状态。(5)执行转移指令、调用指令、返回指令时,先清空队列内容,再将要执行的指令放入队列中。等待取指1 执行1等待取指2 执行2等待取指3 执行3MPU总线忙闲忙闲忙闲传统微处理器的指令
3、执行过程 取指1取指2取指3取指4取指5取指6EU总线执行1执行2执行3执行4执行5执行6忙忙忙忙忙忙BIU8088/8086CPU的指令执行过程 2.1.3 8088/8086的寄存器结构8088/8086中可供编程使用的有14个16位寄存器,按其用途可分为:通用寄存器、段寄存器、指针和标志寄存器。累加器AHALBHBLCLDHDLCHSPSIDIIPFLAGSCSDSSSESBP基址寄存器计数寄存器数据寄存器堆栈指针寄存器基址指针寄存器源变址寄存器目的变址寄存器指令指针寄存器标志寄存器代码段寄存器段寄存器附加段寄存器堆栈段寄存器数据寄存器地址指针和变址寄存器控制寄存器通用寄存器数据段寄存器
4、标志寄存器(FLAGS)150 OF DF IF TF SF ZF AF PF CF进进借借位位标标志志奇奇偶偶标标志志半半进进借借位位标标志志零零标标志志符符号号标标志志单单步步中中断断中中断断允允许许方方向向标标志志溢溢出出标标志志1-有进、借位有进、借位0-无进、借位无进、借位1-低低8位有偶数个位有偶数个10-低低8位有奇数个位有奇数个11-低低4位向高位向高4位有进、借位位有进、借位0-低低4位向高位向高4位无进、借位位无进、借位1-结果为结果为00-结果不为结果不为02.1.4 8088/8086的存储器结构l存储器以字节为单位存储信息l每个存储器单元(字节单元)都有一个地址如:0
5、0002H34Hl字或双字信息在存储器中占相邻的2个或4个存储单元,按“小端方式”存储,即“低字节对低地址、高字节对高地址”。存储器的分段管理l8088/8086CPU有20根地址线,最大可寻址的存储器单元数为2201Ml其物理地址范围为00000HFFFFFHl8088/8086CPU将1MB存储器空间分成逻辑段来管理。每个段最大限制为64KB。采用逻辑地址(段地址:偏移地址)的形式来表达每个存储器单元的物理地址。l段地址说明逻辑段在主存中的起始位置,采用16位二进制数据表示,保存在16位的段寄存器(CS,DS,ES,SS)中。l偏移地址说明主存单元距离段起始位置的偏移量,也采用16位二进制
6、数据表示。l物理地址 段地址10H+偏移地址l物理地址是唯一的,逻辑地址不是唯一的。物理地址和逻辑地址的进一步说明l8088/8086CPU中有一个20位地址加法器,它将段寄存器提供的段地址自动乘以10H,即左移4位,再与16位的偏移地址相加,并锁存在物理地址锁存器中。l物理地址 段地址10H+偏移地址段地址:CS、DS、ES、SS偏移地址:IP、DI、SI、BP、SP等16位位偏移量偏移量段寄存器值段寄存器值+物理地址物理地址20位位16位位4位位段寄存器和偏移地址寄存器的组合 CS 0000 IP代码段代码段 DS或或ES 0000 SI、DI或或BX SS 0000 SP或或BP数据段数
7、据段堆栈段堆栈段2.2 8088/8086的寻址方式l指令由操作码和操作数两部分组成。如:MOV AH,0B9Hl操作码说明计算机要执行何种操作,是指令中不可缺少的部分。l操作数是指令执行的参与者,也就是各种操作的对象。l寻找操作数的方式叫做操作数的寻址方式。l操作数可以存放于操作码之后立即数寻址方式l操作数可以存放于CPU内部的寄存器中寄存器寻址方式l操作数可以存放于存储器中存储器寻址方式2.2.1 立即数寻址方式l立即数操作数(imm)直接存放于机器代码中,紧跟在操作码之后。它可以是8位数值(i8,00HFFH),也可以是16位数值(i16,0000H FFFFH)。lMOV AX,123
8、4H;l操作数1234H即使用立即数寻址方式。指令执行后AX=1234H,其中AH=12H,AL=34H。2.2.2 寄存器寻址方式l寄存器操作数存放于CPU的内部寄存器reg中。它可以是8位寄存器(r8,AH/AL/BH/BL/CH/CL/DH/DL),或是16位寄存器(r16,AX/BX/CX/DX/SI/DI/BP/SP)。lMOV AX,BX;l操作数AX、BX均使用寄存器寻址方式,指令执行后AX中的值与BX中的值相同,BX中的值不变。2.2.3 存储器寻址方式l存储器操作数存放于存储器单元中。指令中给出的是操作数所在的存储器单元的逻辑地址。因段地址在段寄存器中,故只要给出偏移地址(也
9、称有效地址,EA)即可。l直接寻址方式l寄存器间接寻址l寄存器相对寻址l基址变址寻址l相对基址变址寻址直接寻址方式l指令中直接给出操作数的有效地址。段地址默认在数据段寄存器DS中,可以使用段超越前缀来改变。l设DS=1492H,ES=1492H,16920H=12H,16921H=34HlMOV AH,2000H;AH=12HMOV AX,ES:2000H;AX=3412H;AH=34H;AL=12HlWVAR DW 3412H;设WVAR的偏移地址为2000H MOV AX,WVAR;AX=3412H寄存器间接寻址l操作数的有效地址存放于基址寄存器BX、BP或变址寄存器SI、DI中。当使用寄
10、存器BX/SI/DI寻址时,默认的段寄存器为DS;当使用寄存器BP寻址时,默认的段寄存器为SS。均可以使用段超越前缀改变。l设DS=1492H,ES=1492H,BX=2000H,16920H=12HlMOV AL,BX;AL=12HlMOV DH,ES:BX;DH=12H寄存器相对寻址l操作数的有效地址是寄存器(BX/BP/SI/DI)的内容与有符号8位或16位位移量之和。当使用寄存器BX/SI/DI寻址时,默认的段寄存器为DS;当使用寄存器BP寻址时,默认的段寄存器为SS。均可以使用段超越前缀改变。l设DS=1492H,ES=1492H,SI=2000H,16926H=12HlMOV AL
11、,SI06H;AL=12HlMOV DH,ES:SI+06H;DH=12HlMOV AX,DI+WVAR基址变址寻址l操作数的有效地址是一个基址寄存器(BX或BP)的内容与一个变址寄存器(SI或DI)的内容之和。当使用基址寄存器BX时,默认的段寄存器为DS;当使用基址寄存器BP时,默认的段寄存器为SS。均可以使用段超越前缀改变。l设DS=1492H,ES=1492H,BX=2000H,SI=06H,16926H=12HlMOV AL,BXSI;AL=12HlMOV DH,ES:BX+SI;DH=12HlMOV AX,BXSI基址变址相对寻址l操作数的有效地址是一个基址寄存器(BX或BP)的内容
12、,一个变址寄存器(SI或DI)的内容与有符号8位或16位位移量之和。当使用基址寄存器BX时,默认的段寄存器为DS;当使用基址寄存器BP时,默认的段寄存器为SS。均可以使用段超越前缀改变。l设DS=1492H,BX=2000H,DI=04H,16926H=12HlMOV AL,BXDI+02H;AL=12HlMOV AX,BX+SI+WVARMOV AX,WVARBX+SIMOV AX,WVARBXSI8088/8086指令系统l数据传送类指令l算术运算类指令l位操作指令l串操作指令l控制转移类指令l处理器控制类指令l输入输出类指令l要求掌握指令的格式、功能、所支持的寻址方式、对标志的影响及其它
13、隐含的用法等约定的操作数的表示符号li88位立即数,i1616位立即数imm代表i8或i16lr88位通用寄存器,r1616位寄存器reg代表r8或r16lseg段寄存器CS、DS、ES、SSlm88位存储器操作数,m1616位存储器操作数,mem代表m8或m16ldest目的操作数src源操作数1、传送指令 MOVlMOV reg/mem,imm ;立即数送寄存器或主存lMOV reg/mem/seg,reg;寄存器送(段)寄存器或主存lMOV reg/seg,mem ;主存送(段)寄存器lMOV reg/mem,seg ;段寄存器送寄存器或主存lMOV AX,04HlMOV AH,ALlM
14、OV DH,BXlMOV AX,DSMOV指令的进一步说明l包括MOV在内的绝大多数双操作数指令,目的操作数与源操作数必须类型一致,或者同为字,或者同为字节。MOV AX,BH;非法指令l将立即数MOV至主存时,应明确指出是字节传送还是字传送。MOV BYTE PTR DI,0AH;DS:DI=0AHMOV WORD PTR DI,0AH;DS:DI=0AH,DS:DI+1=00Hl除串操作指令外,不允许两个操作数都是存储器操作数。MOV WVAR1,WVAR2;非法指令,可用通用寄存器中转l不允许段寄存器之间的MOV;不允许立即数MOV到段寄存器;MOV DS,ES;非法指令,可用通用寄存器
15、中转MOV DS,0100H;非法指令,可用通用寄存器中转l不允许手工修改CS的值。MOV CS,AX;非法指令2、交换指令 XCHGlXCHG reg,reg/mem;lXCHG reg/mem,reg;l源操作数与目的操作数交换lMOV AX,1234H;AH=12H,AL=34HXCHG AH,AL;AH=34H,AL=12Hl不能在存储器与存储器之间交换数据3、换码指令 XLATlXLAT ;ALBX+ALl换码(查表转换)过程为:先在主存中建立一字节表格,将表格的首地址存放于BX寄存器中,将欲查元素的序号存放于AL寄存器中,执行XLAT,则AL中的内容即为欲查元素。lTABLE1 D
16、B 41H,42H,43H,44H,45H,46H,47H MOV BX,OFFSET TABLE1MOV AL,03HXLAT ;AL=44H45、堆栈操作指令l堆栈是主存中开辟的用于暂时存放数据的一个特殊区域。按先进后出或后进先出的原则管理。堆栈段的段地址存放于段寄存器SS中,偏移地址存放于寄存器SP中。lPUSH r16/m16/seg;SP=SP2,SS:SP=r16/m16/seglPOP r16/m16/seg;r16/m16/seg=SS:SP,SP=SP+2l堆栈操作为16位操作;不能将立即数压入堆栈;进栈和出栈的操作伴随着堆栈指针SP的调整,SS:SP永远指向堆栈段的栈顶。6
17、16、标志操作指令lCLC ;CF=0lSTC ;CF=1lCMC ;CF=CFlCLD ;DF=0lSTD ;DF=1lCLI ;IF=0lSTI ;IF=1lLAHF ;AH=FLAGS的低8位lSAHF ;FLAGS的低8位=AHlPUSHF ;SP=SP2,SS:SP=FLAGSlPOPF ;FLAGS=SS:SP,SP=SP+217、有效地址传送指令 LEAlLEA r16,mem;r16mem的偏移地址lWVAR DW 1234H;设其偏移地址为01H MOV BX,WVAR;BX=1234HLEA SI,WVAR ;SI=0001HMOV CX,SI ;CX=1234HMOV D
18、I,OFFSET WVAR;DI=0001HMOV DX,DI ;DX=1234HlOFFSET只能用于简单变量。1819、指针传送指令lLDS r16,mem;r16mem,DS=mem+2 lLES r16,mem;r16mem,ES=mem+22021、加法减法指令lADD reg,imm/reg/memADD mem,imm/reglADD dest,src;dest=destsrclSUB dest,src;dest=destsrcl目的操作数不能为立即数l两操作数不能同时为存储器操作数l按定义影响6个状态标志位OF、SF、ZF、AF、PF、CF对状态标志位影响情况的说明l不影响;如
19、:MOV指令l按定义影响;如:ADD指令l强制(规定)影响;如:CLC指令l未(无)定义(随机影响);如:MUL指令对6个状态标志位的进一步说明lCF进位标志位,做加法时最高位出现进位或做减法时最高位出现借位,该位置1,反之为0。lPF奇偶标志位,当运算结果的低8位中l的个数为偶数时,则该位置1,反之为0。lAF半进位标志位,做加法时,当低4位有向高4位的进位,或在做减法时,低4位有向高4位的借位时,该标志位就置1,反之为0。lZF零标志位,运算结果为0时,该标志位置1,否则清0。lSF符号标志位,当运算结果的最高位为1,该标志位置1,否则清0。lOF溢出标志位。加法运算:若两个加数的最高位为
20、0,而和的最高位为1,则产生上溢出;若两个加数的最高位为1,而和的最高位为0,则产生下溢出;两个加数的最高位不相同时,不可能产生溢出。减法运算:若被减数的最高位为0,减数的最高位为1,而差的最高位为1,则上溢出;若被减数的最高位为1,减数的最高位为0,而差的最高位为0,则下溢出;被减数及减数的最高位相同时,不可能产生溢出。2223、带进位加减法指令lADC reg,imm/reg/memADC mem,imm/reglADC dest,src;dest=destsrc+CFlSBB dest,src;dest=destsrcCFl目的操作数不能为立即数l两操作数不能同时为存储器操作数l按定义影
21、响6个状态标志位24、比较指令 CMPlCMP dest,src;destsrcl按定义影响6个状态标志位lCMP指令将目的操作数与源操作数相减,但差值不回送目的操作数。它通过减法运算影响状态标志位,用于比较两个操作数的大小关系。2526、增量和减量指令lINC reg/mem;reg/mem=reg/mem1lDEC reg/mem;reg/mem=reg/mem1l不影响CF标志,但影响其它状态标志位27、求补指令 NEGlNEG reg/mem;reg/mem=0reg/meml按定义影响6个状态标志位l当操作数为128或32768时,操作数不变,但OF置位。l通常总是使CF=1,除非操
22、作数为0。2829、符号扩展指令lCBW;AL符号扩展成AX若AL的最高有效位是0,则AH=00H;若AL的最高有效位是1,则AH=FFH;lCWD;AX符号扩展成DX.AX若AX的最高有效位是0,则DX=0000H;若AX的最高有效位是1,则DX=FFFFH;3033、乘法指令lMUL r8/m8;AX=ALr8/m8,无符号乘法lMUL r16/m16;DX.AX=AXr16/m16lIMUL r8/m8;AX=ALr8/m8,有符号乘法lIMUL r16/m16;DX.AX=AXr16/m16l只影响OF和CF,对其它状态标志无定义。l若乘积的高一半是低一半的符号扩展,则OF=CF=0;
23、否则均为1。3437、除法指令lDIV r8/m8;无符号字节除法,AL=AXr8/m8的商,AH=AXr8/m8的余数。lDIV r16/m16;无符号字除法,AX=DX.AXr16/m16的商,DX=DX.AXr16/m16的余数。lIDIV r8/m8;有符号字节除法,AL=AXr8/m8的商,AH=AXr8/m8的余数。lIDIV r16/m16;有符号字除法,AX=DX.AXr16/m16的商,DX=DX.AXr16/m16的余数。l除法指令对6个状态标志位均无定义。l但当除数为0或商溢出时将产生编号为0的内部中断,指示除法错误。3843、十进制调整指令lCPU可以做BCD码和ASC
24、II码的算术运算,这是通过对BCD码和ASCII码算术运算调整指令来实现的。l在需要很少算术运算的销售点终端(现金出纳机),会出现BCD操作;一些程序使用ASCII数据,要执行ASCII运算。lBCD码和ASCII码算术运算今天已经很少使用了4448、逻辑运算指令lAND dest,src;dest=dest “与”srclOR dest,src ;dest=dest “或”srclXOR dest,src;dest=dest “异或”srclTEST dest,src;dest “与”srclNOT reg/mem;reg/mem=reg/mem的“非”l双操作数逻辑运算指令均置OF=CF=
25、1,按定义影响SF、ZF和PF,对AF无定义。lNOT指令不影响状态标志位。4952、移位指令lSHL reg/mem,1/CL;reg/mem左移1/CL位,最低位补0,最高位进入CFlSHR reg/mem,1/CL;reg/mem右移1/CL位,最高位补0,最低位进入CFlSAL reg/mem,1/CL;与SHL是同一指令lSAR reg/mem,1/CL;reg/mem右移1/CL位,最高位不变,最低位进入CFl按照移入的位设置CF;按定义影响SF、ZF、PF;对AF无定义。l移位次数为1时,若移位前后操作数最高位不同,则OF=1;否则OF=0。l移位次数大于1,OF无定义。0操作数
26、操作数CF逻辑逻辑/算术左移算术左移SHL/SAL0CF操作数操作数逻辑右移逻辑右移SHR操作数操作数CF算术右移算术右移SAR5356、循环移位指令lROL reg/mem,1/CL;不带进位循环左移lROR reg/mem,1/CL;不带进位循环右移lRCL reg/mem,1/CL;带进位循环左移lRCR reg/mem,1/CL;带进位循环右移l按照移入的位设置CF;不影响SF、ZF、PF、AF。l移位次数为1时,若移位前后操作数最高位不同,则OF=1;否则OF=0。l移位次数大于1,OF无定义。操作数操作数CF左循环移位左循环移位ROL操作数操作数CF右循环移位右循环移位ROR操作数
27、操作数CF带进位右循环移位带进位右循环移位RCR操作数操作数CF带进位左循环移位带进位左循环移位RCL控制转移类指令l控制转移类指令修改CS和IP的值来改变程序的执行顺序。l其转移地址的寻址方式有:相对寻址指令代码中提供目的地址相对于当前IP的位移量直接寻址指令代码中提供目的地址的CS和IP的值间接寻址指令代码中指示寄存器或存储单元,目的地址从 寄存器或存储单元中间接获得l根据转移的距离可分为:近转移在当前代码段内转移,转移范围为32KB短转移转移的位移量可以用一个字节表达,即转移范围为 128 +127之间远转移从当前代码段跳转到另一代码段,需提供CS和IP 的值57、无条件转移指令 JMP
28、l段内相对转移JMP label ;IP=IP+位移量l段内间接转移JMP r16/m16 ;IP=r16/m16l段间直接转移JMP far ptr label;IP=偏移地址,CS=段地址l段间间接转移JMP far ptr mem;IP=mem,CS=mem+2l通常,汇编程序能根据label的位置自动生成短转移、近转移或远转移指令。条件转移指令 JcclJcc label;条件满足,IP=IP+8位位移量;否则,顺序执行l指令Jcc中的cc表示利用标志判断的条件,共有16种。l指令Jcc只支持相对短转移的寻址方式,因而只能实现段内128127个字节范围的转移。l因为指令Jcc要利用影响
29、标志的指令执行后的标志状态来形成判定条件,所以在Jcc指令之前,常有比较CMP、测试TEST、加减运算、逻辑运算等指令。5867、判断单个标志位状态的JcclJZ/JE label ;ZF=1跳转至label处JNZ/JNE label;ZF=0跳转至label处lJS label ;SF=1跳转至label处JNS label ;SF=0跳转至label处lJO label ;OF=1跳转至label处JNO label ;OF=0跳转至label处lJP/JPE label ;PF=1跳转至label处JNP/JPO label;PF=0跳转至label处lJC label ;CF=1跳转
30、至label处JNC label ;CF=0跳转至label处6869、比较无符号数高低的JcclJB/JNAE/JC label ;CF=1,低于/不高于等于JNB/JAE/JNC label;CF=0,不低于/高于等于lJBE/JNA label;CF=1或ZF=1,低于等于/不高于JNBE/JA label;CF=0且ZF=0,不低于等于/高于7073、比较有符号数大小的JcclJL/JNGE label ;SFOF,小于/不大于等于JNL/JGE label ;SF=OF,不小于/大于等于lJLE/JNG label;ZF OF或ZF=1,小于等于/不大于JNLE/JG label;S
31、F=OF且ZF=0,不小于等于/大于7477、循环指令lLOOP label ;CX=CX1;若CX0,转移lLOOPE label ;CX=CX1;若CX0且ZF=1,转移lLOOPNE label;CX=CX1;若CX0且ZF=0,转移lJCXZ label ;若CX=0,转移l循环指令是针对CX计数器的计数循环指令l指令中的操作数label只能采用相对短转移寻址方式,转移范围为段内128127个字节l循环指令不影响标志78、子程序指令 CALLlCALL label ;相对寻址的段内调用SP=SP-2,SS:SP=IP;IP=IP+16位位移量lCALL r16/m16 ;间接寻址的段内
32、调用SP=SP-2,SS:SP=IP;IP=IP+r16/m16lCALL far ptr label;直接寻址的段间调用SP=SP-2,SS:SP=CS;SP=SP-2,SS:SP=IP;IP=label偏移地址,CS=label段地址lCALL far ptr mem;间接寻址的段间调用SP=SP-2,SS:SP=CS;SP=SP-2,SS:SP=IP;IP=mem,CS=mem+2l实际编程中,汇编程序会自动确定是段内还是段间调用。79、子程序返回指令 RETlRET ;返回lRET i16;返回,调整指针SP=SP+i16lRET指令用在子程序中,实现调用的返回。l汇编程序会自动根据C
33、ALL指令来产生相应的返回操作。lRET指令执行时伴随着CS,IP,SP的调整。8082、中断指令lCPU因某个特殊事件将当前程序挂起(暂停),转去处理这个特殊事件的程序,处理结束后再返回被挂起的程序,此过程称为“中断”。当前程序被挂起的位置称为“断点”,处理特殊事件的程序称为“中断服务程序”。l8088/8086CPU支持256个中断。分为内部和外部中断。每个中断用一个中断编号(中断向量)来区别。相应的中断服务程序的起始地址按中断向量号顺序存放在00000H003FFH的内存单元中,形成“中断向量表”。lINT i8;产生i8号中断IRET ;中断返回指令INTO ;溢出中断指令,若OF=1
34、,产生4号中断。系统功能调用l操作系统DOS和基本输入输出系统BIOS都提供了丰富的中断服务程序让程序员使用。l系统功能调用的步骤为:在AH寄存器中设置子功能调用号;在指定寄存器中设置入口参数;用INT i8来执行系统功能调用;根据出口参数分析功能调用执行情况;INT 21H 用法介绍l子功能号:AH01H;出口参数:AL=输入字符的ASCII码;功能:等待从键盘输入一个字符,将其ASCII码送入AL,同时回显。输入字符后,不需回车。l子功能号:AH02H;入口参数:DL=要显示字符的ASCII码;功能:在当前光标位置显示DL中的字符,光标右移。l子功能号:AH09H;入口参数:DS:DX=要
35、显示字符串的首地址,且字符串必须以“$”结束;功能:在当前光标位置显示由DS:DX所指的字符串,光标右移。“$”并不显示。l子功能号:AH0AH;入口参数:DS:DX=输入缓冲区的首地址;功能:从键盘读入一个字符串,以回车结束,存放在DS:DX所指的缓冲区。8388、处理器控制类指令lNOP ;空操作lSEG:;段超越前缀lLOCK:;封锁前缀lHLT ;暂停lESC 6位立即数,reg/mem;交权lWAIT ;等待 习 题l2.5答:FFFFH:0H=FFFF0H 40H:17H=00417H 2000H:4500H=24500H B821H:4567H=BC777Hl2.8答:AX=12
36、00H,立即数寻址 AX=0100H,寄存器寻址 AX=4C2AH,直接寻址 AX=3412H,寄存器间接寻址 AX=4C2AH,寄存器相对寻址 AX=7865H,基址变址寻址 AX=65B7H,基址变址相对寻址习 题l2.9答:操作数类型不同;不能手工修改IP;不能将立即数直接MOV到段寄存器;不能在段寄存器之间直接MOV数据;300大于AL所能存放的数据的范围;寄存器间接寻址只能用BX/BP/SI/DI之一;MOV AX,BX+DI;目的操作数不能是立即数;l2.10答:lea bx,table;bx=0200hmov al,8 ;al=08hxlat ;al=12h习 题l2.11答:a
37、l=89h al=12h,CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1 al=afh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=0 al=afh,CF=1,ZF=0,SF=1,OF=1,PF=1,AF=0 al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=0 al=ffh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=1 al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=1l2.12答:add dx,bx;add al,bx+si;add bx+00b2h,cx add word ptr 0520h,3412h ad
38、d al,0a0hl2.13答:(V(X*Y+Z 540)/X习 题l2.14答:ax=1470h ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0 ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0 ax=0000h,CF=0,ZF=0,SF=0,OF=1,PF=1 ax=0ffffh,CF=0,ZF=0,SF=0,OF=1,PF=1 ax=0ffffh,CF=0,ZF=0,SF=1,OF=0,PF=1l2.16答:1256h;3280hl2.17答:ax=1e1eh;al=1*1b;cx64hl2.18答:65536l2.19答:将array数组的20个字
39、(无进位)累加,其和存入 total单元。习 题l2.20答:mov dl,string mov dh,string+5 mov ax,word ptr buffer1 sub ax,word ptr buffer2 mov dx,word ptr buffer1+2 sbb dx,buffer2+2 test dx,0f0h je t1 mov ax,-1 jmp donet1:mov ax,0done:.mov ax,1234h mov dx,5678h mov cx,4lp1:shr dx,1 rcr ax,1 loop lp1 lea bx,array mov cx,100lp1:su
40、b bx,1 inc bx loop lp1习 题l2.25答:.model small.stack 100h.data message db “Input Number:09”,0dh,0ah,“$”error db “Error!”,0dh,0ah,“$”.code.startup mov dx,offset message mov ah,09h int 21hbegin1:mov ah,01h int 21h cmp al,“0”jb err1 cmp al,“9”ja err1 mov dl,al mov ah,02h int 21h .exit err1:mov offset error mov ah,09h int 21h jmp begin1 end