PC硬件04章汇编语言基础:寻址方式.ppt
预备知识预备知识1CPUCPU、寄存器、存储器寄存器、存储器8086/8088 CPU8086/8088 CPU的结构的结构28086/8088 CPU的结构内存内存内存内存外设外设外设外设I/OI/OI/OI/ODBDBABABCBCB数据总线数据总线数据总线数据总线DBDB地址总线地址总线地址总线地址总线ABAB控制总线控制总线控制总线控制总线CBCB通用通用寄存器寄存器指针与指针与变址寄变址寄存器存器段寄存器段寄存器标志 寄存器38086/8088 CPU的结构内存内存内存内存外设外设外设外设I/OI/OI/OI/ODBDBABABCBCB数据总线数据总线DB地址总线地址总线AB控制总线控制总线CB通用通用寄存器寄存器指针与指针与变址寄变址寄存器存器段寄存器段寄存器取指(令)译码取数取数(数据或数据或地址地址)执行标志标志 寄存器寄存器48086/8088CPU的寄存器8086/8088的寄存器分为4种类型:(1)通用寄存器(2)指针和变址寄存器(3)段寄存器(4)标志寄存器6(1)通用寄存器7(2)指针与变址寄存器8(3)段寄存器9(4)标志寄存器标志寄存器长度为16位,其中9个位有定义。溢出溢出溢出溢出overflow overflow Flag方向方向方向方向directiondirectionFlag中断中断中断中断interruptinterruptFlag符号符号符号符号symbol,symbol,-negative,+positive-negative,+positive零零零零zerozero辅助进位辅助进位辅助进位辅助进位Auxiliary Carry Flag奇偶奇偶奇偶奇偶parity,parity,偶偶偶偶even,even,奇奇奇奇oddodd进位进位进位进位carrycarryTF陷阱陷阱,单步单步trap10CF,Carry Flag,进位标志 两数相加,最高位向前位的进位;或两数相减最高位向前位的借位 举例:1000 00011000 00000000 0001+11000 00001000 00011111 11111有进位有进位CF=1有借位有借位CF=1两数相加两数相加两数相减两数相减2 211AF,Auxiliary Carry Flag辅助进位标志(半进位半进位)两数相加,第3位向前位的进位;或两数相减第3位向前位的借位 举例:0000 10010001 10000001 0001+0000 00000000 00011111 1111两数相加两数相加有辅助进位有辅助进位AF=1有辅助借位有辅助借位AF=1两数相减两数相减2 212PF,Parity Flag,奇偶标志算术或逻辑运算结果的低低8位中含有1的位数是偶数时:PF=1;是奇数时:PF=0 举例:1000 0101 1010 11001001 1101 1001 01111000 0101 1000 0100AND运算结果运算结果AL中有中有2个个“1”,偶性,偶性,结果为结果为:PF=113ZF,Zero Flag 零标志计算处理结果为0,则ZF为1.举例:1111 11110000 00010000 0000+进位进位1相加结果为相加结果为0,ZF=1相加结果有进位相加结果有进位,CF=114 SF,Sign Flag,符号标志 操作结果的符号位(即最高位的状态),结果为正SF=0,为负SF=1 举例:1000 0101 1010 11001001 1101 1001 01111000 0101 1000 0100AND结果结果为负为负:SF=115OF,Overflow Flag,溢出标志算术操作,结果超过目标所能容纳的范围举例:0111 1110 (+126)0000 0011 (+3)1000 0001 (-127)+进位到符号位,值被改变,溢出,进位到符号位,值被改变,溢出,CF=116IFinterrupt中断允许标志中断允许标志(允许中断否)(允许中断否)DF direction方向标志方向标志(存取方向)(存取方向)TF trap陷阱标志,单步标志陷阱标志,单步标志(用于调试程序)(用于调试程序)标志位在汇编语言程序设计中非常标志位在汇编语言程序设计中非常重要重要,必须掌握好必须掌握好17中为英文全拼或简拼(中为英文全拼或简拼(为简化部分),单词中的大写部分为简化部分),单词中的大写部分为简写所取字符。为简写所取字符。标志名标志名中文中文标志为标志为1 1时时标志为标志为0 0时时OFOverflow Flag OFOverflow Flag 溢出标志溢出标志ovOVerflow nvNot oVerflowovOVerflow nvNot oVerflowDFDirection FlagDFDirection Flag方向方向dnDowNupUPdnDowNupUPIFInterrupt FlagIFInterrupt Flag中断中断eiEnable ItdiDisable IteiEnable ItdiDisable ItSFSign FlagSFSign Flag符号符号ngNeGative signplPLus signngNeGative signplPLus signZFZero FlagZFZero Flag零零zrZeRo nzNot ZerozrZeRo nzNot ZeroAFAuxiliary carry FlagAFAuxiliary carry Flag辅进位辅进位acAuxiliary CarrynaNot AuxacAuxiliary CarrynaNot AuxPFParity FlagPFParity Flag奇偶校验奇偶校验 peParity EvenpoParity Odd peParity EvenpoParity OddCFCarry Flag CFCarry Flag 进位进位 cyCarrYncNot Carry cyCarrYncNot Carry 18debug中查看状态寄存器中查看状态寄存器debug中查看状态寄存器of(溢出)df(方向)if(中断)sf(符号)zf(零)af(辅助进位)pf(奇偶)cf(进位)为1的时候ov(OVerflow)dn(DowN)ei(EnableInterrupt)ng(NeGtive)zr(ZeRo)ac(AuxiliaryCarry)pe(ParityEven)cy(CarrY)为0的时候nv(NotoVerflow)up(UP)di(DIsableinterrupt)pl(PLus)nz(NotZero)na(NotAuxiliary)po(ParityOdd)nc(NotCarry)19第四章第四章 汇编语言汇编语言 一、寻址方式一、寻址方式(8086CPU)(80X86CPU)21通用寄存器通用寄存器AXBXCXDXSPBPSIDIEAXEBXECXEDXESPEBPESIEDI 31 15 7 0 8086Accumulator 累加器累加器Base 基址寄存器基址寄存器Count 计数寄存器计数寄存器Data 数据寄存器数据寄存器Stack pointer 堆栈指示器堆栈指示器Base pointer 基址指示器基址指示器Source index 源变址器源变址器Destination index 目的变址器目的变址器DLCLBLALDHCHBHAH 可以当作可以当作 8 位寄存器使用位寄存器使用22EAXEBXECXEDXESPEBPESIEDI 31 15 7 0 通用寄存器通用寄存器AXBXCXDXSPBPSIDI804868086Accumulator 累加器累加器Base 基址基址Count 计数计数Data 数据数据Stack pointer 堆栈指示器堆栈指示器Base pointer 基址指示器基址指示器Source index 源变址器源变址器Destination index 目的变址器目的变址器DLCLBLALDHCHBHAH 可以当作可以当作 8 位寄存器使用位寄存器使用23EAXEBXECXEDXESPEBPESIEDI 31 15 7 0 通用寄存器通用寄存器AXBXCXDXSPBPSIDI804868086Accumulator 累加器累加器Base 基址基址Count 计数计数Data 数据数据Stack pointer 堆栈指示器堆栈指示器Base pointer 基址指示器基址指示器Source index 源变址器源变址器Destination index 目的变址器目的变址器DLCLBLALDHCHBHAH 可以当作 8 位寄存器使用 指示器和变址寄存器指示器和变址寄存器访问内存必须指出要访问的内存单元地址,访问内存必须指出要访问的内存单元地址,这些地址值会增加指令的长度。这些地址值会增加指令的长度。把地址存放在特定的寄存器中,则指令中只要把地址存放在特定的寄存器中,则指令中只要给出这些寄存器的名称即可,它们是:给出这些寄存器的名称即可,它们是:变址寄存器变址寄存器 指针寄存器指针寄存器 SI DI SP BP 与与 DS 联用联用 与与 SS 联用联用 数据段寄存器数据段寄存器数据段寄存器数据段寄存器 堆栈段寄存器堆栈段寄存器堆栈段寄存器堆栈段寄存器 数据段数据段数据段数据段寻址寻址寻址寻址堆栈堆栈堆栈堆栈段寻段寻段寻段寻址址址址24 80868086是是1616位位CPUCPU内部寄存器和内部数据线、外部数据线均为内部寄存器和内部数据线、外部数据线均为1616位位 地址线地址线2020位位 ,可直接寻址,可直接寻址 1MB1MB。(2 22020=1MB=1MB)如何使用如何使用 16 16 位寄存器生成位寄存器生成 20 20 位地址呢?位地址呢?将将 1 MB1 MB空间分为若干段,每段空间分为若干段,每段 64 KB64 KB(216=64K216=64K)使用段寄存器使用段寄存器CSCS,DSDS,SSSS,ES ES 存储段基址存储段基址存储器分段存储器分段26存储器存储器 分段分段 段寄存器段寄存器 0 0 0 019 0偏移地址量偏移地址量20 位物理地址位物理地址15 019 0 +段寄存器(段寄存器(16位)左移位)左移 4 位位与寄存器(与寄存器(16位)相加,位)相加,得到得到20位地址位地址例如,例如,某个段寄存器内容为某个段寄存器内容为 C018H,即表示该段物理即表示该段物理地址从地址从 C018 0 H 开始,该段最后一个地址为开始,该段最后一个地址为:C 0 1 8 0 H+F F F F H=D 0 1 7 F H64KB64KB28存储器存储器 分段分段存储器分段存储器分段从从 8086 开始开始使用使用段寄存器段寄存器 段寄存器段寄存器 0 0 0 019 4 3 0 15 0 偏移地址量偏移地址量相加相加20 位物理地址位物理地址(CS)+0000(DS)+0000(SS)+0000(ES)+0000代码段代码段共共64K 字节字节附加段附加段共共64K 字节字节堆栈段堆栈段共共64KB 字节字节数据段数据段共共64KB字节字节重叠部分重叠部分存储器分段可以相互重叠存储器分段可以相互重叠.1MB段末地址段末地址(CS)+0ffffH段末地址段末地址(ES)+0ffffH64KB64KB29寻址方式寻址方式 (8086指令集)指令集)1.在指令中在指令中 2.在寄存器中在寄存器中 3.在在存储器中存储器中 4.I/O端口操作数端口操作数立即数立即数寄存器寄存器操作数操作数存储器操作数存储器操作数I/O操作数操作数立即数寻址立即数寻址 寄存器寻址寄存器寻址 存储器寻址存储器寻址 I/O端口寻址端口寻址第第1种寻址方式:种寻址方式:mov ax,1234第第2种寻址方式:种寻址方式:mov bx,ax操作数存放位置操作数存放位置操作数名称操作数名称寻址方式寻址方式(11种种)有有7种寻址方式种寻址方式,第第3-9种种有有2种寻址方式种寻址方式,第第10,11种种立即数立即数立即数立即数4个位置个位置4种操作数种操作数11种种寻址方式寻址方式寻找操作数的方式叫寻址方式寻找操作数的方式叫寻址方式寻找操作数的方式叫寻址方式寻找操作数的方式叫寻址方式寻址方式越多,寻址方式越多,寻址方式越多,寻址方式越多,CPUCPU的功能越强大的功能越强大的功能越强大的功能越强大30每段起始地址值的低每段起始地址值的低 4 位恒为位恒为 0(二进制数)。(二进制数)。物理地址物理地址由二部分组成:由二部分组成:段起始地址段起始地址 相对段起始地址的相对段起始地址的偏移量偏移量 *段可以相互重叠。故存储器分段方案众多。段可以相互重叠。故存储器分段方案众多。存储器分段存储器分段段基址与内存单元的距离段基址与内存单元的距离偏移地址偏移地址物理地址物理地址=段基址左移段基址左移4位位+偏移量偏移量31寻址方式寻址方式(8086指令集)指令集)操作数可能存放在操作数可能存放在4个位置:个位置:1.在指令中在指令中 立即数立即数 立即数寻址立即数寻址:mov ax,1234 mov ax,1234mov bx,5bcfH111种寻址方式的第种寻址方式的第1种种操作数存放位置操作数存放位置操作数名称操作数名称 寻址方式寻址方式;ax;ax12341234ahah1212alal3434;bx;bx5bcf H5bcf Hblblcf Hcf Hbhbh5b H5b H12123434axaxahahalal5b5bcfcfbxbxbhbhblbl立即数寻址立即数寻址立即数寻址立即数寻址32mov bx,ax2 2.在寄存器中在寄存器中 寄存器寄存器操作数操作数 寄存器寻址寄存器寻址:mov bx,ax 11种寻址方式的第种寻址方式的第2种种mov cx,bx操作数存放位置操作数存放位置操作数名称操作数名称寻址方式寻址方式;bxax;cxbx74743e3eaxaxahahalal74743e3ebxbxbhbhblbl74743e3ecxcxchchcl cl寄存器寻址寄存器寻址寄存器寻址寄存器寻址333.在在存储器中存储器中存储器操作数存储器操作数 存储器寻址存储器寻址(7种寻址方式种寻址方式,第第3-9种种)操作数位置操作数位置操作数名称操作数名称寻址方式寻址方式(11种种)mov al,1000H直接寻址直接寻址:mov ax,1000H334345656axaxahahalal4 41000H1000H12123434565678784 41001H1001H4 40fffH0fffH4 41002H1002H4 40ffeH0ffeH4 41003H1003H3434axaxahahalal1000H1000H12125656343478781001H1001H0fffH0fffH1002H1002H0ffeH0ffeH1003H1003Hxxxx地址地址地址地址内容内容内容内容地址地址地址地址内容内容内容内容alal(1000H)(1000H);al;al(1000H)(1000H)ahah(1001H)(1001H)段寄存器为段寄存器为DS=2000H段寄存器为段寄存器为DS=4000H若操作数不在若操作数不在DS段,须指明段,须指明mov al,ES:1000H直接寻址直接寻址mov al,ES:1000Hmov ax,ES:1000H2 22 22 22 22 22 2偏移地址偏移地址偏移地址偏移地址物理地址物理地址物理地址物理地址=DS:DS:偏移地址偏移地址偏移地址偏移地址=2000H:2000H:1001H=1001H=20000H20000H+1001H+1001H=2 21001H1001H(即即即即DSDS左移左移左移左移4 4位位位位加偏移地址加偏移地址加偏移地址加偏移地址)3456H3456H物理地址物理地址物理地址物理地址343.在在存储器中存储器中存储器操作数存储器操作数 存储器寻址存储器寻址(7种寻址方式种寻址方式,第第3-9种种)操作数位置操作数位置操作数名称操作数名称寻址方式寻址方式(11种种)寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址:si,di,bx,bp:si,di,bx,bp使用的寄存器使用的寄存器使用的寄存器使用的寄存器基址寻址基址寻址:bx/bp4 4mov bp,albp用段寄存器用段寄存器SS:(除除BP外,均用外,均用DS:)mov bx,al段寄存器为段寄存器为DS11000H11000H9e9e3434787810fffH10fffH21002H21002H10ffeH10ffeH21003H21003H45459e9eaxaxahahalal0fffH0fffHbpbp12123434axaxahahalal1002H1002Hbxbx3434;bp bp al al,即:,即:,即:,即:;DS:bx DS:bx al al寄存器间接寄存器间接寄存器间接寄存器间接寻址寻址寻址寻址;SS:bp SS:bp al al1000H1000HSSSS2000H2000HDSDS物理物理物理物理:10fffH:10fffH物理物理物理物理:21002H:21002H363.在在存储器中存储器中存储器操作数存储器操作数 存储器寻址存储器寻址(7种寻址方式种寻址方式,第第3-9种种)操作数位置操作数位置操作数名称操作数名称寻址方式寻址方式(11种种)5 5变址寻址变址寻址:si/dimov di,ax段寄存器为段寄存器为DS11000H11000H9e9e343456569e9e11001H11001H10fffH10fffH11002H11002H10ffeH10ffeH11003H11003H78786464axaxahahalal1001H1001Hdidimov ax,7864Hmov di,1001H64647878;DS:di DS:di ax ax;di di 1001H 1001H;ax ax 7864H 7864H1000H1000HDSDS物理物理物理物理:11001H:11001H若先执行:若先执行:若先执行:若先执行:设:设:设:设:若操作数不在若操作数不在DS段,须指明段,须指明mov al,ES:1000H周四周四周四周四3434节节节节9-279-27至此至此至此至此373.在在存储器中存储器中存储器操作数存储器操作数 存储器寻址存储器寻址(7种寻址方式种寻址方式,第第3-9种种)操作数位置操作数位置操作数名称操作数名称寻址方式寻址方式(11种种)6 6基址加变址寻址基址加变址寻址:bx/bp si/dimov bp di,al基址寄存器基址寄存器mov bx si,r/srmov bx+si,ax变址寄存器变址寄存器bx sibx dibp sibp dibx bpsi dibp bxdi si;bp+dibp+di al al;bp+bp+si i al al;bbx+si+1i+1 ahah1616位数据传送位数据传送位数据传送位数据传送387带位移量带位移量 寄存器相对寄存器相对 间接寻址间接寻址8nnnnBX/BP 例:例:mov 100bp,ah ;bp+100mov 100bp,ah ;bp+100ahahBX/BP+nnnn 例:例:mov bx+18,cx ;bx+18mov bx+18,cx ;bx+18cxcxBX/BP+nnnn 例:例:mov bp+87,dl ;bp+87 mov bp+87,dl ;bp+87dldl带位移带位移基址寻址基址寻址:有效地址有效地址=基地址基地址+位移量位移量带位移带位移变址寻址:变址寻址:有效地址有效地址=变地址变地址+位移量位移量nnnnSI/DI 例:例:mov 200di,bl ;di+200;di+200blblSI/DI +nnnn 例:例:mov si+11,ch ;si+11mov si+11,ch ;si+11chchSI/DI+nnnn 例:例:mov di+26,dx ;di+26 mov di+26,dx ;di+26dxdx9带位移带位移基址加变址寻址基址加变址寻址基址加变址寻址基址加变址寻址:有效地址有效地址=基地址基地址+变地址变地址+位移量位移量nnBX/BPSI/DI 例:例:mov 100bxsi,cl ;bx+si+100 clBX/BP+SI/DI+nn 例:例:mov bx+si+100,ch;bx+si+100 clBX/BP+SI/DI +nn例:例:mov bx+si+100,ch;bx+si+100 clBX/BPnnnnSI/DInnnn三种格式三种格式三种格式三种格式功能相同功能相同功能相同功能相同三种格式三种格式三种格式三种格式功能相同功能相同功能相同功能相同39字段字段0字段字段n字段字段n-1字段字段2字段字段1基址寄存器基址寄存器+(位移量)(位移量)MOV AX,BX+100H变变变变不变不变不变不变变变变变不变不变不变不变7带位移带位移基址寻址基址寻址:有效地址有效地址=基地址基地址+位移量位移量用于查表数据结构寻址用于查表数据结构寻址100HBX例:例:例:例:反之:反之:反之:反之:100H100H固定不变,改变固定不变,改变固定不变,改变固定不变,改变BXBX的值进行查表,亦可的值进行查表,亦可的值进行查表,亦可的值进行查表,亦可40(位移量)(位移量)数据阵列寻址,查表数据阵列寻址,查表单元单元0单元单元n单元单元n-1单元单元2单元单元1变址寄存器变址寄存器+MOV AX,SI+100H不变不变不变不变变变变变变变变变不变不变不变不变8带位移带位移变址寻址:变址寻址:有效地址有效地址=变地址变地址+位移量位移量SI100H编程中编程中编程中编程中“变变变变”与与与与“不变不变不变不变”的内容的内容的内容的内容可以灵活掌握:可以灵活掌握:可以灵活掌握:可以灵活掌握:100H100H固定不变,固定不变,固定不变,固定不变,改变改变改变改变SISI的值进行的值进行的值进行的值进行查表,未尚不可查表,未尚不可查表,未尚不可查表,未尚不可41单元单元(0,0)单元单元(0,1)单元单元(0,n)(位移量)(位移量)二维数据寻址二维数据寻址基址寄存器基址寄存器+MOV AX,BX+SI+100H单元单元(1,0)单元单元(1,n)单元单元(1,1)单元单元(m,n)变址寄存器变址寄存器+变变变变不变不变不变不变变变变变9带位移带位移基址加变址寻址基址加变址寻址基址加变址寻址基址加变址寻址:有效地址有效地址=基地址基地址+变地址变地址+位移量位移量BXSI100H42操作数可能存放在操作数可能存放在4个位置:个位置:1.在指令中在指令中 立即数立即数 立即数寻址立即数寻址:第第1种寻址方式种寻址方式 2.在寄存器中在寄存器中寄存器寄存器操作数操作数 寄存器寻址寄存器寻址:第第2种寻址方式种寻址方式 3.在在存储器中存储器中存储器操作数存储器操作数 存储器寻址存储器寻址:7种寻址方式种寻址方式(39)10I/O端口寻址端口寻址:in al/ax,nn 例:例:in al ,77h ;al;al77h77hout nn,al/ax 例:例:out 77h,ax ;77h;77haxax直接直接I/O端口寻址端口寻址(8位口位口):dx 寄存器间接寄存器间接I/O端口寻址端口寻址(16位口位口)8位位I/O端口地址端口地址in al/ax,dx 例:例:in al,dx ;al;al dxdxout dx,al/ax 例:例:out dx,al ;dxdx ax ax16位位I/O端口地址端口地址11mov dx,378H共共11种寻址方式,已学习了种寻址方式,已学习了9种:种:4.I/O端口操作数端口操作数I/O操作数操作数 I/O端口寻址端口寻址:2种寻址方式种寻址方式(1011)还有还有2种:种:43I/O端口端口寻址寻址寄存器间接寻址寄存器间接寻址立即数立即数立即数立即数括号内是地址括号内是地址括号内是地址括号内是地址基址基址基址基址R R(源源源源)变址变址变址变址R R8位端口位端口地址地址地址地址16位端口位端口地址地址地址地址FF寻址方式寻址方式寻址方式寻址方式FF复习复习复习复习偏移量偏移量偏移量偏移量1.立即数寻址立即数寻址MOV AX,1234H2.寄存器寻址寄存器寻址MOV AX,BX3.直接寻址直接寻址MOV AX,1234H4.基址基址基址基址寻址寻址MOV AX,BX5.变址变址变址变址寻址寻址MOV AX,SI6.基址加变址基址加变址基址加变址基址加变址寻址寻址MOV AX,BX+SI7.带位移基址寻址带位移基址寻址MOV AX,BX+100H8.带位移变址寻址带位移变址寻址MOV AX,SI+100H9.带位移基址加变址寻址带位移基址加变址寻址 MOV AX,BX+SI+100H10.I/O端口直接寻址端口直接寻址(8位口位口)IN AL,71HOUT 70H,AL11.DX 寄存器寄存器I/O端口间接寻址端口间接寻址(16位口位口)IN AL,DX OUT DX,AL 基址加基址加基址加基址加变址变址变址变址R R44作业作业4:指出每条指令的寻址方式及操作结果。:指出每条指令的寻址方式及操作结果。1.MOV AX,44fdH2.MOV AX,CX3.MOV AX,6657H4.MOV AX,BX5.MOV AX,SI6.MOV AX,BX+SI7.MOV AX,BX+220H8.MOV AX,SI+340H9.MOV AX,BX+SI+780H10.IN AL,40HOUT 41H,AL11.IN AL,DX OUT DX,AL 45授课结束授课结束46