第2章数据定义与传送108.ppt
《第2章数据定义与传送108.ppt》由会员分享,可在线阅读,更多相关《第2章数据定义与传送108.ppt(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、新新新新 编编编编汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计1 1第二章第二章 数据定义与传送数据定义与传送2.1 2.1 数据的定义数据的定义2.2 2.2 数据的传送数据的传送 2.3 2.3 汇编语言上机操作汇编语言上机操作 习题二习题二2 22.12.1 数据的定义数据的定义2.1.1 2.1.1 数据段数据段2.1.2 2.1.2 数据定义数据定义 3 3汇编语言程序定义的汇编语言程序定义的“数据数据”:(1)变量(Varible)有有一一个个名名字字,运运行行过过程程中中值值可可能能发发生生变变化化,可可以以有有“初始值”。(2)常数(Constant)常数可
2、以直接写在指令内,也可以存放在数据段内。常数可以直接写在指令内,也可以存放在数据段内。(3)缓冲区(Buffer)从从输输入入设设备备输输入入若若干干数数据据时时,在在数数据据段段里里事事先先留留出出必必要要的存储单元,称为的存储单元,称为“输入缓冲区”。输输出出一一批批数数据据时时,把把输输出出内内容容事事先先存存放放在在若若干干内内存存单单元元中,称为中,称为“输出缓冲区”。4 42.1.1 2.1.1 数据段数据段DATASEGMENT;在这里定义数据;在这里定义数据;DATAENDSDATA:程序员给这个段起的名字。程序员给这个段起的名字。SEGMENT:保留字,说明一个段从这里开始。
3、保留字,说明一个段从这里开始。ENDS:保留字,说明保留字,说明一个段到此结束。一个段到此结束。;分号后面的文字是分号后面的文字是“注释注释”,不参加汇,不参加汇编编伪指令:说明性的语句:说明性的语句语句:由一行文字构成,是由一行文字构成,是一条指令,或者定义一条指令,或者定义一组数据,或者是一一组数据,或者是一条条“伪指令伪指令”。5 52.1.2 2.1.2 数据定义数据定义数据定义伪指令数据定义伪指令:变量名变量名数据定义伪操作数据定义伪操作数据数据,数据,数据数据定义伪操作:数据定义伪操作:DB(DefineByte):):每个数据占用一个字节(每个数据占用一个字节(8b)DW(Def
4、ineWord):):每个数据占用一个字(每个数据占用一个字(16b)DD(DefineDoubleWord):):每个数据占用一个双字每个数据占用一个双字(32b)DQ(DefineQuartWord):):每个数据占用每个数据占用8个字节个字节(64b)DT(DefineTenWord):):每个数据占用每个数据占用10个字节(个字节(80b)6 6DATA SEGMENTXdb-1,255,A,3+2,?db“ABC”,0FFH,11001010BYdb3dup(?)DATA ENDS数据定义举例(数据定义举例(1):有符号数用它的补码存储有符号数用它的补码存储字符用字符用ASCII代码
5、存储代码存储db定义的数据在定义的数据在-128255之内之内变量名代表这个单元的地址变量名代表这个单元的地址?表示一个尚未确定的值表示一个尚未确定的值DUP表示重复定义表示重复定义7 7DSEG SEGMENTZDW-2,-32768,65535,ABWDw12345678H,-400000DWZ,W-ZDSEG ENDS数据定义举例(数据定义举例(2):DW定义的数据在(定义的数据在(-32768,65535)内)内出现在数据部分的变量名代表这个变量的出现在数据部分的变量名代表这个变量的偏移地址偏移地址多字节数据的高位存放在较高地址单元中多字节数据的高位存放在较高地址单元中8 8变量变量X
6、,Y,Z,W的属性的属性变量名变量名段属性段属性SEG偏移地址偏移地址OFFSET类类型型TYPE长长度度LENGTH大大小小SIZEXDATA0000H111YDATA000AH133ZDSEG0000H212WDSEG0008H2129 92.2 2.2 数据的传送数据的传送2.2.1 2.2.1 指令格式指令格式2.2.2 2.2.2 程序段程序段2.2.32.2.3基本传送指令基本传送指令2.2.4 2.2.4 其他传送指令其他传送指令2.2.5 2.2.5 堆栈堆栈2.2.62.2.6操作数表达式操作数表达式1010汇汇编编语语言言程程序序由由若若干干“语语句句”组组成成,每每个个“
7、语语句句”占占用用一一行。行。三种类型语句:三种类型语句:指指令令语语句句:包包含含一一条条符符号号指指令令,与与一一条条机机器器指指令令相相对对应应,汇汇编编以以后后成成为为这这条条机机器器指指令令的的二二进进制制代代码码,这这个代码被称为个代码被称为“目标目标(Object)”;伪伪指指令令语语句句:一一条条说说明明性性的的语语句句。有有的的伪伪指指令令语语句句汇汇编编后后没没有有“结结果果”,有有的的伪伪指指令令汇汇编编后后产产生生“目目标标”。注注释释行行:书书写写说说明明性性文文字字,不不进进行行“汇汇编编”,也也不不产产生生“目标目标”。11111 1 8080X86X86指令格式
8、指令格式标标号号:程程序序员员给给这这一一行行起起的的名名字字,后后面面跟跟上上冒冒号号,代代表表这这一一行的地址。标号用字母开始,不要使用保留字作为标号。行的地址。标号用字母开始,不要使用保留字作为标号。操作码是这条指令需要完成的操作,用指令助记符表示。操作码是这条指令需要完成的操作,用指令助记符表示。操作数操作数是指令的操作对象,指令的操作数可以是指令的操作对象,指令的操作数可以03个。个。两两个个操操作作数数时时,右右面面的的操操作作数数称称为为“源源操操作作数数”,左左面面的的操操作作数数称称为为“目目的的操操作作数数”。“源源操操作作数数”参参与与指指令令操操作作,不不保保存存结结果
9、果,内内容容不不会会改改变变。“目目的的操操作作数数”参参与与指指令令操操作作,还还保保存存指令的操作结果,指令执行后,目的操作数的内容被改变。指令的操作结果,指令执行后,目的操作数的内容被改变。;注释;注释用来添加一些说明,例如说明本行指令的功能。用来添加一些说明,例如说明本行指令的功能。标号标号:操作码操作码操作数操作数;注释注释12122操作数操作数寄存器操作数寄存器操作数:包括段寄存器,通用数据、地址寄存器。:包括段寄存器,通用数据、地址寄存器。例如:例如:MOVBX,AX功能:功能:AX寄存器内容送入寄存器内容送入BX寄存器。寄存器。AX是是“源源操操作作数数”,写写在在右右边边,指
10、指令令执执行行后后,它它的的内容不会被改变。内容不会被改变。BX是是“目目的的操操作作数数”,写写在在左左边边,指指令令执执行行后后,它它的内容将被改变。的内容将被改变。注意注意:寄存器:寄存器IP/EIP和和FLAGS/EFLAGS不能作为操作数出不能作为操作数出现在指令中。现在指令中。1313立立即即数数操操作作数数:二二进进制制/十十进进制制/十十六六进进制制常常数数,可可求求值值的的表表达式,字符,标号等都可以用作操作数。达式,字符,标号等都可以用作操作数。假设已经定义:假设已经定义:XDW150指令指令“MOVBX,X*2”是是错错误误的的,“变变量量”的的计计算算应应该该在在用用户
11、程序执行时进行,户程序执行时进行,“汇编程序汇编程序”不能对不能对“变量变量”进行计算。进行计算。常数常数300送入送入BX寄存器寄存器MOV BX,300或者:或者:MOV BX,150*2DATA段的段基址送段的段基址送DSMOV AX,DATAMOV DS,AX注意注意:立即数不能用作:立即数不能用作“目的操作数目的操作数”。1414为为了了对对存存储储器器的的一一个个单单元元进进行行访访问问,需需要要给给出出这这个个单单元元的段基址和偏移地址。的段基址和偏移地址。大大多多数数情情况况下下,指指令令使使用用DS寄寄存存器器的的内内容容作作为为操操作作数数的的段基址,指令中不需要再指出段基
12、址。段基址,指令中不需要再指出段基址。3存储器操作数存储器操作数指出偏移地址的方法有两种:直接的和间接的。指出偏移地址的方法有两种:直接的和间接的。常常在程序开始处把数据段的段基址装入常常在程序开始处把数据段的段基址装入DS寄存器:寄存器:MOV AX,DATAMOV DS,AX1515直接(偏移)地址直接(偏移)地址:在指令里直接写出存储单元的偏移地址。在指令里直接写出存储单元的偏移地址。DATA SEGMENTADB 12,34,56ARRAYDW55,66,77,88,99DATA ENDS已把已把DATA代表的段基址装入代表的段基址装入DS把变量(数组)把变量(数组)A的前两个数据送的
13、前两个数据送BL,BH寄存器:寄存器:MOVBL,A;也可以写作也可以写作MOVBL,AMOVBH,A+1;或或MOVBH,A+1,MOVBH,A1A代表数据代表数据“12”的偏移地址,的偏移地址,A+1是数据是数据“34”的偏移地址。的偏移地址。错误错误!MOVBX,A;把变量把变量A送送BL,变量变量A+1送送BH1616直接(偏移)地址直接(偏移)地址:在指令里直接写出存储单元的偏移地址。在指令里直接写出存储单元的偏移地址。DATA SEGMENTADB 12,34,56ARRAYDW55,66,77,88,99DATA ENDS已把已把DATA代表的段基址装入代表的段基址装入DS假设已
14、经知道假设已经知道A的偏移地址是的偏移地址是0000H,前面的指令可以写作:前面的指令可以写作:MOVBL,0000H;方括号不能省略方括号不能省略MOVBH,0001H;方括号不能省略方括号不能省略常数地址格式一般没有实用价值。常数地址格式一般没有实用价值。上面的两条指令可以用一条指令代替,效果相同:上面的两条指令可以用一条指令代替,效果相同:MOVBX,0000H;取地址取地址0000H开始的两字节开始的两字节,送入送入BL和和BH1717MOVAL,2100H;正确,正确,8位传送指令,位传送指令,2100H是字节地址是字节地址MOVAX,2100H;正确,正确,16位传送指令,位传送指
15、令,2100H是字地址是字地址MOVEAX,2100H;正确,正确,32位传送指令,位传送指令,2100H是双字地址是双字地址假设已经定义:假设已经定义:XDW350指令指令MOVBX,X 是是16位传送指令,正确位传送指令,正确指令指令MOVBL,X 是错误的,操作数类型不匹配是错误的,操作数类型不匹配1818间接(偏移)地址间接(偏移)地址:把把存存储储单单元元的的偏偏移移地地址址先先装装入入某某个个寄寄存存器器,通通过过这这个个寄寄存存器器来来找到这个存储单元,也称为找到这个存储单元,也称为“寄存器间接寻址寄存器间接寻址”。已经定义:已经定义:ADB12,34MOV SI,OFFSETA
16、;把变量把变量A的偏移地址装入的偏移地址装入SI;OFFSET是保留字,表示取出后面变量的偏移地址是保留字,表示取出后面变量的偏移地址MOV BL,SI;变量变量A的第一个值送的第一个值送BLMOV BH,SI+1;第二个值送第二个值送BH,MOVBH,1SI16位位80X86微微处处理理器器只只有有BX,BP,SI,DI这这4个个寄寄存存器器可可以以用用来来“间间接接寻寻址址”。不不另另加加说说明明的的话话,使使用用BP时时自自动动用用SS的的值值作作为段基址,使用为段基址,使用BX,SI,DI时自动用时自动用DS的值作为段基址。的值作为段基址。1919已经定义:已经定义:ARRAY DW3
17、5,73,27,780,12,55取出字数组取出字数组ARRAY的第的第3个元素送入个元素送入AX:;方法方法1MOVAX,ARRAY4;ARRAY代表数组首地址,位移量代表数组首地址,位移量=4,直接寻址,直接寻址;也可以写作;也可以写作“MOVAX,ARRAY+4”;方法方法2MOVBX,OFFSETARRAY;数组首地址装入数组首地址装入BXMOVAX,BX+4;第第3个元素距数组首元素个元素距数组首元素4个字节个字节;方法方法3MOVBX,4;第第3个元素距数组首地址的位移量装入个元素距数组首地址的位移量装入BXMOVAX,ARRAYBX;ARRAY代表数组首地址,代表数组首地址,BX
18、中是位移量中是位移量2020基址变址寻址基址变址寻址:用两个寄存器联合起来寻址。从(用两个寄存器联合起来寻址。从(BX,BP)和(和(SI,DI)中中各选出一个使用。各选出一个使用。出现出现BP时使用时使用SS作为段基址寄存器,其它情况用作为段基址寄存器,其它情况用DS。MOVAX,ARRAY4;直接寻址,偏移地址直接寻址,偏移地址=ARRAY+4MOVAX,BX;寄存器间接寻址寄存器间接寻址MOVAX,BX+2;寄存器相对寻址寄存器相对寻址;BX中存放首地址,位移量中存放首地址,位移量2MOVAX,ARRAYBX;寄存器相对寻址寄存器相对寻址;ARRAY为首地址,为首地址,BX中存放位移量中
19、存放位移量MOVAX,BX+SI;基址(基址(BX)变址(变址(SI)寻址寻址MOVAX,BX+DI+2;相对基址变址寻址相对基址变址寻址21213232位位8080 x86x86微处理器的存储器寻址微处理器的存储器寻址:基址基址+比例因子比例因子变址变址+位移量位移量MOVAX,ARRAY4;直接寻址,有效地址直接寻址,有效地址=ARRAY+4MOVAX,ECX;可以用任何一个通用寄存器间接寻址可以用任何一个通用寄存器间接寻址MOVAX,EAX+4;寄存器相对寻址寄存器相对寻址MOVAX,EBX+ECX;基址(基址(EBX)变址(变址(ECX)寻址寻址MOVAX,EBP+EDX+4;相对基址
20、(相对基址(EBP)变址(变址(EDX)寻址,使用寻址,使用SSMOVAX,EBX+4*ESI;变址寄存器可以乘上比例因子变址寄存器可以乘上比例因子1,2,4,8MOVAX,8*EBP+ECX+6;相对基址(相对基址(ECX)变址(变址(EBP)寻址,使用寻址,使用DS2222在在“实地址模式实地址模式”下,偏移地址用下,偏移地址用16位二进制表示,用于寻址位二进制表示,用于寻址的的32位寄存器的高位寄存器的高16位必须为位必须为0。所有的所有的32位通用寄存器都可以用来间接寻址,一旦使用位通用寄存器都可以用来间接寻址,一旦使用EBP作作为为“基址寄存器基址寄存器”,表示使用,表示使用SS作为
21、段基址寄存器。作为段基址寄存器。MOVAX,EBXEBP;基址基址(EBX)变址变址(EBP)寻址,使用寻址,使用DSMOVAX,EBPEBX;基址基址(EBP)变址变址(EBX)寻址,使用寻址,使用SSMOVAX,EBXEBP*1;基址(基址(EBX)变址(变址(EBP)寻址,使用寻址,使用DSMOVAX,1*EBPEBX;基址(基址(EBP)变址(变址(EBX)寻址,使用寻址,使用SS第二条指令等同于:第二条指令等同于:MOV AX,EBPEBX。使用比例因子的寄存器一般作为变址寄存器,比例因子为使用比例因子的寄存器一般作为变址寄存器,比例因子为1时:时:23232.2.2 2.2.2 程
22、序段程序段已定义数据段为已定义数据段为“DATA”,程序段常见格式程序段常见格式:CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;其他指令其他指令MOV AX,4C00HINT21HCODEENDSENDSTART2424“ASSUME”伪指令用来指定段和段寄存器之间的对应关系,供伪指令用来指定段和段寄存器之间的对应关系,供汇编程序使用。汇编程序使用。DATASEGMENTADB55DATAENDSDSEGSEGMENTXDB10DSEGENDSASSUMEDS:DATA,ES:DSEGMOVAX,DATAMOV DS,AX
23、MOV AX,DSEGMOV ES,AX设变量设变量A和和X的偏移地址都是的偏移地址都是0000H。指令指令MOVAL,A自动按照自动按照MOVAL,DS:0000H的格式的格式汇编,执行后(汇编,执行后(AL)=55。指令指令MOVDL,X自动按照自动按照MOVDL,ES:0000H的格式的格式汇编,执行后(汇编,执行后(DL)=10。2525MOVSI,OFFSETA;A的偏移地址装入的偏移地址装入SIMOVDI,OFFSETX;X的偏移地址装入的偏移地址装入DIMOVAL,SI;取取A的值送的值送ALMOVDL,DI;取取X的值送的值送DL执行的结果:执行的结果:(AL)=55正确,正确
24、,(DL)=55 错误错误。为了得到正确结果,上面第为了得到正确结果,上面第4条指令改写为:条指令改写为:MOV DL,ES:DI;执行后执行后(DL)=10,结果正确结果正确这条指令这条指令“显式显式”地指定了段基址,汇编出来的机器指令比地指定了段基址,汇编出来的机器指令比MOVDL,DI多一个字节,称为多一个字节,称为“段跨越前缀段跨越前缀”。2626“START”是第一条指令的是第一条指令的“标号标号”。标号出现在指令行前面,标号与指令之间用冒号标号出现在指令行前面,标号与指令之间用冒号“:”分开。分开。本程序的执行从标有本程序的执行从标有“START”的第一条指令开始,的第一条指令开始
25、,它的地址称为这个程序的它的地址称为这个程序的“入口地址入口地址”。指令指令“INT21H”表示调用由操作系统提供的表示调用由操作系统提供的21H号服务程序。号服务程序。AH中为中为“功能号功能号”,AH=4CH表示返回操作系统的操作。表示返回操作系统的操作。AL中的代码称为中的代码称为“返回代码返回代码”,00H表示表示“正常返回正常返回”。处理器选择伪指令处理器选择伪指令.386.386P.486.486P.586.586P.686.686P.386表示程序选用表示程序选用80386的基本指令集,的基本指令集,.386P表示选用表示选用80386的基本指令和保护模式下的特权指令。的基本指令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 定义 传送 108
限制150内