汇编语言程序设计简明教程:第2章数据定义与传送

举报
资源描述
汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计简明教程简明教程简明教程简明教程1 1第二章第二章 数据定义与传送数据定义与传送2.2.1 1 数据的定义数据的定义2.2 2.2 数据的传送数据的传送 2.3 2.3 汇编语言上机操作汇编语言上机操作 习题二习题二2 22.12.1 数据的定义数据的定义2.2.1.1 1.1 数据段数据段2.2.1.2 1.2 数据定义数据定义 3 3汇编语言程序定义的汇编语言程序定义的“数据数据”:(1)变量变量(Varible)有有 一一 个个 名名 字字,运运 行行 过过 程程 中中 值值 可可 能能 发发 生生 变变 化化,可可 以以 有有“初始值初始值”。(2)常数常数(Constant)常数可以直接写在指令内,也可以存放在数据段内。常数可以直接写在指令内,也可以存放在数据段内。(3)缓冲区缓冲区(Buffer)从从输输入入设设备备输输入入若若干干数数据据时时,在在数数据据段段里里事事先先留留出出必必要要的存储单元,称为的存储单元,称为“输入缓冲区输入缓冲区”。输输出出一一批批数数据据时时,把把输输出出内内容容事事先先存存放放在在若若干干内内存存单单元元中,称为中,称为“输出缓冲区输出缓冲区”。4 42.1.1 2.1.1 数据段数据段DATASEGMENT;在这里定义数据;在这里定义数据;DATAENDSDATA:程序员给这个段起的名字。程序员给这个段起的名字。SEGMENT:保留字,说明一个段从这里开始。保留字,说明一个段从这里开始。ENDS:保留字,说明保留字,说明一个段到此结束。一个段到此结束。;分号后面的文字是分号后面的文字是“注释注释”,不参加汇编,不参加汇编5 5语句语句”:由一行文字构成,由一行文字构成,是一条指令,是一条指令,或者定义一组数据,或者定义一组数据,或者是一条或者是一条“伪指令伪指令”。伪指令伪指令:说明性的语句:说明性的语句6 62.1.2 2.1.2 数据定义数据定义数据定义伪指令数据定义伪指令:变量名变量名数据定义伪操作数据定义伪操作数据数据,数据,数据数据定义伪操作:数据定义伪操作:DB(DefineByte):):每个数据占用一个字节(每个数据占用一个字节(8b)DW(DefineWord):):每个数据占用一个字(每个数据占用一个字(16b)DD(DefineDoubleWord):):每个数据占用一个双字每个数据占用一个双字(32b)DQ(DefineQuartWord):):每个数据占用每个数据占用8个字节个字节(64b)DT(DefineTenByte):):每个数据占用每个数据占用10个字节(个字节(80b)7 7DATA SEGMENTXdb-1,255,A,3+2,?db“ABC”,0FFH,11001010BYdb3dup(?)DATA ENDS数据定义举例(数据定义举例(1):有符号数用它的补码存储有符号数用它的补码存储字符用它的字符用它的ASCII代码存储代码存储db定义的数据在定义的数据在-128255之内之内变量名代表这个单元的地址变量名代表这个单元的地址?表示一个尚未确定的值,用表示一个尚未确定的值,用0先行填充先行填充DUP表示重复定义表示重复定义8 8DSEG SEGMENTZDW-2,-32768,65535,ABWDD12345678H,-400000DWZ,W-ZDSEG ENDS数据定义举例(数据定义举例(2):DW定义的数据在(定义的数据在(-32768,+65535)内)内出现在数据部分的变量名代表这个变量的偏出现在数据部分的变量名代表这个变量的偏移地址移地址多字节数据的高位存放在较高地址单元中多字节数据的高位存放在较高地址单元中9 9变量变量X,Y,Z,W的属性的属性变量名变量名段属性段属性SEG偏移地址偏移地址OFFSET类类型型TYPE长长度度LENGTH大大小小SIZEXDATA0000H111YDATA000AH133ZDSEG0000H212WDSEG0008H21210102.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操作数表达式操作数表达式1111汇汇编编语语言言程程序序由由若若干干“语语句句”组组成成,每每个个“语语句句”占占用用一一行。行。三种类型语句:三种类型语句:指指令令语语句句:包包含含一一条条符符号号指指令令,与与一一条条机机器器指指令令相相对对应应,汇汇编编以以后后成成为为这这条条机机器器指指令令的的二二进进制制代代码码,这这个代码被称为个代码被称为“目标目标(Object)”;伪伪指指令令语语句句:一一条条说说明明性性的的语语句句。有有的的伪伪指指令令语语句句汇汇编编后后没没有有“结结果果”,有有的的伪伪指指令令汇汇编编后后产产生生“目目标标”。注注释释行行:书书写写说说明明性性文文字字,不不进进行行“汇汇编编”,也也不不产产生生“目标目标”。12121 1 80 80X86X86指令格式指令格式标标号号:程程序序员员给给这这一一行行起起的的名名字字,后后面面跟跟上上冒冒号号,代代表表这这一一行行的的地址。标号用字母开始,不要使用保留字作为标号。地址。标号用字母开始,不要使用保留字作为标号。操作码操作码是这条指令需要完成的操作,用指令助记符表示。是这条指令需要完成的操作,用指令助记符表示。操作数操作数是指令的操作对象,指令的操作数可以有是指令的操作对象,指令的操作数可以有03个。个。两两个个操操作作数数时时,右右面面的的操操作作数数称称为为“源源操操作作数数”,左左面面的的操操作作数数称称为为“目的操作数目的操作数”。;注释;注释用来添加一些说明,例如说明本行指令的功能。用来添加一些说明,例如说明本行指令的功能。标号标号:操作码操作码操作数操作数;注释注释13132操作数操作数寄存器操作数寄存器操作数:包括段寄存器,通用数据、地址寄存器。:包括段寄存器,通用数据、地址寄存器。例如:例如:MOVBX,A能:功能:AX寄存器内容送入寄存器内容送入BX寄存器。寄存器。AX是是“源源操操作作数数”,写写在在右右边边,指指令令执执行行后后,它它的的内容不会被改变。内容不会被改变。BX是是“目目的的操操作作数数”,写写在在左左边边,指指令令执执行行后后,它它的的内容将被改变。内容将被改变。注意注意:寄存器:寄存器IP/EIP和和FLAGS/EFLAGS不能作为操作数出现不能作为操作数出现在指令中。在指令中。1414立立即即数数操操作作数数:二二进进制制/十十进进制制/十十六六进进制制常常数数,可可求求值值的的表表达式,字符,标号等都可以用作操作数。达式,字符,标号等都可以用作操作数。假设已经定义:假设已经定义:XDW150指令指令“MOVBX,X*2”是是错错误误的的,“变变量量”的的计计算算应应该该在在用用户户程程序执行时进行,序执行时进行,“汇编程序汇编程序”不能对不能对“变量变量”进行计算。进行计算。常数常数300送入送入BX寄存器寄存器MOVBX,300或者:或者:MOVBX,150*2DATA段的段基址送段的段基址送DSMOVAX,DATAMOVDS,AX注意注意:立即数不能用作:立即数不能用作“目的操作数目的操作数”。1515为为了了对对存存储储器器的的一一个个单单元元进进行行访访问问,需需要要给给出出这这个个单单元元的的段段基基址和偏移地址。址和偏移地址。大大多多数数情情况况下下,指指令令使使用用DS寄寄存存器器的的内内容容作作为为操操作作数数的的段段基基址址,指令中不需要再指出段基址。指令中不需要再指出段基址。3存储器操作数存储器操作数指出偏移地址的方法有两种:直接的和间接的。指出偏移地址的方法有两种:直接的和间接的。常常在程序开始处把数据段的段基址装入常常在程序开始处把数据段的段基址装入DS寄存器:寄存器:MOVAX,DATAMOVDS,AX1616直接(偏移)地址直接(偏移)地址:在指令里直接写出存储单元的偏移地址。在指令里直接写出存储单元的偏移地址。DATASEGMENTADB12,34,56ARRAYDW55,66,77,88,99DATAENDS假设已把假设已把DATA代表的段基址装入代表的段基址装入DS把变量(数组)把变量(数组)A的前两个数据送的前两个数据送BL,BH寄存器:寄存器:MOVBL,A;也可以写作也可以写作MOVBL,AMOVBH,A+1;或或MOVBH,A+1,MOVBH,A1A代表数据代表数据“12”的偏移地址,的偏移地址,A+1是数据是数据“34”的偏移地址。的偏移地址。错误错误!MOVBX,A;把变量把变量A送送BL,变量变量A+1送送BH1717直接(偏移)地址直接(偏移)地址:在指令里直接写出存储单元的偏移地址。在指令里直接写出存储单元的偏移地址。DATA SEGMENTADB 12,34,56ARRAYDW55,66,77,88,99DATA ENDS假假设设已已把把DATA代代表表的的段段基基址址装装入入DS,并并且且知知道道A的的偏偏移移地地址址是是0000H,前面的指令可以写作:前面的指令可以写作:MOVBL,0000H;方括号不能省略方括号不能省略MOVBH,0001H;方括号不能省略方括号不能省略常数地址格式一般没有实用价值。常数地址格式一般没有实用价值。上面的两条指令可以用一条指令代替,效果相同:上面的两条指令可以用一条指令代替,效果相同:MOVBX,0000H;取地址取地址0000H开始的两字节开始的两字节,送入送入BL和和BH1818MOVAL,2100H;正确,正确,8位传送指令,位传送指令,2100H是字节地址是字节地址MOVAX,2100H;正确,正确,16位传送指令,位传送指令,2100H是字地址是字地址MOVEAX,2100H;正确,正确,32位传送指令,位传送指令,2100H是双字地址是双字地址假设已经定义:假设已经定义:XDW150指令指令MOVBX,X是是16位传送指令,正确位传送指令,正确指令指令MOVBL,X是错误的,操作数类型不匹配是错误的,操作数类型不匹配1919间接(偏移)地址间接(偏移)地址:把把存存储储单单元元的的偏偏移移地地址址先先装装入入某某个个寄寄存存器器,通通过过这这个个寄寄存存器器来来找找到到这这个存储单元,称为个存储单元,称为“寄存器间接寻址寄存器间接寻址”。已经定义:已经定义:ADB12,34MOVSI,OFFSETA;把变量把变量A的偏移地址装入的偏移地址装入SI;OFFSET是保留字,表示取出后面变量的偏移地址是保留字,表示取出后面变量的偏移地址MOVBL,SI;变量变量A的第一个值送的第一个值送BLMOVBH,SI+1;第二个值送第二个值送BH,等同于等同于MOVBH,1SI16位位80X86微微处处理理器器只只有有BX,BP,SI,DI这这4个个寄寄存存器器可可以以用用来来“间间接接寻寻址址”。不不另另加加说说明明的的话话,使使用用BP时时自自动动用用SS的的值值作作为为段段基基址址,使用使用BX,SI,DI时自动用时自动用DS的值作为段基址。的值作为段基址。2020已经定义:已经定义:ARRAYDW35,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个元素距数组首地址的位移量装入个元素距数组首地址的位移量装入BX
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 中学教育 > 初中教育


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号