数据表示和寻址_第1页
数据表示和寻址_第2页
数据表示和寻址_第3页
数据表示和寻址_第4页
数据表示和寻址_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据表示和寻址第2章数据表示和寻址理解计算机的数据表达熟悉汇编语言的常量表达掌握汇编语言的变量定义和属性掌握处理器指令的数据寻址方式32.1数据表示数据(Data):计算机处理的对象对应指令操作的对象:操作数(Oprand)计算机中的数据要用二进制的0和1组合表示进入计算机的任何信息都要转换成0和1数码IA-32整数指令支持的基本数据类型8、16、32、64位无符号整数8、16、32、64位有符号整数ASCII字符、字符串和BCD码42.1.1数制人习惯使用十进制计数计算机使用二进制进行数据处理十六进制数便于表达二进制数二进制数用后缀字母B十六进制数用后缀字母H51.二进制便于计算机存储及物理实现特点:逢二进一,由0和1两个数码组成,基数为2,各个位权以2k表示二进制数: anan-1…a1a0.b1b2…bm= an×2n+an-1×2n-1+…+a1×21+a0×20

+b1×2-1+b2×2-2+…+bm×2-m 其中ai,bj非0即1二进制数的算术运算:逢2进1、借1当2示意图二进制数的算术运算返回2.逻辑运算事件的假和真可用数码0和1表示事件之间的关系可以利用二进制表达数字电路的低高电平用数码0和1表示数字信号之间的关系可以利用二进制描述数码0和1仅仅代表两种状态它们的运算是逻辑运算逻辑与AND: 11010011=0001逻辑或OR: 11010011=1111逻辑非NOT:

1101=0010逻辑异或XOR: 11010011=11103.十六进制用于表达二进制数,相互转换简单基数16,逢16进位,位权为16k16个数码:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F十六进制数:

anan-1…a1a0.b1b2…bm= an×16n+an-1×16n-1+…+a1×161+a0×160 +b1×16-1+b2×16-2+…+bm×16-m 其中ai,bj是0~F中的一个数码十六进制数的加减:逢16进位1,借1当16减法加法十六进制数的加法运算

23D9+94BEB8979+14=23=16(carry)+713+11+1(carry)=25=16(carry)+93+4+1(carry)=82+9=11=B返回十六进制数的减法运算

A59F-62B842E715-8=716(borrow)+9-11=14=E5-2-1(borrow)=210-6=4返回114.数制之间的转换十进制二进制十六进制BCD码常用二进制位权00000002-3=0.12510001112-2=0.2520010222-1=0.5300113320=1401004421=2501015522=4601106623=8701117724=16810008825=32910019926=64101010A27=128111011B28=256121100C29=512131101D210=1024141110E215=32768151111F216=6553612二进制数或十六进制数转换为十进制数方法:按权展开二进制数转换为十进制数 0011.1010B =1×21+1×20+1×2-1+0×2-2+1×2-3 =3.625十六进制数转换为十进制数 1.2H

=1×160+2×16-1

