聪明出于勤奋,天才在于积累--华罗庚180x86的指令系统和寻址方式数据类型寻址方式指令系统聪明出于勤奋,天才在于积累--华罗庚2指令基础处理器根据指令中给出的地址信息求出存放操作数的地址,称为有效地址求出有效地址的方法,称为寻址方式。按照指令给出的寻址方式求出操作数有效地址和存取操作数的过程,称为寻址操作聪明出于勤奋,天才在于积累--华罗庚3立即数寻址方式---------------------教材第35页操作数来源----操作数在指令中微处理器取指令的同时,操作数也随之得到,称为立即数,称立即数寻址方式操作数用立即数形式存放在指令代码中。在汇编语言中,立即数用常量表示,可以是二、八、十、十六进制常数,可以是字符串,还可以是数值表达式或符号常量。但是在DEBUG中,立即数只能用十六进制数据表示聪明出于勤奋,天才在于积累--华罗庚4[例1-28](视频演示)-----------教材第35页movdl,20h。在DEBUG中输入并执行这条指令,指令中的源操作数20h就传送到了DL中。聪明出于勤奋,天才在于积累--华罗庚5寄存器寻址方式--------------------教材第35页操作数来源----操作数在内部寄存器中指令中直接指定数据所在的寄存器名,称寄存器寻址方式聪明出于勤奋,天才在于积累--华罗庚6[例1-29](视频演示)-----------教材第35页moval,bl。本指令将BL中的操作数传送到AL,操作数的具体数值在指令中未指明,只是指出数据所在的寄存器名。我们在DEBUG中先查看AL,BL的值是多少,然后执行上面的指令,可以看到BL的操作数34h传送到了AL中。聪明出于勤奋,天才在于积累--华罗庚7存储器寻址方式---------------------教材第36页操作数来源----操作数在存储器中通过计算,得到操作数在存储器中的单元地址,包括该单元的段地址,偏移地址,称为存储器寻址方式存储器寻址方式有9种。直接寻址寄存器间接寻址基址寻址变址寻址基址变址寻址带位移量的基址变址寻址聪明出于勤奋,天才在于积累--华罗庚8存储器寻址方式---------------------教材第36页由于80x86分段管理主存,所以要注意以下几点。1)存储器地址采用逻辑地址(段地址:偏移地址)表示。2)段地址在段寄存器中。采用BP寻址主存时,段地址默认在SS寄存器中,即操作数在堆栈段;其他情况寻址主存时,段地址默认在DS寄存器中,即操作数在数据段。它们都可以利用段超越前缀指令,改变段地址默认的段寄存器,亦即改变操作数所在的逻辑段。聪明出于勤奋,天才在于积累--华罗庚9直接寻址方式------------------------教材第36页数椐在内存中,指令中指明内存单元的偏移地址或单元符号地址,如[地址]如:mov[500H],ax表示将ax中的数据,传送到数据段:500H单元一般形式为[偏移地址],或者为符号变量。在DEBUG中不能使用符号变量这种形式。聪明出于勤奋,天才在于积累--华罗庚10[例1-30](视频演示)-----------教材第36页moval,[1234]。指令中源操作数即为直接寻址方式,操作数为数据段1234h单元中的数值。在DEBUG中查看指令传送的操作数为0beh,而不是1234h。这时的1234h是偏移地址,而不是操作数。聪明出于勤奋,天才在于积累--华罗庚11寄存器间接寻址方式---------------教材第36页数椐在内存中,内存单元的有效地址在寄存器中。指令中为[寄存器名]如:movbx,1234hmov[bx],ax表示将ax中的数据,传送到数据段一个单元中,该单元的地址在bx中存放着,即bx作为有效地址的指针。即将ax中的数,传送到数据段1234h单元中。有效地址存放在寄存器中,再根据有效地址访问到存储单元中的操作数。一般形式为[寄存器名]。使用这种寻址方式时特别要注意,并不是所有的寄存器都能使用,只有[bx]、[bp]、[si]、[di]这4个寄存器可用于间接寻址。聪明出于勤奋,天才在于积累--华罗庚12[例1-31](视频演示)----------------教材第36页moval,[bx]。指令中源操作数使用了BX寄存器间接寻址方式,在DEBUG中查看到指令执行前BX中为1234h,指令执行时不是把1234h传送到AL,而是将数据段1234h单元的数据0beh传送到AL。聪明出于勤奋,天才在于积累--华罗庚13寄存器相对寻址方式---------------教材第37页采用寄存器与位移量的组合,有效地址是寄存器内容与位移量之和。一般形式为[寄存器名]+位移量或者位移量[寄存器名]或者[寄存器名+位移量],这些都是等价的寄存器相对寻址方式。寄存器名只能为BX、BP、SI、DI,位移量为立即数或符号常量、符号变量。但DEBUG中不能使用后两种形式。聪明出于勤奋,天才在于积累--华罗庚14基址寻址------------------------------教材第37页基址寻址:数据在内存中,内存的有效地址为基址寄存器中值和一个位移量之和。指令中为[基址寄存器]+位移量形式如:movbx,1234hmov[bx]+5,ax表示将ax中的数据传送到数据段一个单元中,该单元的地址为bx+5=1239h单元聪明出于勤奋,天才在于积累--华罗庚15变址寻址------------------------------教材第37页变址寻址:数据在内存中,内存的有效地址为变址寄存器中值和一个位移量之和。指令中为[变址寄存器]+位移量形式如:movsi,1234hmov[si]+5,ax表示将ax中的数据传送到数据段一个单元中,该单元的地址为si+5=1239h单元聪明出于勤奋,天才在于积累--华罗庚16[例1-32](视频演示)-----------教材第37页moval,[bx]+2。指令的源操作数使用了BX寄存器和位移量2的寄存器相对寻址方式,这样,源操作数的有效地址是BX中的数和2之和,然后再根据该地址在数据段相应单元找到操作数。DEBUG中操作,可以看到指令执行前BX中为0000,加2后为0002单元,所以操作数为数据段中0002单元的数0ffH。聪明出于勤奋,天才在于积累--华罗庚17基址变址寻址方式------------------教材第37页数据在内存中,内存的有效地址为基址寄存器中值和变址寄存器中值之和。指令中为[基址寄存器][变址寄存器]形式如:movbx,1234hmovsi,1111hmov[bx][si],ax表示将ax中的数据传送到一个单元,该单元的地址是bx和si中的数据相加得到的值。即将ax送到内存数据段的2345h单元聪明出于勤奋,天才在于积累--华罗庚18基址变址寻址方式------------------教材第37页利用基址寄存器(BX、BP)与变址寄存器(SI、DI)的组合,有效地址是基址寄存器内容与变址寄存器内容之和。注意只能是一个基址寄存器和一个变址寄存器的组合。一般形式为[BX][SI]或者[BX][DI]或者[BP][SI]或者[BP][DI]。两个寄存器也可以放在一个[]内,用加号连接,如[BX+SI]等。聪明出于勤奋,天才在于积累--华罗庚19[例1-33](视频演示)-----------教材第37页moval,[bx][si]。指令中源操作数的寻址方式为基址变址寻址方式,操作数的有效地址为BX和SI寄存器中值的和。然后根据这个有效地址找到存储单元中的操作数。在DEBUG中执行指令前BX和SI的值之和为0000H,表明操作数在数据段的0000单元,该单元中为0CDH,所以传送到AL中的为0CDH。聪明出于勤奋,天才在于积累--华罗庚20带位移量的基址变址寻址方式---教材第38页数据在内存中,内存的有效地址为基址寄存器中值、变址寄存器中值以及位移量之和。指令中为[基址][变址]+位移量形式如:movbx,1234hmovsi,1111hmov[bx][si]+2,ax表示将ax传送到一个内存单元,该单元的地址为bx+si+2计算出来的有效地址。即将ax传送到2347h单元聪明出于勤奋,天才在于积累--华罗庚21相对基址变址寻址方式带位移量的基址变址寻址----教材第38页使用基址寄存器、变址寄存器和相对位移量3个组成部分,有效地址是基址寄存器、变址寄存器与位移量之和。一般形式是基址变址寻址形式中再增加一个位移量,如[BX][SI]+位移量形式。位移量可以为立即数或者符号常量、符号变量,但是DEBUG形式时不能使用后两种形式。聪明出于勤奋,天才在于积累--华罗庚22例1-34(视频演示)-------------教材第38页moval,[bx][si]+2。指令的源操作数使用了基址变址相对寻址方式,源操作数所在存储单元的有效地址是BX、SI、位移量2之和。在DEBUG中输入指令,指令执行前BX=0000,SI=0000,所以源操作数为数据段的0002单元中的0FFH。指令执行后AL的值变成了0FFH。