数据定义与传送哦.ppt
《数据定义与传送哦.ppt》由会员分享,可在线阅读,更多相关《数据定义与传送哦.ppt(136页珍藏版)》请在三一办公上搜索。
1、1,新 编汇编语言程序设计,2,第二章 数据定义与传送,2.1 数据的定义2.2 数据的传送 2.3 汇编语言上机操作,3,2.1 数据的定义,2.1.1 数据段2.1.2 数据定义,4,汇编语言程序定义的“数据”:(1)变量(Variable)有一个名字,运行过程中值可能发生变化,定义时可以 设置“初始值”。(2)常数(Constant)可以直接写在指令内,也可以存放在数据段内。(3)缓冲区(Buffer)从输入设备输入若干数据时,需要在数据段里事先留出 必要的存储单元,称为“输入缓冲区”。输出一批数据时,需要把输出内容事先存放在若干内存 单元中,称为“输出缓冲区”。,5,2.1.1 数据段
2、,DATASEGMENT;在这里定义数据 DATAENDS,DATA:程序员给这个段起的名字。SEGMENT:保留字,说明一个段从这里开始。ENDS:保留字,说明一个段到此结束。;分号后面的文字是“注释”,不参加汇编,6,伪指令:说明性的语句;汇编后不会产生对应的机器指令。,2.1.1 数据段,数据段名SEGMENT 数据段名ENDS,7,2.1.2 数据定义,数据定义伪指令:变量名 数据定义伪指令助记符 数据,数据,数据定义伪指令助记符:DB(Define Byte):每个数据占用一个字节(8b)DW(Define Word):每个数据占用一个字(16b)DD(Define Double W
3、ord):每个数据占用一个双字(32b)DQ(Define QuartWord):每个数据占用8个字节(64b)DT(Define Ten Byte):每个数据占用10个字节(80b),8,DATASEGMENTXdb-1,255,A,3+2,?db“ABC”,0FFH,11001010BYdb3 dup(?)DATAENDS,数据定义举例(1):,有符号数用它的补码存储字符用ASCII代码存储?表示一个尚未确定的值DUP表示重复定义变量名代表这个单元的地址,9,DSEGSEGMENTZDW-2,-32768,65535,ABWDD 12345678H,-400000DW Z,W-ZDSEGE
4、NDS,数据定义举例(2):,多字节数据的高位存放在较高地址单元中出现在数据部分的变量名代表这个变量的偏移地址,10,变量名符号地址:表示存储空间的首地址符号地址可有可无有符号地址,可以方便存取变量属性:段属性(SEG)、偏移属性(OFFSET)、类型(TYPE)、长度(LENGTH)、大小(SIZE),数据定义伪指令:变量名 数据定义伪指令助记符 数据,数据,2.1.2 数据定义,DATASEGMENTXdb-1,255,A,3+2,?DATAENDS,11,变量X,Y,Z,W的属性,DATASEGMENTXdb-1,255,A,3+2,?db“ABC”,0FFH,11001010BYdb3
5、 dup(?)DATAENDS,DSEGSEGMENTZDW-2,-32768,65535,ABWDD 12345678H,-400000DW Z,W-ZDSEGENDS,12,操作数:是用逗号分割的常数表达式?不确定 dup 复制操作符 可以是字符串 可以是变量名,2.1.2 数据定义,数据定义伪指令:变量名 数据定义伪指令助记符 数据,数据,13,例:X dw 23 Y db 23Z db?M dw?db 3,2 dup(1,2)dw 3,2 dup(1,2),3,1,2,1,2,2.1.2 数据定义,14,例:str1 db a,b str2 db abstr3 dw a,b str4
6、dw ab 61 62h str5 dw abc,str1 db hello str2 dw hello,2.1.2 数据定义,15,mess1 db 12,13 mess2 dw 24 mess3 dw mess1 mess4 dd mess2,mess3,mess1的偏移地址,mess4,mess2的偏移地址,mess2的段基址,2.1.2 数据定义,16,练 习,某数据段内有如下数据定义:Xdb30,30H,ABC,2-3,?,11001010B dw0FFH,-2,“CD”Ydd20 dup(15,3 dup(?),0)Zdb3 dup(?)WdwZ-X假设变量X的偏移地址为20H。(
7、1)写出变量X各数据在内存中的具体位置和内存单元的值。(2)写出变量Y,Z的偏移地址。(3)写出变量W对应的内存单元的值。,17,2.2 数据的传送,2.2.1 指令格式2.2.2 程序段2.2.3基本传送指令2.2.4 其他传送指令2.2.5 堆栈2.2.6操作数表达式,18,汇编语言程序由若干“语句”组成,每个“语句”占用一行。三种类型语句:指令语句:包含一条符号指令,与一条机器指令相对应,汇编以后是机器指令的二进制代码,这 个代码被称为“目标(Object)”;伪指令语句:一条说明性的语句。伪指令本身汇编后不产 生“目标”。注释行:书写说明性文字,不进行“汇编”,也不产生“目标”。,19
8、,伪指令和指令的区别,与CPU有关不同的CPU类型有不同的指令系统,与汇编程序有关汇编程序的版本不同,所提供的伪指令不同,使CPU产生动作,不产生CPU动作,指令的执行是在程序的运行期间,在程序执行前(汇编期间)由汇编程序来处理,产生目标代码,不产生目标代码,MOV AX,1234HLEA AX,1234H,DB.MODEL SMALL,20,180X86指令格式,如:BEGIN:MOV AX,0;将0传送给AX标号:程序员给这一行起的名字,后面跟上冒号,代表这一行的地 址。标号用字母开始,不要使用保留字作为标号。操作码是这条指令需要完成的操作,用指令助记符表示。,标号:操作码 操作数;注释,
9、2.2.1 指令格式,21,操作数 是指令的操作对象,指令的操作数可以03个。两个操作数时,右面的操作数称为“源操作数”,左面的操作数称为“目的操作数”。“源操作数”参与指令操作,不保存结果,内容不会改变。“目的操作数”参与指令操作,还保存指令的操作结果,指令执行后,目的操作数的内容被改变。;注释 用来添加一些说明,例如说明本行指令的功能。,180X86指令格式,标号:操作码 操作数;注释,如:BEGIN:MOV AX,0;将0传送给AX,22,2 操作数,(1)寄存器操作数:包括段寄存器、数据寄存器、地址寄存器例如:MOVBX,AX功能:AX寄存器内容送入BX寄存器。AX是“源操作数”,写在
10、右边,指令执行后,它的内容不会被改变。BX是“目的操作数”,写在左边,指令执行后,它的内容将被改变。,注意:专用寄存器IP/EIP和FLAGS/EFLAGS不能作为操作数 出现在指令中。,23,(2)立即数操作数:二进制/十进制/十六进制常数,可求值的 表达式,字符,标号等。,常数300送入BX寄存器MOVBX,300或者:MOVBX,150*2,DATA段的段基址送DS MOVAX,DATA MOVDS,AX,注意:立即数不能用作“目的操作数”。,24,为了对存储器的一个单元进行访问,需要给出这个单元的 段基址和偏移地址。大多数情况下,指令使用DS寄存器的内容作为操作数的段 基址,指令中不需
11、要再指出段基址。,3存储器操作数,指出偏移地址的方法有两种:直接的和间接的。,25,(1)直接(偏移)地址:在指令里直接写出存储单元的偏移地址。,DATA SEGMENTA DB 12,34,56ARRAY DW 55,66,77,88,99DATA ENDS,把变量(数组)A的前两个数据送BL,BH寄存器:MOV BL,A;也可以写作 MOV BL,A MOV BH,A+1;或MOV BH,A+1,MOV BH,A 1 A代表数据“12”的偏移地址,A+1是数据“34”的偏移地址。,MOV BX,A;把变量A送BL,变量A+1送BH,错误!,26,(1)直接(偏移)地址:在指令里直接写出存储
12、单元的偏移地址。,DATA SEGMENTA DB 12,34,56ARRAY DW 55,66,77,88,99DATA ENDS,假设已经知道A的偏移地址是0000H,前面的指令可以写作:MOV BL,0000H;方括号不能省略 MOV BH,0001H;方括号不能省略 常数地址格式一般没有实用价值。上面的两条指令可以用一条指令代替,效果相同:MOV BX,0000H;取地址0000H开始的两字节,送入BL和BH,27,举例1:假设已经定义:XDW350 MOV BX,X MOV BL,X举例2:MOV AL,2100HMOV AX,2100HMOV EAX,2100H,;是16位传送指令
13、,正确,;是错误的,操作数类型不匹配,;正确,8位传送指令,2100H是字节地址,;正确,16位传送指令,2100H是字地址,;正确,32位传送指令,2100H是双字地址,28,(2)间接(偏移)地址:把存储单元的偏移地址先装入某个寄存器,通过这个寄存器来找到这个存储单元,也称为“寄存器间接寻址”。,注意:16位80X86微处理器只有BX,BP,SI,DI这4个寄存器可以用来“间接寻址”。不另加说明的话,使用BP时自动用SS的值作为段基址,使用BX,SI,DI时自动用DS的值作为段基址。,举例1:已经定义:A DB 12,34MOVSI,OFFSET A;把变量A的偏移地址装入SI;OFFSE
14、T是保留字,表示取出后面变量的偏移地址MOVBL,SI;变量A的第一个值送BLMOVBH,SI+1;第二个值送BH,MOV BH,1SI,29,举例2:已经定义:ARRAY DW 35,73,27,780,12,55取出字数组ARRAY的第3个元素送入AX:;方法1MOV AX,ARRAY 4;ARRAY代表数组首地址,位移量=4,直接寻址;也可以写作MOV AX,ARRAY+4;方法2MOV BX,OFFSET ARRAY;数组首地址装入BXMOV AX,BX+4;第3个元素距数组首元素4个字节;方法3MOV BX,4;第3个元素距数组首地址的位移量装入BXMOV AX,ARRAY BX;A
15、RRAY代表数组首地址,BX中是位移量,30,(2)间接(偏移)地址:基址变址寻址:用两个寄存器联合起来寻址。从(BX,BP)和(SI,DI)中各 选出一个使用。出现BP时使用SS作为段基址寄存器,其它情况用DS。例:MOV AX,BX+SI;基址(BX)变址(SI)寻址,31,寻址方式,立即数寻址寄存器寻址存储器寻址,直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,32,1 立即数寻址,例:MOV AL,05H;(AL)05HMOV AX,0102H;(AX)0102HMOV AX,abMOV AX,0B012H,立即寻址,33,2 寄存器寻址方式,例:MOV BX,123
16、4H;(BX)1234HMOV AX,BX;(AX)(BX),寄存器寻址,可用寄存器:段寄存器(DS,CS,SS,ES)数据寄存器(AX,BX,CX,DX)地址寄存器(BX,BP,SI,DI),34,3 直接寻址,例:MOV AX,2000H;(AX)DS:2000HMOV AX,ARRAY;(AX)ARRAY,直接寻址,35,例:MOV AX,BX;(AX)DS:(BX),4 寄存器间接寻址,寄存器间接寻址,可用寄存器:地址寄存器(BX,BP,SI,DI)BP-SS;BX、SI、DI-DS,36,例:MOV AX,6SI;(AX)DS:(SI+6)或MOV AX,SI+6 或MOV AX,C
17、OUNTSI,5 寄存器相对寻址,寄存器相对寻址,37,例:MOV AX,BXDI;(AX)DS:(BX+DI)或 MOV AX,BX+DI,6 基址变址寻址,基址变址,可用寄存器:地址寄存器(BX,BP,SI,DI)基址寄存器:BX、BP 变址寄存器:SI、DI,38,例:MOV AX,MASKBXSI 或MOV AX,MASKBX+SI 或MOV AX,MASK+BX+SI,7 相对基址变址寻址,相对基址变址,39,寻址方式,立即数寻址寄存器寻址存储器寻址,直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,40,练 习,MOV AX,ARRAY4MOV AX,BX MOV
18、AX,BX+2MOV AX,ARRAY BXMOV AX,BX+SIMOV AX,BX+DI+2,;直接寻址,偏移地址=ARRAY+4,;寄存器间接寻址,;寄存器相对寻址,;寄存器相对寻址,;基址(BX)变址(SI)寻址,;相对基址变址寻址,41,请指出以下各指令的操作数所使用的寻址方式。(1)MOV SI,2100H(2)SBB DISPBX,7(3)AND DI,AX(4)OR AX,609EH(5)MOV BXDI30H,CX(6)PUSH ES:BP,练 习,42,(BX)=637DH,(SI)=2A9BH,D=7237H,试确定在以下各种寻址方式下的偏移地址是多少?(1)直接寻址(2
19、)使用BX的间接寻址(3)使用BX的寄存器相对寻址(4)基址变址寻址,练 习,43,现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。(1)MOV AX,1200H(2)MOV AX,1200H(3)MOV AX,1100BX(4)MOV AX,1100BXSI,练 习,44,32位80 x86微处理器的存储器寻址:,偏移地址=基址+比例因子
20、变址+位移量,位移量:存放在指令中的一个8位、16位或32位的数;基址:存放在基址寄存器中的内容;变址:存放在变址寄存器中的内容;比例因子:(386及其后继机型)值可为1,2,4或8;,直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,+,相对比例变址寻址,基址比例变址寻址方式,相对基址比例变址寻址方式,45,32位80 x86微处理器的存储器寻址:,MOV AX,ARRAY4 MOV AX,ECX MOV AX,EAX+4MOV AX,EBX+ECXMOV AX,EBP+EDX+4 MOV AX,EBX+4*ESI MOV AX,8*EBP+ECX+6,;直接寻址,偏移地址=
21、ARRAY+4,;寄存器间接寻址,;寄存器相对寻址,;基址(EBX)变址(ECX)寻址,;相对基址(EBP)变址(EDX)寻址,使用SS,;基址比例变址寻址,;相对基址比例变址寻址,46,16/32位寻址时偏移地址四种成分的组成,直接寻址:DS间接寻址:BP/ESP/EBP-SS;其余-DS,47,2.2.2 程序段,程序段常见格式:CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;其他指令MOVAX,4C00HINT21HCODEENDSENDSTART,48,ASSUME 伪指令用来指定段和段寄存器之间的对应关系,供汇编程序使
22、用。,DATASEGMENT ADB55DATAENDSDSEGSEGMENT XDB10DSEGENDS,CODE SEGMENTASSUME DS:DATA,ES:DSEG,CS:CODE MOV AX,DATA MOV DS,AX MOV AX,DSEG MOV ES,AXCODE ENDS,指令 MOV AL,A;自动按照 MOV AL,DS:0000H的格式汇编,执行后(AL)=55。指令 MOV DL,X;自动按照 MOV DL,ES:0000H的格式汇编,执行后(DL)=10。,把段地址装入相应的段寄存器,代码段不需要此操作,在程序初始化时完成。,49,为了得到正确结果,上面第4
23、条指令改写为:MOVDL,ES:DI;执行后(DL)=10,结果正确,这条指令“显式”地指定了段基址,汇编出来的机器指令比 MOV DL,DI多一个字节,称为“段跨越前缀”。,MOV SI,OFFSET A;A的偏移地址装入SIMOV DI,OFFSET X;X的偏移地址装入DIMOV AL,SI;取A的值送ALMOV DL,DI;取X的值送DL执行的结果:(AL)=55 正确,(DL)=55 错误,50,程序段常见格式:CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX;其他指令 MOVAX,4C00H INT21HCODEEN
24、DSENDSTART,2.2.2 程序段,51,处理器选择伪指令.386.386P.486.486P.586.586P.686.686P.386表示程序选用80386的基本指令集,.386P表示选用80386的基本指令和保护模式下的特权指令。缺省的处理器选择伪指令是.8086,指令 INT 21H 表示调用由操作系统提供的21H号服务程序。AH中为“功能号”,AH=4CH表示返回操作系统的操作。AL中的代码称为“返回代码”,00H表示“正常返回”。END 伪指令表示整个程序到此结束,后面的标号START表示 程序入口地址。,52,2.2.2 程序段,程序段常见格式:CODESEGMENTASS
25、UMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;其他指令MOVAX,4C00HINT21HCODEENDSENDSTART,53,2.2.3 基本传送指令,MOV指令的一般格式:,1MOV(Move,传送)指令,MOV指令把源操作数(source)传送到目的操作数(destination),MOVdest,src,举例:设指令执行前,(AX)=2345H,(BX)=1111H。指令“MOV AX,BX”执行后,(AX)=1111H,(BX)=1111H。,54,源操作数可以是:寄存器、存储器、立即数;目的操作数可以是:寄存器、存储器。,55,MOV指令的使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 定义 传送
链接地址:https://www.31ppt.com/p-6296339.html