=1.12513十进制整数转换为二或十六进制数整数部分转换:用除法十进制数整数部分不断除以基数2或16,并记下余数,直到商为0为止由最后一个余数起逆向取各个余数,则为转换成的二进制和十六进制数 126=01111110B 126=7EH示意图14十进制整数的转换返回15十进制小数转换为二或十六进制数小数部分转换:用乘法分别乘以各自的基数,记录整数部分,直到小数部分为0为止 0.8125=0.1101B 0.8125=0.DH小数转换会发生总是无法乘到为0的情况可选取一定位数(精度)将产生无法避免的转换误差示意图16十进制小数的转换返回17二进制和十六进制数的相互转换二进制和十六进制数之间具有对应关系以小数点为基准整数从左向右,小数从右向左每4个二进制位对应一个十六进制位 00111010B=3AH F2H=11110010B182.1.2数值的编码编码:用文字、符号或者数码来表示某种信息(数值、语言、操作指令、状态等)的过程二进制编码:组合0和1数码机器数:计算机用0和1数码组合表达的数值真值:现实中真实的数值数值的两种编码方式定点格式(第2章)浮点格式(第9章)191.定点整数定点格式:固定小数点的位置表达数值定点整数:小数点固定在机器数的最右侧定点小数:小数点固定在机器数的最左侧无符号整数(无符号数)只表达0和正整数的定点整数N位无符号整数表达范围:0~2N-1有符号整数(有符号数、带符号数)表达负整数、0和正整数的定点整数最高位表达数值正负符号位用0表示正数、1表示负数示意图20定点整数格式返回212.补码有符号整数在计算机中默认采用补码最高位表示符号:正数用0,负数用1正数补码:直接表示数值大小(同无符号数)负数补码:将对应正数补码取反加1 [105]补码=01101001B [-105]补码=[01101001B]取反+1 =10010110B+1=10010111B8位二进制补码的数值范围:-128~+12716位二进制补码的数值范围:-215~+215-132位二进制补码的数值范围:-231~+231-1N位二进制补码的数值范围:-2N-1~+2N-1-122负数求补负数真值“取反加1”得机器数补码负数补码“取反加1”得到负数真值补码:11100000B真值:-([11100000]求反+1)=-(00011111+1) =-00100000=-25=-32负数求补运算,等效于用带借位的0作减法真值:-8,补码:[-8]补码=00H-08H=F8H补码:11111000,真值:-(00H-F8H)=-08H=-8+8= 00001000 11110111+ 1-8= 111110000= 00000000-(8= 00001000)-8= 11111000233.补码运算利用无符号数加法结合补码表达,实现无符号数加法无符号数减法有符号数加法有符号数减法无符号数加减运算,需要利用进位或借位有符号数加减运算,注意避免出现溢出[X]补码+[Y]补码=[X+Y]补码[X]补码-[Y]补码=[X]补码+[-Y]补码=[X-Y]补码244.原码和反码正数的原码、反码和无符号数一样求负数的原码、反码和补码首先计算其对应正数的编码然后取反符号位(设置为1)成为原码再取反其他位得到反码最后加1就是补码真值:32,机器数:00100000B=20H真值:-32,机器数: [-32]原码=10100000B=A0H [-32]反码=11011111B=DFH [20H]补码=11100000B=E0H252.1.3字符的编码在计算机中,各种字符需要用若干位的二进制码的组合表示,即字符的二进制编码由于字节为计算机的基本存储单位,所以常以8个二进制位为单位表达字符0123456789English汉字261.BCD(二进制表达的十进制)二进制编码的十进制数一个十进制数位用4位二进制编码来表示8421BCD码:低10个4位二进制编码表示0~9压缩BCD码:一个字节表达两位BCD码非压缩BCD码:一个字节表达一位BCD码(低4位表达数值,高4位常设置为0)BCD码很直观BCD码:0100100101111000.000101001001十进制真值: 4978.149BCD码便于输入输出,表达数值准确272.ASCII(美国标准信息交换码)标准ASCII码用7位二进制编码,有128个不可显示的控制字符:前32个和最后一个回车CR:0DH换行LF:0AH响铃BEL:07H可显示和打印的字符:20H及以后的95个编码数码0~9:30H~39H大写字母A~Z:41H~5AH小写字母a~z:61H~7AH空格:20H扩展ASCII码:最高D7位为1,表达制表符号283.Unicode(统一码)8位ASCII码表达英文字符16位国标码表达汉字字符汉字机内码:国标码在计算机中使用的编码国际信息交换码Unicode16位编码对世界上所有语言的大多数字符进行编码提供扩展能力Unicode兼容ASCIIUnicode给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论是什么语言29什么是统一码?WhatisUnicode?Unicodeprovidesauniquenumberforeverycharacter,

nomatterwhattheplatform,

nomatterwhattheprogram,

