资源描述
微机原理与接口技术,*,微机原理与接口技术,第,3,章 数据处理,主要内容,3.1,数据表示,3.2,常量表达,3.3,变量应用,3.4,数据传送类指令,3.5,算术运算类指令,3.6,位操作类指令,3.7,串操作类指令,3.8 IA-32,指令系统,微机原理与接口技术,3,3.1,数据表示,数据(,Data,):,计算机处理的对象,对应指令操作的对象:,操作数,(,Oprand,),计算机中的数据要用二进制的,0,和,1,组合,表示,IA-32,整数指令支持的基本数据类型,8,、,16,、,32,、,64,位无符号整数,8,、,16,、,32,、,64,位有符号整数,ASCII,字符、字符串和,BCD,码,3.1,数据表示,微机原理与接口技术,4,1,10,3,1,10,2,1,10,1,1,10,0,1,10,-1,1,10,-2,权,N,进制数,a,m-1,a,m-2,a,1,a,0,.,b,-1,b,-2,b,-(n-1),b,-n,3.1.1,进制,例:,十进制数,1111.11,a,m-1,N,m-1,a,m-2,N,m-2,+,a,0,+,b,-1,N,-,1,b,-2,N,-2,+,b,-(n-1),N,-(n-1),b,-n,N,-n,基数,3.1,数据表示,微机原理与接口技术,5,1.,二进制,逢二进一,由,0,和,1,两个数码组成,基数为,2,,各个位的权以,2,n,表示,二进制数的算术运算:,逢,2,进,1,、借,1,当,2,a,n,a,n-1,a,1,a,0,.,b,1,b,2,b,m,a,n,2,n,a,n-1,2,n-1,+,a,0,2,0,+,b,1,2,-,1,b,2,2,-2,+,b,m,2,-m,3.1,数据表示,微机原理与接口技术,6,二进制数的算术运算,3.1,数据表示,微机原理与接口技术,7,2.,逻辑运算,基本逻辑运算,逻辑,与,AND,:,1101,0011=0001,逻辑,或,OR,:,1101,0011=1111,逻辑,非,NOT,:,1101=0010,逻辑,异或,XOR,:,1101,0011=1110,3.1,数据表示,微机原理与接口技术,8,3.,十六进制,逢十六进一,由,0,F16,个数码组成,基数为,16,,各个位的权以,16,k,表示,十六进制数的算术运算:,逢,16,进,1,、借,1,当,16,a,n,a,n-1,a,1,a,0,.,b,1,b,2,b,m,a,n,16,n,a,n-1,16,n-1,+,a,0,16,0,+,b,1,16,-,1,b,2,16,-2,+,b,m,16,-m,3.1,数据表示,微机原理与接口技术,9,十六进制数的加法运算,2 3 D 9,+9 4 B E,9+14=23=16,(carry),+7,13+11+1(carry)=25=16(carry)+9,3+4+1,(carry),=8,2+9=11=B,B 8 9 7,3.1,数据表示,微机原理与接口技术,10,十六进制数的减法运算,A 5 9 F,-6 2 B 8,15-8=7,16,(borrow),+9-11=14=E,5-2-1,(borrow),=2,10-6=4,4 2 E 7,3.1,数据表示,微机原理与接口技术,11,4.,数制之间的转换,3.1,数据表示,微机原理与接口技术,12,1,),N,进制转换成十进制数,-,按权展开式,=1,2,3,+,1,2,1,+,1,2,0,+,1,2,1,+,1,2,3,=11.625,=1016,1,+,7,16,0,+,11,16,1,=,1,0,1,1,.,1,0,1,B,例:,A,7,.,B,H,167.6875,3.1,数据表示,微机原理与接口技术,13,整数部分:,除,N,取余,直至商为,0,小数部分:,乘,N,取整,直至小数部分为,0,最先取到的数码离小数点最近!,2,)十进制转换成,N,进制数,3.1,数据表示,微机原理与接口技术,14,例,:,126.8125,()B,整数部分,126,除,2,取,余,0,1,1,1,1,1,2,126,63,2,31,2,15,2,7,2,2,3,1,取余,小数部分,0.8125,乘,2,取,整,1,取整,0.8125,2=1.625,0.625,2=1.25,0.25,2=0.5,0.5,2=1.0,1,0,1,2,0,1,3.1,数据表示,1101,1111110.,微机原理与接口技术,15,练 习,256,(?)B,13/16,(?)B,108.375,(?)H,100000000,0.1101,6C.6,3.1,数据表示,微机原理与接口技术,16,3,)二进制与十六进制的转换,二进制十六进制,-“,四位并一位,”,以小数点为基准,两侧每,4,位二进制数,对应,1,位十六进制数,不足,4,位时,外侧补,0,例:,11011.101001B=(,000,1,1011,.,1010,010,0,)B,=(,1B.A4),H,3.1,数据表示,微机原理与接口技术,17,例:,3A.EH=(,0011,1010,.,1110,),B,十六进制 二进制,-“,一位拆成四位,”,=(,111010.111),B,3.1,数据表示,微机原理与接口技术,18,作 业,27/32,(?)H=(?)B,65535,(?)H=(?)B,11011.1B+26.8H,(?)D,(101)X=(41)H,X=?,3.1,数据表示,微机原理与接口技术,19,3.1.2,数值的编码,3.1,数据表示,1.,定点整数,小数点的位置默认并固定的机器数称为,定点数,定点整数:小数点的位置固定在机器数,最右侧,定点小数:小数点的位置固定在机器数,最左侧,微机原理与接口技术,20,无符号定点整数,只表示正整数和,0,,不 含负数,N,位无符号整数表达范围:,0,2,N,-1,有符号定点整数,表示正整数、,0,和负整数,最高位表示数的正负即符号位,与数值无关,符号位用,0,表示正数、,1,表示负数,例:,16,位无符号定点整数的表示范围:,0,2,16,1,32,位有符号定点整数的表示范围:,2,16,1,3.1,数据表示,微机原理与接口技术,21,有符号整数在计算机中默认采用,补码,表示,最高位表示符号,,0,表示正数,,1,表示负数,正数补码直接表示数值大小,同无符号数,负数补码是,将对应正数补码取反加,1,数值,0,只有“,0”,,“,0”,由,128,替代,2.,补码,3.1,数据表示,例:,+105=(),补码,0,1101001,-105=(),补码,1,0010111,微机原理与接口技术,22,求补运算,负数真值“,取反加,1,”,得机器数补码,负数补码“,取反加,1,”,得到负数真值,例:,补码,11100000B,真值,=,(,11100000,求反,1,),=,00100000B=,32,负数求补运算,等效于“,用带借位的,0,作减法,”,例:,真值,-8,补码,=100H-8H=F8H,补码,F8H,真值,=-(100H-F8H)=-8H=-8,3.1,数据表示,23,引入补码可以,将减法变成加法,补码相加之和仍为补码,利用无符号数加法结合补码表达,实现,无符号数加法,无符号数减法,有符号数加法,有符号数减法,3.,补码运算,3.1,数据表示,X,补码,Y,补码,X,Y,补码,X,补码,Y,补码,X,补码,Y,补码,X,Y,补码,微机原理与接口技术,24,例,1,:,67H-10H=57H,例,2,:,-67H-10H=-77H,=,1,89H=(-77H),补,进位自然丢失,67H+(-10H),补,=67H+F0H=,1,57H,进位自然丢失,(-67H),补,+(-10H),补,=99H+F0H,3.1,数据表示,微机原理与接口技术,25,4.,原码和反码,3.1,数据表示,正数的原码、反码和无符号数一样,求负数的原码、反码和补码,首先计算其对应正数的编码,然后取反符号位(设置为,1,)成为原码,再取反其他位得到反码,最后加,1,就是补码,例:,+32=(,0,0100000B),原码,=(,0,0100000),反码,=(,0,0100000),补码,-32=(,1,0100000B),原码,=(,1,1011111B,),反码,=(,1,1100000),补码,微机原理与接口技术,26,作 业,一个,8,位的二进制数若采用补码表示,由,3,个“,1”,和,5,个“,0”,组成,则最小值为十进制数,(?),X,原,Y,反,Z,补,90H,X=?Y=?Z=?,X,补,1100111B,X,原,?,-X,补,?,2X,补,=?,3.1,数据表示,微机原理与接口技术,27,3.1.3,字符的编码,在计算机中,各种字符需要用若干位的二进制码的组合表示,即字符的二进制编码,由于,字节,为计算机的基本存储单位,所以常以,8,个二进制位为单位表达字符,0123456789,English,汉字,3.1,数据表示,微机原理与接口技术,28,1.BCD,二进制编码的十进制数,用,4,位二进制编码,0000,1001,表示,0,9,压缩,BCD,码:一个字节表达两位,BCD,码,非压缩,BCD,码:一个字节表达一位,BCD,码(低,4,位表达数值,高,4,位常设置为,0,),BCD,码便于输入输出,表达数值准确,3.1,数据表示,例:,(,100010010001.01000101,),BCD,=,34=(),BCD,=(),BCD,34H=(),BCD,=(),BCD,A7H=(),BCD,=(),BCD,01010010,52H,000101100111,167H,00110100,34H,891.45,微机原理与接口技术,29,2.ASCII,(美国标准信息交换码),标准,ASCII,码用,7,位二进制编码,有,128,个,不可显示的控制字符:前,32,个和最后一个,回车,CR,:,0DH,换行,LF,:,0AH,响铃,BEL,:,07H,可显示和打印的字符:,20H,后的,94,个编码,数码,0,9,:,30H,39H,大写字母,A,Z,:,41H,5AH,小写字母,a,z,:,61H,7AH,空格:,20H,扩展,ASCII,码:最高,D7,位为,1,,表达制表符号,3.1,数据表示,微机原理与接口技术,30,3.Unicode,(统一码),8,位,ASCII,码表达英文字符,16,位国标码表达汉字字符,汉字机内码:国标码在计算机中使用的编码,国际信息交换码,Unicode,16,位编码,对世界上所有语言的大多数字符进行编码,提供扩展能力,Unicode,兼容,ASCII,Unicode,给每个字符提供了一个唯一的数字,不论是什么,平台,不论是什么程序,不论是什么语言,3.1,数据表示,微机原理与接口技术,31,作 业,3.1,简答题(,1,),3.2,判断题(,13,),3.3,填空题(,2,、,3,),3.43.8 3.14,主要内容,3.1,数据表示,3.2,常量表达,3.3,变量应用,3.4,数据传送类指令,3.5,算术运算类指令,3.6,位操作类指令,3.7,串操作类指令,3.8 IA-32,指令系统,微机原理与接口技术,33,常数,十、十六和二进制形式表达的数值,以后缀字母区分,十进制数可以不加,以字母,A,F,开头的十六进制常数,要加前导,0,字符和字符串,英文缩略号括起来的单个字符或多个字符,数值是每个字符对应的,ASCII,码值,符号常量,使用标识符表达一个数值,符号定义伪指令:等价,EQU,,等号,数值表达式,用运算符连接各种常量构成的算式,算术运算符:(加)(减)*(乘),/,(除),常量具有确定数值,3.2,常量表达,微机原理与接口技术,34,例,3.1,数据表达程序,1,.data,00000000,64 64 64 64 64,const1,byte,100,100d,01100100b,64h,d,00000005,01 7F 80 80 FF FF,const2,byte,1,+127,128,-128,255,-1,0000000B,69 97 20 E0 32 CE,const3,byte,105,-105,32,-32,32h,-32h,00000011,30 31 32 33 34 35 3,6 37 38 39 61 62,63 78 79 7A 41 42 43 58 59 5A,const4,byte,0123456789,abcxyz,ABCXYZ,3.2,常量表达,微机原理与接口技术,35,例,3.1,数据表达程序,2,00000027,0D 0A 0,crlf,byte,0dh,0ah,0,=0000000A,minint,=,10,=000000FF,maxint,equ,0ffh,0000002A,0A 0F FA F5,const5,byte,minint,minint+5,byte,maxint-5,maxint-minint,0000002E,10 56 15 EB,const6,byte,4*4,34h+34,67h-52h,52h-67h,3.2,常量表达,主要内容,3.1,数据表示,3.2,常量表达,3.3,变量应用,3.4,数据传送类指令,3.5,算术运算类指令,3.6,位操作类指令,3.7,串操作类指令,3.8 IA-32,指令系统,微机原理与接口技术,37,变量(,Variable,),程序运行中随之发生变化的结果,保存在可读可写的主存空间,实质是,主存单元的数据,,因而可以改变,变量需要,事先定义,才能使用,变量,具有属性,方便应用,变量表达主存数据,即存储器操作数,3.3,变量应用,微机原理与接口技术,38,3.3.1,变量定义,申请存储空间,还可以进行存储单元初始化,变量名,变量定义伪指令,初值表,变量名,是用户标识符,表示首元素逻辑地址,变量定义伪指令,BYTE,、,WORD,、,DWORD,、,FWORD,、,QWORD,、,TBYTE,初值表,是用逗号分隔的参数,各种形式的,常量,“?”,表示初值不确定,即未赋初值,复制操作符,DUP,3.3,变量应用,1.,变量定义伪指令,微机原理与接口技术,39,3.3,变量应用,2.,字节量数据,BYTE,定义,8,位、字节量变量数据,可以表达,无符号整数,0,255,补码表示的有符号整数:,-128,+127,一个字符(,ASCII,码值),压缩,BCD,码:,0,99,非压缩,BCD,码:,0,9,字符串定义使用字节变量定义,BYTE,3.3,变量应用,微机原理与接口技术,40,例,3-2,字节,变量程序,3.3,变量应用,41,=,0000000A,minint=10,00000000,00 80 FF 80 00 7F,bvar1,byte,0,128,255,-128,0,+127,00000006,01 FF 26 DA 38 C8,bvar2,byte,1,-1,38,-38,38h,-38h,0000000C,00,bvar3,byte,?,0000000D,00000005,24,bvar4,byte,5 dup($),00000012,0000000A 00 0000000A 0A 00,bvar5,byte,minint dup(0),minint dup(minint,?),00000030,00000002 02 03 00000002 04,byte,2 dup(2,3,2 dup(4),3.,字量数据,WORD,定义,16,位、字量变量数据,可以表达,16,位无符号和有符号整数,16,位段选择器,,16,位偏移地址,16,位数据包含高低两个字节,占用,2,个连续的字节,存储单元,小端方式(,Little Endian,),低字节数据存放在低地址存储单元,高字节数据存放在高地址存储单元,3.3,变量应用,微机原理与接口技术,42,例,3-3,字,变量程序,=0000000Aminint=10,00000000,0000 8000 FFFF 8000 0000 7FFF,wvar1,word,0,32768,65535,-32768,0,+32767,0000000C,0001 FFFF 0026,FFDA 0038 FFC8,wvar2,word,1,-1,38,-38,38h,-38h,00000018,0000,wvar3,word,?,0000001A,2010 1020,0000001E,00000005 000A 0000,wvar4,word,2010h,1020h,word,5,dup(minint,?),00000032,3139 3832,wvar6,word,3139h,3832h,00000036,39 31 32 38,0000003A,00,bvar6,byte,39h,31h,32h,38h,byte,0,43,微机原理与接口技术,4.,双字量数据,DWORD,定义,32,位、双字量变量数据,可以表达,32,位无符号和有符号整数,32,位偏移地址、线性地址或段基地址,32,位数据包含,4,个字节,以“高对高、低对低”原则占用,4,个连续字节空间,3.3,变量应用,微机原理与接口技术,44,小端存储方式,3.3,变量应用,微机原理与接口技术,45,例,3-4,双,字变量程序,1,=0000000Aminint=10,00000000,00000000 80000000 FFFFFFFF,80000000 00000000 7FFFFFFF,dvar1,dword,0,80000000h,0ffffffffh,-80000000h,0,7fffffffh,00000018,00000001 FFFFFFFF 00000026,FFFFFFDA 00000038 FFFFFFC8,dvar2,dword,1,-1,38,-38,38h,-38h,00000030,00000000,dvar3,dword,?,00000034,00002010 00001020,dword,2010h,1020h,3.3,变量应用,微机原理与接口技术,46,例,3-4,双,字变量程序,2,0000003C,0000000A 0000000A 00000000,dvar5,dword,minint dup(minint,?),0000008C,38323139,dvar6,dword,38323139h,00000090,39 31 32 38,bvar6,byte,39h,31h,32h,38h,00000094,00,byte,0,91289128,运行结果,3.3,变量应用,微机原理与接口技术,47,5.,变量定位,变量定义的,存储空间按照,书写的先后顺序一个接着一个分配,“,ORG,参数”控制存放的偏移地址,org,100h,;,从偏移地址,100H,处安排,指令代码也由,汇编程序按照,语句的书写顺序安排存储空间,定位伪指令也可以用于控制代码的偏移地址,3.3,变量应用,微机原理与接口技术,48,3.3.2,变量属性,变量定义,分配存储空间,赋初值,创建变量名,变量名具有两类,属性,地址,属性,:,首个变量所在存储单元的逻辑地址,含有段基地址和偏移地址,类型,属性,:变量定义的数据单位,字节量,BYTE,字量,WORD,双字量,DWORD,3,字量,FWORD 4,字量,QWORD 10,字节量,TBYTE,3.3,变量应用,微机原理与接口技术,49,地址操作符,地址操作符用于获取变量名的,地址属性,括起的表达式作为存储器地址指针,$,返回当前偏移地址,OFFSET,变量名,返回变量名所在段的偏移地址,SEG,变量名,返回段基地址(实地址存储模型),3.3,变量应用,微机原理与接口技术,50,例,3-5,变量,地址属性程序,1,3.3,变量应用,51,;,数据段,00000000,12 34,bvar,byte,12h,34h,org,$+10,0000000C,0001 0002 0003 0004 0005 0006,0007 0008 0009 000A,array,word,1,2,3,4,5,6,7,8,9,10,00000020,5678,wvar,word,5678h,=,00000016,arr_size,=,$-array,=0000000Barr_len,=,arr_size/2,00000022,9ABCDEF0,dvar,dword,9abcdef0h,例,3-5,变量,地址属性程序,2,;,代码段,00000000,A0 00000000 R,mov,al,bvar,00000005,8A 25 00000001 R,mov,ah,bvar+1,0000000B,66|8B 1D00000022 R,mov,bx,wvar2,00000012,B9 0000000B,mov,ecx,arr_len,00000017,BA 00000017 R,mov,edx,$,3.3,变量应用,微机原理与接口技术,52,直接寻址,al=12h,ah=34h,bx=def0h,ecx=0000000bh,edx=00000017h,例,3-5,变量,地址属性程序,3,0000001C,BE 00000022 R,mov,esi,offset dvar,00000021,8B 3E,mov,edi,esi,00000023,8B 2D 00000022 R,mov,ebp,dvar,00000029,E8 00000000 E,call disprd,EAX=00003412,EBX=7FFDDEF0,ECX=0000000B,EDX=00401017,ESI=00404022,EDI=9ABCDEF0,EBP=9ABCDEF0,ESP=0012FFC4,3.3,变量应用,微机原理与接口技术,53,esi=00000022h,edi=9abcdef0h,ebp=9abcdef0h,类型操作符,类型操作符使用变量名的类型属性,类型名,PTR,变量名,将变量名按照指定的类型使用,TYPE,变量名,返回占用字节空间的字量数值,LENGTHOF,变量名,返回整个变量的数据项数,SIZEOF,变量名,返回整个变量占用的字节数,3.3,变量应用,微机原理与接口技术,54,例,3-6,变量,类型属性程序,1,;,代码段,00000000,A1 0000000C R,mov,eax,dword,ptr,array,;,获得数据,00000005,BB 00000001,mov,ebx,type,bvar,;,获得字节类型值,0000000A,B9 00000002,mov,ecx,type,wvar,;,获得字类型值,0000000F,BA 00000004,mov,edx,type,dvar,;,获得双字类型值,3.3,变量应用,微机原理与接口技术,55,例,3-6,变量,类型属性程序,2,00000014,BE 0000000A,mov,esi,lengthof,array;,获得数据个数,00000019,BF 00000014,mov,edi,sizeof,array,;,获得字节长度,0000001E,BD 00000016,mov,ebp,arr_size,;,获得字节长度,00000023,E8 00000000 E,call disprd,EAX=00020001,EBX=00000001,ECX=00000002,EDX=00000004,ESI=0000000A,EDI=00000014,EBP=00000016,ESP=0012FFC4,3.3,变量应用,微机原理与接口技术,56,微机原理与接口技术,57,作 业,3.1,简答题(,24,),3.3,填空题(,46,),3.103.13,微机原理与接口技术,58,.data,org 1000h,buf1 dword 7080h,9000h,0ab0h,buf2 word buf1,count equ,$,-buf1,buf3 byte 2 dup(?,10h,10,A),buf4 word buf3-buf2,.code,mov eax,offset buf4,mov ebx,buf1+2,mov esi,lengthof buf2,mov edi,sizeof buf3,测 验,要求画出内存分配情况,并说明每条硬指令的执行结果,主要内容,3.1,数据表示,3.2,常量表达,3.3,变量应用,3.4,数据传送类指令,3.5,算术运算类指令,3.6,位操作类指令,3.7,串操作类指令,3.8 IA-32,指令系统,微机原理与接口技术,60,学习指令的注意事项,指令的功能:,该指令能够实现何种操作,指令的寻址方式:,该指令中的操作数采用何种寻址方式,指令对标志的影响:,指令执行后是否影响标志位、如何影响,其他方面:,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等,数据,传送,把数据从一个位置传送到另一个位置,除,标志寄存器,传送指令外,均,不影响标志,位,包括,3,类数据传送指令:,3.4,数据传送类指令,微机原理与接口技术,61,通用数据,传送指令,堆栈操作,指令,其它传送指令,地址传送指令,标志传送指令,换码指令,3.4.1,通用传送指令,3.4,数据传送类指令,微机原理与接口技术,62,MOV,XCHG,微机原理与接口技术,63,1.,传送指令,MOV,dest:,reg/mem,src:,imm/reg/mem/seg,3.4,数据传送类指令,将源操作数内容传送到目的操作,指令格式:,mov,dest,src,微机原理与接口技术,64,两个操作数的,类型必须一致,操作数必须有,明确的类型,两个操作数,不能同时为存储器,操作专用寄存器的指令有限,注意事项,3.4,数据传送类指令,双操作数必须类型一致,mov al,050ah,;,类型不一致,,,050AH,超过了寄存器,AL,范围,mov eax,050ah,;,双,字量数据传送,mov esi,dl,;,类型不一致,ESI,为,32,位寄存器,,DL,为,8,位寄存器,mov esi,edx,;,两,个,32,位寄存器传送,3.4,数据传送类指令,微机原理与接口技术,操作数必须有明确的类型,mov,EBX,255,;,无,明确类型,mov,byte,ptr,ebx,255,;,BYTE,PTR,说明是字节操作,mov,word,ptr,ebx,255,;,WORD,PTR,说明是字操作,mov,dword,ptr,ebx,255,;,DWORD,PTR,说明是双字操作,3.4,数据传送类指令,微机原理与接口技术,双操作数不允许都是存储单元,;,假设,dbuf1,和,dbuf2,是两个双字变量,mov dbuf2,dbuf1,;,两,个操作数都是存储单元,mov,eax,dbuf1,;,eax=dbuf1,(,将,DBUF1,内容送,EAX,),mov,dbuf2,eax,;,dubf2,=eax,(,将,EAX,内容送,DBUF2,),3.4,数据传送类指令,微机原理与接口技术,2.,交换,指令,XCHG,将,源操作数和目的操作数内容,交换,xchg eax,ebx,xchg edx,var,xchg al,edi,3.4,数据传送类指令,微机原理与接口技术,68,dest:,reg,src:,reg/mem,指令格式:,xchg,dest,src,例,3-7,数据,交换程序,1,;,数据段,num,byte,6,7,7,8,3,0,0,0,tab,b,yte,67783000,;,代码段,mov,ecx,lengthof,num,;ECX,变量,NUM,长度(,数据,个数),mov,esi,offset,num,mov,edi,offset,tab,again:,mov,al,esi ;,AL,获得变量,NUM,的一个数,据,xchg,al,edi;,交换,,AL,等于变量,TAB,对应字符,3.4,数据传送类指令,微机原理与接口技术,69,mov,esi,al ;,保存回变量,NUM,原位置,call,dispc ;,显示,AL,中的字符,add,esi,1 ;,指向下一个数字,add,edi,1 ;,指向下一个字符,loop again,;,循环处理,xchg,eax,eax,nop,67783000,运行结果,3.4,数据传送类指令,微机原理与接口技术,70,例,3-7,数据,交换程序,2,微机原理与接口技术,71,空操作指令,NOP,等同于指令,XCHG,EAX,EAX,处理器执行该指令,需要花费时间,在主存中也要占用一个字节空间,实现短时间延时,临时占用代码空间,3.4,数据传送类指令,mov,ecx,lengthof,num,;ECX,变量,NUM,长度,mov,esi,0,;ESI,0,,表示数据在变量中的位移量,again:,mov,al,numesi,;AL,获得变量,NUM,的一个数字,xchg,al,tabesi,;,交换,,AL,等于变量,TAB,对应字符,mov,numesi,al,;,保存回变量,NUM,位置,call,dispc,;,显示,AL,中的字符,add,esi,1,;,指向下一个数据,loop again,;,循环,3.4,数据传送类指令,72,例,3-7,数据,交换程序,3,微机原理与接口技术,3.4.2,堆栈操作指令,“先进后出,FILO,”,存取的存储区域,只有一个数据出入口,即当前栈顶(不断变化),两种基本操作,数据压进堆栈,PUSH,数据弹出堆栈操作,POP,SS,指向堆栈段的起始位置,ESP,指定栈顶,数据进入堆栈,,ESP,逐渐减小,数据依次弹出、,ESP,逐渐增大,Word 1,Word 2,Word 3,Word 4,Word 5,Stack,PUSH,POP,3.4,数据传送类指令,微机原理与接口技术,73,1.,进栈指令,PUSH,将,ESP,减小作为当前栈,顶,esp-2(4),esp,将源操作数,(,立即数、通用寄存器和段寄存器内容或存储器操作数,),传送到当前栈顶,srcss:esp,3.4,数据传送类指令,74,指令格式:,push,src,操 作:,以字或双字为单位操作,进栈,双字,量数据时,,ESP,减,4,进栈,字,量数据时,,ESP,减,2,微机原理与接口技术,75,执行前,12345678H,EAX,78,12H,堆栈段,SS,高地址,低地址,执行进栈指令,push,eax,3.4,数据传送类指令,ESP,栈顶,ESP,ESP-4,56,34,12,EAXESP,2.,出栈指令,POP,将栈顶数据传送到目的操作数(通用寄存器、存储,单,元,或段寄存器,),SS,:ESP,dest,增加,ESP,作为,当前栈,顶,ESP,ESP,4,(,2,),3.4,数据传送类指令,微机原理与接口技术,76,指令格式:,pop,dest,操 作:,以字或双字为单位操作,出栈,双字量,数据时,,ESP,加,4,出栈,字量,数据时,,ESP,加,2,微机原理与接口技术,77,执行前,EAX,00,12H,堆栈段,SS,高地址,低地址,执行出栈指令,pop,eax,3.4,数据传送类指令,ESP,栈顶,ESPEAX,20,76,67,ESP=ESP+4,例,3-8,堆栈,操作程序,;,数据段,ten,=,10,dvar,dword,67762000h,12345678h,;,代码段,mov,eax,dvar+4,;EAX,12345678H,push,eax,;,将,EAX,内容压入堆栈,push,dword,ptr,ten,;,将立即数以双字量压入堆栈,push,dvar,;,变量,DVAR,第一个数据入栈,pop,eax,;,栈顶数据弹出到,EAX,pop,dvar+4,;,栈顶数据弹出到,DVAR,4,mov,ebx,dvar+4,;EBX,000000AH,pop,ecx,;,栈顶数据弹出到,ECX,call,disprd,3.4,数据传送类指令,微机原理与接口技术,78,微机原理与接口技术,79,3.,堆栈的应用,堆栈,不可或缺,被很多指令使用:,堆栈操作指令,子程序调用,CALL,和返回,RET,,中断调用,INT,和返回,IRET,等,内部异常、外部中断等也利用堆栈,堆栈,可用,来临时存放数据,,以便随时恢复它们,常利用堆栈基址指针,EBP,,随机读写堆栈数据,mov,ebp,esp,;,EBP,ESP,mov,eax,ebp+8,;EAXSS:EBP+8,mov,ebp,eax,;SS:EBPEAX,3.4,数据传送类指令,微机原理与接口技术,80,利用堆栈实现主、子程序间,传递参数,堆栈还常用于子程序的,寄存器保护和恢复,注意入栈和出栈的数据要成对,要,保持堆栈平衡,PUSH,AX,PUSH,BX,PUSH,CX,PUSH,DX,POP,DX,POP,CX,POP,BX,POP,AX,入栈顺序:,出栈顺序:,3.4,数据传送类指令,3.4.3,其他传送指令,针对,特定需要设计的专用传送指令,换码,指令,XLAT,标志传送,指令,CLC STC CMC,地址传送,指令,LEA,LDS,LES,3.4,数据传送类指令,微机原理与接口技术,81,1.,换码,指令,XLAT,指令功能,:,ALEBX,AL,换,码指令执行前:,在主存建立一个,字节,量表格,,内含目的,代码,表格首地址存放于,E,BX,AL存放相对表格首地址的位移量,换码指令执行后:,将AL寄存器的内容转换为目标代码,3.4,数据传送类指令,微机原理与接口技术,82,例,3-9,换,码显示程序,1,;,数据段,num,byte,6,7,7,8,3,0,0,0,;,被转换数字,tab,byte,0123456789,;,代码表,;,代码段,mov,ecx,lengthof,num,mov,esi,offset,num,mov,ebx,offset,tab,;EBX,指向代码表,again:,mov,al,esi,;,AL,要转换的数字,xlat,;,换码,call,dispc,;,显示,add,esi,1,;,指向下一个数字,loop again,;,循环,3.4,数据传送类指令,微机原理与接口技术,83,67783000,运行结果,2.,标志传送指令,直接操作,标志寄存器,标志位操作指令:直接改变,CF,、,DF,、,IF,标志,3.4,数据传送类指令,微机原理与接口技术,84,3.,地址传送,指令,LEA,地址传送指令获取,存储器操作数的,地址,lea,r16/r32,mem,;,r16/r32mem,的有效地址,EA,(不需类型一致),LEA,指令,类似地址,操作符,OFFSET,的作用,LEA,指令在指令执行时计算出偏移地址,OFFSET,操作符在汇编阶段取得变量的偏移地址,OFFSET,无需在执行时计算、指令执行速度更快,LEA,指令能获取汇编阶段无法确定的偏移地址,3.4,数据传送类指令,微机原理与接口技术,85,例,3-10,地址,传送程序,;,数据段,dvar,dword,41424344h,;,代码段,mov,eax,dvar,;EAX,41424344H,lea,esi,dvar,;ESI,指向,DVAR,mov,ebx,esi,;EBX,41424344H,mov,edi,offset,dvar,;EDI,指向,DVAR,mov,ecx,edi,;ECX,41424344H,lea,edx,esi+edi*4+100h,;EDX,ESI,EDI4,100H,call,disprd,3.4,数据传送类指令,微机原理与接口技术,86,微机原理与接口技术,87,作 业,3.1,简答题(,5,,,6,),3.2,判断题(,4,,,5,),3.15,3.17 3.18,主要内容,3.1,数据表示,3.2,常量表达,3.3,变量应用,3.4,数
展开阅读全文