nomatterwhatthelanguage.Unicode给每个字符提供了一个唯一的数字, 不论是什么平台, 不论是什么程序, 不论是什么语言返回302.2常量表达1.常数十、十六和二进制形式表达的数值以后缀字母区分,十进制数可以不加以字母A~F开头的十六进制常数,要加前导02.字符和字符串英文缩略号括起来的单个字符或多个字符数值是每个字符对应的ASCII码值3.符号常量使用标识符表达一个数值符号定义伪指令:等价EQU,等号=4.数值表达式用运算符连接各种常量构成的算式算术运算符:+(加)-(减)*(乘)/(除)常量具有确定数值31〔例2-1〕数据表达程序-100000000 6464646464const1 byte100,100d,01100100b,64h,'d'00000005 017F8080FFFFconst2 byte1,+127,128,-128,255,-10000000B 699720E032CEconst3 byte105,-105,32,-32,32h,-32h00000011 303132333435 363738396162 6378797A4142 4358595Aconst4 byte'0123456789','abcxyz','ABCXYZ'32〔例2-1〕数据表达程序-200000027 0D0A00crlf byte0dh,0ah,0=0000000A minint =10=000000FF maxint equ0ffh0000002A 0A0FFAF5const5 byteminint,minint+5 bytemaxint-5,maxint-minint0000002E 105615EBconst6 byte4*4,34h+34,67h-52h,52h-67h332.3变量应用变量(Variable)程序运行中随之发生变化的结果保存在可读可写的主存空间实质是主存单元的数据,因而可以改变变量需要事先定义才能使用变量具有属性方便应用变量表达主存数据,即存储器操作数342.3.1变量定义申请存储空间,还可以进行存储单元初始化 变量名变量定义伪指令初值表变量名是用户标识符,表示首元素逻辑地址变量定义伪指令有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE初值表是用逗号分隔的参数各种形式的常量“?”表示初值不确定,即未赋初值复制操作符DUP 重复次数DUP(重复参数)351.变量定义伪指令助记符:BYTE变量类型:字节分配一个或多个字节单元;每个数据是字节量,也可以是字符串常量字节量表示8位无符号数或有符号数,字符的ASCII码值助记符:WORD变量类型:字分配一个或多个字单元;每个数据是字量、16位数据字量表示16位无符号数或有符号数、16位段选择器、16位偏移地址助记符:DWORD变量类型:双字分配一个或多个双字单元;每个数据是双字量、32位数据双字量表示32位无符号数或有符号数、32位段基地址、32位偏移地址助记符:QWORD变量类型:4个字分配一个或多个8字节单元;8字节量表示64位数据362.字节量数据BYTE定义8位、字节量变量数据可以表达无符号整数0~255补码表示的有符号整数:-128~+127一个字符(ASCII码值)压缩BCD码:0~99非压缩BCD码:0~9……字符串定义使用字节变量定义BYTE37〔例2-2〕字节变量程序=0000000A minint=1000000000 0080FF80007Fbvar1 byte0,128,255,-128,0,+12700000006 01FF26DA38C8bvar2 byte1,-1,38,-38,38h,-38h0000000C 00bvar3 byte?0000000D 00000005[24]bvar4 byte5dup('$')00000012 0000000A[00]0000000A[0A00]bvar5 byteminintdup(0),minintdup(minint,?)00000030 00000002[020300000002[04]] byte2dup(2,3,2dup(4))383.字量数据WORD定义16位、字量变量数据可以表达16位无符号和有符号整数16位段选择器,16位偏移地址16位数据含高低2个字节,占2个连续的字节存储单元小端方式(LittleEndian)低字节数据存放在低地址存储单元高字节数据存放在高地址存储单元大端方式(BigEndian)低字节数据存放在高地址存储单元高字节数据存放在低地址存储单元39〔例2-3〕字变量程序=0000000A minint =1000000000 00008000FFFF800000007FFFwvar1 word0,32768,65535,-32768,0,+327670000000C 0001FFFF0026FFDA0038FFC8wvar2 word1,-1,38,-38,38h,-38h00000018 0000 wvar3 word?0000001A 20101020wvar4 word2010h,1020h0000001E 00000005[000A0000] word5dup(minint,?)00000032 31393832wvar6 word3139h,3832h00000036 39313238bvar6 byte39h,31h,32h,38h0000003A 00 byte091289128运行结果?40数据的存放顺序:小端方式返回414.双字量数据DWORD定义32位、双字量变量数据可以表达32位无符号和有符号整数32位偏移地址、线性地址或段基地址32位数据包含4个字节,以“高对高、低对低”原则占用4个连续字节空间Howtoopenanegg,fromthelittleendorthebigend?示意图42返回小端存储方式43〔例2-4〕双字变量程序-1=0000000A minint=1000000000 0000000080000000FFFFFFFF 80000000000000007FFFFFFFdvar1 dword0,80000000h,0ffffffffh,\ -80000000h,0,7fffffffh00000018 00000001FFFFFFFF00000026 FFFFFFDA00000038FFFFFFC8dvar2 dword1,-1,38,-38,38h,-38h00000030 00000000dvar3 dword?00000034 0000201000001020 dword2010h,1020h44〔例2-4〕双字变量程序-20000003C 0000000A[0000000A00000000]dvar5 dwordminintdup(minint,?)0000008C 38323139dvar6 dword38323139h00000090 39313238bvar6 byte39h,31h,32h,38h00000094 00 byte091289128运行结果!455.变量定位:指定偏移地址变量定义的存储空间 按照书写的先后顺序一个接着一个分配“ORG参数”控制存放的偏移地址

org100h ;从偏移地址100H处安排指令代码也由汇编程序 按照语句的书写顺序安排存储空间定位伪指令也可以用于控制代码的偏移地址465.变量定位:对齐地址边界N字节数据起始于能够被N整除的地址2字节、16位数据是被2整除的地址(偶地址)4字节、32位数据是被4整除的地址(模4地址)8字节、64位数据是被8整除的地址(模8地址)IA-32处理器允许不对齐边界存放数据,性能有下降“ALIGNN”控制对齐N字节边界

align4 ;对齐4字节地址边界地址A对齐N字节边界AmodN=0

(能够被N整除的地址)47〔例2-5〕变量定位程序 org100h0000010064 bvar1 byte100 align2000001020064 wvar2 word100 align40000010400000000 dvar3 dword? align40000010800000000 dvar4 dword?482.3.2变量属性变量定义分配存储空间赋初值创建变量名变量名具有两类属性:⑴地址属性:首个变量所在存储单元的逻辑地址,含有段基地址和偏移地址⑵类型属性:变量定义的数据单位字节量BYTE字量WORD双字量DWORD

3字量FWORD4字量QWORD10字节量TBYTE49⒈地址操作符地址操作符用于获取变量名的地址属性[]括起的表达式作为存储器地址指针$返回当前偏移地址OFFSET变量名返回变量名所在段的偏移地址SEG变量名返回段基地址(实地址存储模型)50〔例2-6〕变量地址属性程序-1

;数据段00000000 1234bvar byte12h,34h org$+100000000C 000100020003000400050006 000700080009000Aarray word1,2,3,4,5,6,7,8,9,1000000020 5678wvar word5678h=00000016 arr_size=$-array=0000000B arr_len=arr_size/200000022 9ABCDEF0dvar dword9abcdef0h51〔例2-6〕变量地址属性程序-2

;代码段00000000 A000000000R moval,bvar00000005 8A2500000001R movah,bvar+10000000B 66|8B1D 00000022R movbx,wvar[2]00000012 B90000000B movecx,arr_len00000017 BA00000017R movedx,$0000001C BE00000022R movesi,offsetdvar52〔例2-6〕变量地址属性程序-300000021 8B3E movedi,[esi]00000023 8B2D00000022R movebp,dvar00000029 E800000000E calldisprdEAX=00003412,EBX=7FFDDEF0,ECX=0000000B,EDX=00401017ESI=00405022,EDI=9ABCDEF0,EBP=9ABCDEF0,ESP=0013FFC4运行结果53⒉类型操作符类型操作符使用变量名的类型属性类型名PTR变量名将变量名按照指定的类型使用TYPE变量名返回占用字节空间的字量数值LENGTHOF变量名返回整个变量的数据项数SIZEOF

变量名返回整个变量占用的字节数54〔例2-7〕变量类型属性程序-1

;代码段00000000 A10000000CR moveax,dwordptrarray ;获得数据00000005 BB00000001 movebx,typebvar ;获得字节类型值0000000A B900000002 movecx,typewvar ;获得字类型值0000000F BA00000004 movedx,typedvar ;获得双字类型值55〔例2-7〕变量类型属性程序-200000014 BE0000000A movesi,lengthofarray ;获得数据个数00000019 BF00000014 movedi,sizeofarray ;获得字节长度0000001E BD00000016 movebp,arr_size ;获得字节长度00000023 E800000000E calldisprdEAX=00020001,EBX=00000001,ECX=00000002,EDX=00000004ESI=0000000A,EDI=00000014,EBP=00000016,ESP=0013FFC4运行结果562.4数据寻址方式指令有两部分:操作码和操作数操作码:处理器要执行哪种操作不可缺少,用助记符表示操作数:指令执行的参与者各种操作的对象,需要通过地址指示数据寻址方式:通过地址查找数据(操作数)立即数寻址:数据在指令代码中,用常量表达寄存器寻址:数据在寄存器中,用寄存器名表示存储器寻址:数据在主存中,用存储器地址代表572.4.1立即数寻址操作数紧跟操作码,是机器代码的一部分操作数从指令代码中立即得到,即立即数(Immediate),用常量形式直接表达立即数寻址方式只用于源操作数,常用来给寄存器和存储单元赋值例如:MOVEAX,33221100H机器代码:B800112233操作码:B8立即数:33221100示意图58立即数寻址返回59〔例2-8〕立即数寻址程序-1

;数据段=00000040 const =64000000008749 bvar byte87h,49h00000002123456780000000C dvar dword12345678h,12

;代码段00000000B010 moval,12h00000002B464 movah,'d'0000000466|BBFFFFlabl: movbx,-100000008B900000040 movecx,const60〔例2-8〕立即数寻址程序-20000000DBA00000040 movedx,const*4/typedvar00000012BE00000000R movesi,offsetbvar00000017BF00000004R movedi,labl0000001CC60500000000R4C movbvar,01001100b00000023 C70500000006R00000012 movdvar+4,12h612.4.2寄存器寻址操作数存放在处理器的内部寄存器中用寄存器名表示它的内容绝大多数指令采用通用寄存器寻址部分指令支持专用寄存器,例如段寄存器寄存器寻址方式简单快捷,最常使用例如:MOVEBX,EAX32位通用寄存器:EAXEBXECXEDX……16位通用寄存器:AXBXCXDX……8位通用寄存器:AHALBHBL……62〔例2-9〕寄存器寻址程序 ;代码段000000008AC4 moval,ah0000000266|8BD8 movbx,ax000000058BD8 movebx,eax0000000766|8CDA movdx,ds0000000A66|8EC2 moves,dx movedi,sieg0208.asm(11):errorA2022:instructionoperandsmustbethesamesize出错了!632.4.3存储器寻址操作数在主存中,通过存储器地址指示编程时,存储器地址使用包含段选择器和偏移地址的逻辑地址段选择器(段寄存器)指示段基地址默认规定:数据在DS指向的数据段;EBP或ESP作为基地址,数据在SS指向的堆栈段显式说明:使用段超越指令前缀,段寄存器名后跟英文冒号偏移地址由各种寻址方式计算,常被称为有效地址EA(EffectiveAddress)641.段寄存器的默认和超越访问存储器的方式默认可超越偏移地址取指令CS无EIP堆栈操作SS无ESP一般数据访问DSCSESSSFSGS有效地址EAEBP基址的寻址方式SSCSESDSFSGS有效地址EA串操作的源操作数DSCSESSSFSGSESI串操作的目的操作数ES无EDI主存操作数常通过变量形式引用一般不需要使用段超越前缀指令652.偏移地址的组成32位有效地址=基址寄存器+(变址寄存器×比例)+位移量基址寄存器:任何8个32位通用寄存器之一变址寄存器:除ESP外的任何32位通用寄存器之一比例:1,2,4或8位移量:8或32位有符号值变化出多种主存寻址方式663.直接寻址有效地址只有位移量部分,直接包含在指令代码中常用于存取变量例如: MOVECX,COUNT;COUNT是变量 MOVECX,DS:[405000H]指令代码:8B0D00504000操作码和寻址方式:8B0D操作数:有效地址00405000H示意图67存储器直接寻址返回68〔例2-10〕存储器直接寻址程序-1 ;数据段00000000

8749 bvar byte87h,49h00000002

123456780000000C dvar dword12345678h,12 ;代码段00000000

8A0D00000000R movcl,bvar00000006

8B1500000002R movedx,dvar69〔例2-10〕存储器直接寻址程序-20000000C883500000001R movbvar+1,dh0000001266|891500000004R movwordptrdvar+2,dx00000019C70500000002R876543

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论