版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Principle of Microcomputer and Interface Techniques微机原理与接口技术第第 3 3 章章 数据处理数据处理3.1 3.1 数据表示数据表示3.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类位操作类指令指令3.7 3.7 串操作指令串操作指令本本 章章 内内 容容 二进制二进制 二进制加法二进制加法/ /减法减法 二进制逻辑运算(二进制逻辑运算(ANDAND、OROR、NOTNOT、XOR XOR 等等) 数值之间的转换(
2、十六进制与二进制转换关系数值之间的转换(十六进制与二进制转换关系) 补码、补码补码、补码运算运算 原码、原码、反码反码 BCDBCD码码 ASCIIASCII码码3.1 3.1 数据表示数据表示3.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类指令位操作类指令本本 章章 内内 容容3.2 3.2 常量表达常量表达常数常数由十、十六由十、十六和二进制形式表达的数值和二进制形式表达的数值各种进制的数据,以各种进制的数据,以后缀字母区分,十进制数可以不加后缀字母区分,十进制数
3、可以不加以字母以字母A AF F开头的十六进制常数,要加前导开头的十六进制常数,要加前导0 0字符和字符串字符和字符串它们是英文它们是英文缩略号括起来的单个字符或多个字符缩略号括起来的单个字符或多个字符其数值其数值是每个字符对应的是每个字符对应的ASCIIASCII码值码值符号常量符号常量使用标识符表达一个数值使用标识符表达一个数值符号定义伪指令:等价符号定义伪指令:等价EQUEQU,等号,等号数值表达式数值表达式是指用运算符连接各种常量所构成的算式是指用运算符连接各种常量所构成的算式算术运算符:(加)算术运算符:(加) (减)(减) * *(乘)(乘) / /(除)(除)例例3-13-1数据
4、表达程序数据表达程序1 13.3 3.3 变量应用变量应用变量(变量(VariableVariable)定义:程序运行中有很多随之发生变化的结果,定义:程序运行中有很多随之发生变化的结果,需要在可读可写的主存开辟存储空间保存,这需要在可读可写的主存开辟存储空间保存,这就是变量就是变量变量实质变量实质是主存单元的数据,因而可以改变是主存单元的数据,因而可以改变变量需要事先定义才能使用变量需要事先定义才能使用变量具有属性方便应用变量具有属性方便应用 变量表达主存数据,即存储器操作数变量表达主存数据,即存储器操作数3.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传
5、送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类指令位操作类指令本本 章章 内内 容容3.3.1 3.3.1 变量定义变量定义变量定义为变量申请变量定义为变量申请固定长度固定长度为为单位单位的存储的存储空间,还可以将相应的存储单元初始化。空间,还可以将相应的存储单元初始化。汇编语言格式:汇编语言格式:变量名变量名 变量定义伪指令变量定义伪指令 初值表初值表变量名是用户标识符,表示首元素逻辑地址变量名是用户标识符,表示首元素逻辑地址变量定义伪指令有变量定义伪指令有BYTEBYTE、WORDWORD、DWORDDWORD、FWORDFWORD、QWORDQ
6、WORD、TBYTETBYTE初值表是用逗号分隔的参数初值表是用逗号分隔的参数初值表由各种初值表由各种形式的形式的常量以及常量以及“?”和和DUPDUP组成组成“?”表示表示初值不确定,即未赋初值初值不确定,即未赋初值“DUPDUP”表示表示复制操作符复制操作符1. 1. 变量定义伪指令变量定义伪指令助记符:助记符:BYTE变量类型:变量类型:字节字节分配一个或多个字节单元;分配一个或多个字节单元;每个数据是每个数据是字节量,也可以是字符串常量字节量,也可以是字符串常量字节量表示字节量表示8位无符号数或有符号数,位无符号数或有符号数,字符的字符的ASCII码值码值助记符:助记符:WORD变量类
7、型:变量类型:字字分配一个或多个字单元;分配一个或多个字单元;每个数据是字每个数据是字量、量、16位数据位数据字量表示字量表示16位无符号数或有符号数、位无符号数或有符号数、16位段选择器、位段选择器、16位偏移地址位偏移地址助记符:助记符:DWORD变量类型:变量类型:双字双字分配一个或多个双字单元;分配一个或多个双字单元;每个数据是每个数据是双字量、双字量、32位数据位数据双字量表示双字量表示32位无符号数或有符号数、位无符号数或有符号数、32位段基地址、位段基地址、32位偏移地址位偏移地址助记符:助记符:QWORD变量类型:变量类型:4个字个字分配一个或多个分配一个或多个8字节单元;字节
8、单元;8字节量表字节量表示示64位数据位数据2. 2. 字节量数据字节量数据用用BYTEBYTE定义的变量是定义的变量是8 8位字节量数据位字节量数据可以表达可以表达无符号整数无符号整数0 0255255补码表示的有符号整数:补码表示的有符号整数:-128-128+127+127一个字符(一个字符(ASCIIASCII码值)码值)压缩压缩BCDBCD码:码:0 09999非压缩非压缩BCDBCD码:码:0 09 9字符串定义使用字节变量定义字符串定义使用字节变量定义BYTE例例3-23-2字节变量程序字节变量程序3. 3. 字量数据字量数据用用WORDWORD定义的变量是定义的变量是1616位
9、字量数据位字量数据可以表达可以表达1616位无符号和有符号整数位无符号和有符号整数1616位段选择器,位段选择器,1616位偏移地址位偏移地址1616位数据包含高低两个字节,占用位数据包含高低两个字节,占用2 2个连续个连续的字节存储单元的字节存储单元小端方式(小端方式(Little EndianLittle Endian)低字节数据存放在低地址存储单元低字节数据存放在低地址存储单元高字节数据存放在高地址存储单元高字节数据存放在高地址存储单元例例3-33-3字变量程序字变量程序运行结果912891284. 4. 双字量数据双字量数据用用DWORDDWORD定义的变量是定义的变量是3232位双位
10、双字字量数据量数据可以表达可以表达3232位无符号和有符号整数位无符号和有符号整数3232位偏移地址、线性地址或段基地址位偏移地址、线性地址或段基地址3232位数据包含位数据包含4 4个字节,以个字节,以“高对高、低对高对高、低对低低”原则占用原则占用4 4个连续字节空间个连续字节空间小端存储方式小端存储方式3.3.2 3.3.2 变量属性变量属性变量定义变量定义变量定义除分配存储空间和赋初值外,还可以变量定义除分配存储空间和赋初值外,还可以创建变量名。创建变量名。变量名具有两类属性:变量名具有两类属性:地址属性地址属性:首个变量所在存储单元的逻辑地址,首个变量所在存储单元的逻辑地址,含有含有
11、段基地址段基地址和和偏移地址偏移地址类型属性类型属性:变量定义的数据单位:变量定义的数据单位字节量字节量BYTEBYTE 字量字量WORDWORD 双字量双字量DWORDDWORD 3 3字量字量FWORD 4FWORD 4字量字量QWORDQWORD 10 10字节量字节量TBYTETBYTE 地址操作符地址操作符地址操作符用于获取变量名的地址属性地址操作符用于获取变量名的地址属性 括起的表达式作为括起的表达式作为存储器地址指针存储器地址指针$ $返回当前偏移地址返回当前偏移地址OFFSET OFFSET 变量名变量名 返回变量名所在段的偏移地址返回变量名所在段的偏移地址SEG SEG 变量
12、名变量名返回段基地址(实地址存储模型)返回段基地址(实地址存储模型)例例3-53-5变量地址属性程序变量地址属性程序1 1 类型操作符类型操作符类型操作符使用变量名的类型属性类型操作符使用变量名的类型属性类型名类型名 PTR PTR 变量名变量名 将变量名按照指定的类型使用将变量名按照指定的类型使用TYPE TYPE 变量名变量名返回占用字节空间的字量数值返回占用字节空间的字量数值LENGTHOF LENGTHOF 变量名变量名返回整个变量的数据项数返回整个变量的数据项数SIZEOFSIZEOF 变量名变量名返回整个变量占用的字节数返回整个变量占用的字节数例例3-63-6变量类型属性变量类型属
13、性程序程序; ; 获得数据获得数据; ; 获得字节类型值获得字节类型值; ; 获得字类型值获得字类型值; ; 获得双字类型获得双字类型值值; ; 获得获得arrayarray指向多少个数据项指向多少个数据项; ; 获得获得arrayarray占用多少个字节空间占用多少个字节空间SIZEOFSIZEOF值值 = TYPE = TYPE值值 * * LENGTHOF LENGTHOF值值3.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类指令位操作类指令本本 章章 内内 容容
14、3.4 3.4 数据传送类指令数据传送类指令数据传送数据传送数据传送是把数据传送是把数据从一个位置传送到另一个数据从一个位置传送到另一个位位置,它是计算机置,它是计算机中最基本的操作中最基本的操作同时也是,程序设计同时也是,程序设计中最常使用的指令中最常使用的指令除标志寄存器传送指令外,均除标志寄存器传送指令外,均不影响标志不影响标志位位全面而准确地理解每条指令的功能和应用全面而准确地理解每条指令的功能和应用是编写汇编语言程序的关键是编写汇编语言程序的关键也是理解处理器如何进行数据处理的核心也是理解处理器如何进行数据处理的核心学习指令的注意事项学习指令的注意事项指令的指令的功能功能:该该指令能
15、够实现何种操作。通常指指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式令助记符就是指令功能的英文单词或其缩写形式指令支持的指令支持的寻址方式寻址方式:该该指令中的操作数可以采指令中的操作数可以采用何种寻址方式用何种寻址方式指令对标志的指令对标志的影响影响:该该指令执行后是否对各个标指令执行后是否对各个标志位有影响,以及如何影响志位有影响,以及如何影响其他其他方面方面:该该指令其他需要特别注意的地方,如指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等使用的寄存器等3.4.1 3.4.1 通用传送
16、指令通用传送指令提供方便灵活的通用传送操作提供方便灵活的通用传送操作主要有传送主要有传送MOVMOV和交换和交换XCHGXCHG指令指令源操作数源操作数 src目的操作数目的操作数 dest30H30H被传送的数据被传送的数据MOV指令的功能指令的功能1. 1. 传送指令传送指令MOVMOV把一个字节、字或双字的操作数从源位置传送至把一个字节、字或双字的操作数从源位置传送至目的位置目的位置段寄存器双操作数必须类型一致双操作数必须类型一致操作数必须有明确的类型操作数必须有明确的类型双操作数不允许都是存储单元双操作数不允许都是存储单元操作专用寄存器的指令有限操作专用寄存器的指令有限双操作数必须类型
17、一致双操作数必须类型一致MOV AL,050AHMOV AL,050AH; ; 错误:类型不错误:类型不一致一致 ; 050AH; 050AH超过了寄存器超过了寄存器ALAL范围范围mov eax,050ah mov eax,050ah ; ; 正确:双字量数据传送正确:双字量数据传送MOV ESI,DLMOV ESI,DL; ; 错误:类型不错误:类型不一致一致 ; ; ESIESI为为3232位寄存器,位寄存器,DLDL为为8 8位寄存器位寄存器mov esi,edx mov esi,edx ; ; 正确:两个正确:两个3232位寄存器传送位寄存器传送MOV EBX,255MOV EBX,
18、255 ; ; 错误:无明确类型错误:无明确类型mov byte ptr ebx,255 mov byte ptr ebx,255 ; ; 正确:正确:BYTE PTRBYTE PTR说明是字节操作说明是字节操作mov word ptr ebx,255 mov word ptr ebx,255 ; ; 正确:正确:WORD PTRWORD PTR说明是字操作说明是字操作mov dword ptr ebx,255 mov dword ptr ebx,255 ; ; 正确:正确:DWORD PTRDWORD PTR说明是双字操作说明是双字操作操作数必须有明确的类型操作数必须有明确的类型双操作数不允
19、许都是存储单元双操作数不允许都是存储单元; ; 假设假设dbuf1dbuf1和和dbuf2dbuf2是两个双字变量是两个双字变量MOV MOV DBUF2,DBUF1 DBUF2,DBUF1 ; ; 错误:两个操作数都是存储单元错误:两个操作数都是存储单元mov eax,dbuf1 mov eax,dbuf1 ; ; 正确:正确:EAXEAXDBUF1DBUF1(将(将DBUF1DBUF1内容送内容送EAXEAX)mov dbuf2,eax mov dbuf2,eax ; ; 正确:正确:DBUF2DBUF2EAXEAX(将(将EAXEAX内容送内容送DBUF2DBUF2)2. 2. 交换指令
20、交换指令XCHGXCHG将源操作数和目的操作数内容交换将源操作数和目的操作数内容交换可以用在通用寄存器可以用在通用寄存器与通用寄存器之间与通用寄存器之间可以用在通用寄存器可以用在通用寄存器或存储器或存储器之间之间不能在存储器与存储器之间对换数据不能在存储器与存储器之间对换数据xchg eax,ebxxchg edx,varxchg al,edi例例3-73-7数据交换程序数据交换程序3.4.2 3.4.2 堆栈操作指令堆栈操作指令堆栈是一个堆栈是一个“先进后出先进后出FILO”FILO”存取的存储区存取的存储区域,只有一个数据出入口,即当前栈顶(不域,只有一个数据出入口,即当前栈顶(不断变化)
21、断变化)对应两种对应两种基本操作基本操作数据压进堆栈数据压进堆栈PUSHPUSH数据弹出堆栈操作数据弹出堆栈操作POPPOPSSSS段寄存器指向段寄存器指向堆栈段的起始位置堆栈段的起始位置ESPESP指定栈顶指定栈顶数据进入堆栈,数据进入堆栈,ESPESP逐渐减小逐渐减小数据依次弹出、数据依次弹出、ESPESP逐渐增大逐渐增大Word 1Word 2Word 3Word 4Word 5StackPUSHPOPIA-32IA-32处理器堆栈操作处理器堆栈操作1. 1. 进栈指令进栈指令PUSHPUSHpush srcpush src ESP ESPESPESP4 4(2 2) SS:ESP SS
22、:ESPsrc src 先将先将ESPESP减小作为当前栈顶减小作为当前栈顶后将源操作数后将源操作数( (立即数、通用寄存器和段寄立即数、通用寄存器和段寄存器内容或存储器操作数存器内容或存储器操作数) )传送到当前栈顶传送到当前栈顶以字或双字为单位操作以字或双字为单位操作进栈双字量数据时,进栈双字量数据时,ESPESP减减4 4进栈字量数据时,进栈字量数据时,ESPESP减减2 2push eaxpush dword ptr ebx进栈操作进栈操作2. 2. 出栈指令出栈指令POPPOPpop destpop dest dest destSS:ESP SS:ESP ESP ESPESPESP4
23、 4(2 2) 先将栈顶数据传送到目的操作数(通用寄存先将栈顶数据传送到目的操作数(通用寄存器、存储单元或段寄存器)器、存储单元或段寄存器)后后ESPESP增加作为当前栈顶增加作为当前栈顶以字或双字为单位操作以字或双字为单位操作出栈双字量数据时,出栈双字量数据时,ESPESP加加4 4出栈字量数据时,出栈字量数据时,ESPESP加加2 2pop eaxpop dword ptr ebx出栈操作出栈操作例例3-83-8堆栈操作程序堆栈操作程序; ; 数据段数据段tenten= 10= 10dvardvardword 67762000h,12345678hdword 67762000h,12345
24、678h; ; 代码段代码段mov eax,dvar+4mov eax,dvar+4; EAX; EAX12345678H12345678Hpush eaxpush eax; ; 将将EAXEAX内容压入堆栈内容压入堆栈push dword ptr tenpush dword ptr ten; ; 将立即数以双字量压入堆栈将立即数以双字量压入堆栈push dvarpush dvar; ; 变量变量DVARDVAR第一个数据入堆第一个数据入堆pop eaxpop eax; ; 栈顶数据弹出到栈顶数据弹出到EAXEAXpop dvar+4pop dvar+4; ; 栈顶数据弹出到栈顶数据弹出到DV
25、ARDVAR4 4mov ebx,dvar+4mov ebx,dvar+4; EBX; EBX000000AH000000AHpop ecxpop ecx; ; 栈顶数据弹出到栈顶数据弹出到ECXECXcall disprdcall disprd3. 3. 堆栈的应用堆栈的应用堆栈不可或缺,被堆栈不可或缺,被很多指令使用很多指令使用:堆栈操作指令堆栈操作指令子程序调用子程序调用CALLCALL和返回和返回RETRET,中断调用,中断调用INTINT和返回和返回IRETIRET等等内部异常、外部中断等也利用堆栈内部异常、外部中断等也利用堆栈堆栈可用来堆栈可用来临时存放数据临时存放数据,以便随时恢
26、复它们,以便随时恢复它们常利用堆栈基址指针常利用堆栈基址指针EBPEBP,随机读写堆栈数据,随机读写堆栈数据mov ebp,espmov ebp,esp; EBP; EBPESPESPmov eax,ebp+8mov eax,ebp+8; EAXSS:EBP+8; EAXSS:EBP+8mov ebp,eaxmov ebp,eax; SS:EBPEAX; SS:EBPEAX利用堆栈实现主、子程序间利用堆栈实现主、子程序间传递参数传递参数堆栈还常用于子程序的堆栈还常用于子程序的寄存器保护寄存器保护和恢复和恢复注意入栈和出栈的数据要注意入栈和出栈的数据要成对成对,要保持堆栈平衡,要保持堆栈平衡3.
27、4.3 3.4.3 其他传送指令其他传送指令指令系统中还有一些针对指令系统中还有一些针对特定需要设计的专特定需要设计的专用传送指令用传送指令标志标志传送指令传送指令地址传送指令地址传送指令PUSHAD POPAD PUSHFD POPFD PUSHAD POPAD PUSHFD POPFD CLC CLC STC CMC STC CMC LEA LEA LDS LDS LES LES 1. 1. 标志传送指令标志传送指令直接操作标志寄存器直接操作标志寄存器标志位操作指令:直接改变标志位操作指令:直接改变CFCF、DFDF、IFIF标志标志指令指令功能功能CLC复位进位标志:复位进位标志:CF0
28、STC置位进位标志:置位进位标志:CF1CMC 求反进位标志:原为求反进位标志:原为0变为变为1,原为,原为1变为变为0CLD复位方向标志:复位方向标志:DF0,串操作后地址增大,串操作后地址增大STD置位方向标志:置位方向标志:DF1,串操作后地址减小,串操作后地址减小CLI复位中断标志:复位中断标志:IF0,禁止可屏蔽中断,禁止可屏蔽中断STI置位中断标志:置位中断标志:IF1,允许可屏蔽中断,允许可屏蔽中断2. 2. 地址传送指令地址传送指令地址传送指令获取存储器操作数的地址地址传送指令获取存储器操作数的地址LEA r16/r32,memLEA r16/r32,mem;r16/r32me
29、m;r16/r32mem的有效地址的有效地址EAEA(不需类型一致)(不需类型一致)LEALEA指令类似的地址操作符指令类似的地址操作符OFFSETOFFSET的作用的作用LEALEA指令在指令执行时计算出偏移地址指令在指令执行时计算出偏移地址OFFSETOFFSET操作符在汇编阶段取得变量的偏移地址操作符在汇编阶段取得变量的偏移地址OFFSETOFFSET无需在执行时计算、指令执行速度更快无需在执行时计算、指令执行速度更快LEALEA指令能获取汇编阶段无法确定的偏移地址指令能获取汇编阶段无法确定的偏移地址lea esi, varmov edi, offset var例例3-103-10地址传
30、送程序地址传送程序; ; 数据段数据段dvardvardword 41424344hdword 41424344h; ; 代码段代码段mov eax,dvarmov eax,dvar; EAX; EAX41424344H41424344Hlealea esi,dvar esi,dvar; ESI; ESI指向指向DVARDVARmov ebx,esimov ebx,esi; EBX; EBX41424344H41424344Hmov edi,offset dvarmov edi,offset dvar ; EDI; EDI指向指向DVARDVARmov ecx,edimov ecx,edi ;
31、 ECX; ECX41424344H41424344Hlea edx,esi+edilea edx,esi+edi* *4+100h4+100h ; EDX; EDXESIESIEDIEDI4 4100H100Hcall disprdcall disprd3.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类指令位操作类指令本本 章章 内内 容容3.5 3.5 算术运算类指令算术运算类指令算术运算算术运算算术运算对算术运算对数据进行加减乘除数据进行加减乘除是基本是基本的数据
32、处理方法的数据处理方法加减运算有加减运算有“和和”或或“差差”的结果外,还有进的结果外,还有进借位、溢出等状态标志,也是结果的一部分借位、溢出等状态标志,也是结果的一部分注意算术运算类指令注意算术运算类指令对标志的影响对标志的影响掌握:掌握:加法和减法指令加法和减法指令熟悉:熟悉:乘法和除法指令乘法和除法指令理解:理解:零位扩展和符号扩展零位扩展和符号扩展3.5.1 3.5.1 状态标志状态标志最基本的标志,有最基本的标志,有6 6个个用来记录指令执行结果的辅助信息用来记录指令执行结果的辅助信息加减运算和逻辑运算指令是主要设置它们加减运算和逻辑运算指令是主要设置它们其他有些指令的执行也会相应地
33、设置它们其他有些指令的执行也会相应地设置它们处理器主要使用其中处理器主要使用其中5 5个构成各种条件,分个构成各种条件,分支指令判断这些条件实现程序分支支指令判断这些条件实现程序分支 OF11DF10IF9TF8SF7ZF605AF403PF211CF0进位标志进位标志CFCF(Carry FlagCarry Flag)当加减运算结果的最高有效位当加减运算结果的最高有效位有进位有进位(加法)(加法)或或借位借位(减法)时,进位标志置(减法)时,进位标志置1 1,即,即CFCF1 1;否则否则CFCF0 0针对针对无符号整数无符号整数,判断加减结果是否超出表,判断加减结果是否超出表达范围达范围N
34、 N个二进制位表达无符号整数的范围:个二进制位表达无符号整数的范围:0 02 2N N-1-18 8位:位:0 02552551616位:位:0 065535655353232位:位:0 02 232321 1进位标志进位标志CFCF:举例:举例8 8位二进制数相加:位二进制数相加:001110100011101001111100011111001011011010110110十六进制表达:十六进制表达:3A3A7C7CB6B6转换成十进制数:转换成十进制数:5858124124182182没有产生进位:没有产生进位:CFCF0 08 8位二进制数相加:位二进制数相加:101010101010
35、10100111110001111100 1 10010011000100110十六进制表达:十六进制表达:AAAA7C7C 1 12626转换成十进制数:转换成十进制数:1701701241242942942562563838产生进位:产生进位:CFCF1 10182255进位进位1表达表达256溢出标志溢出标志OFOF(Overflow FlagOverflow Flag)有符号数有符号数加减结果加减结果有溢出有溢出,则,则OFOF1 1;否则;否则OFOF0 0处理器设计的溢出标志用于表达处理器设计的溢出标志用于表达有符号整数有符号整数进行加减法运算的结果是否超出范围进行加减法运算的结果
36、是否超出范围N N个二进制位表达有符号整数的范围:个二进制位表达有符号整数的范围:2 2N N1 12 2N N1 1-1-18 8位:位:1281281271271616位:位:327683276832767327673232位:位:2 231312 231311 1溢出标志溢出标志OFOF:举例:举例8 8位二进制数相加:位二进制数相加:001110100011101001111100011111001011011010110110十六进制表达:十六进制表达:3A3A7C7CB6B6转换成十进制数:转换成十进制数:5858124124182182超出范围:超出范围:OFOF1 18 8位二
37、进制数相加:位二进制数相加:10101010101010100111110001111100 1 10010011000100110十六进制表达:十六进制表达:AAAA7C7C 1 12626转换成十进制数:转换成十进制数:-86-861241243838没有超出范围:没有超出范围:OFOF0 0182127补码补码AAH表达表达- -86进位和溢出的区别进位和溢出的区别进位标志反映进位标志反映无符号整数无符号整数运算结果是否超出范围运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确有进位,加上进位或借位后运算结果仍然正确溢出标志反映溢出标志反映有符号整数有符号整数运算结果是否超出范
38、围运算结果是否超出范围有溢出,运算结果已经不正确有溢出,运算结果已经不正确处理器按照无符号整数求得结果处理器按照无符号整数求得结果设置进位标志设置进位标志CFCF设置溢出标志设置溢出标志OFOF程序员决定程序员决定操作数是无符号数,关心进位操作数是无符号数,关心进位操作数是有符号数,注意溢出操作数是有符号数,注意溢出零标志零标志ZFZF(Zero FlagZero Flag)运算运算结果为结果为0 0,则,则ZFZF1 1,否则,否则ZFZF0 0结果是结果是0,ZF标志不是标志不是0 !举例8 8位二进制数相加:位二进制数相加:00111010001110100111110001111100
39、1011011010110110结果不是结果不是0 0,ZFZF0 08 8位二进制数相加:位二进制数相加:10000100100001000111110001111100 1 10000000000000000结果是结果是0 0,ZFZF1 1结果结果进位进位符号标志符号标志SFSF(Sign FlagSign Flag)运算运算结果最高位为结果最高位为1 1,则,则SFSF1 1;否则;否则SFSF0 0举例8 8位二进制数相加:位二进制数相加:001110100011101001111100011111001 101101100110110最高位最高位1 1:SFSF1 18 8位二进制
40、数相加:位二进制数相加:10000100100001000111110001111100 1 1 0 000000000000000最高位最高位0 0:SFSF0 0结果结果进位进位最高位符号位最高位符号位SF奇偶标志奇偶标志PFPF(Parity FlagParity Flag)当运算结果最低字节中当运算结果最低字节中“1”1”的个数为零或的个数为零或偶数偶数时,时,PFPF1 1;否则;否则PFPF0 0举例8 8位二进制数相加:位二进制数相加:001110100011101001111100011111001011011010110110“1”“1”的个数为的个数为5 5个:个:PFPF
41、0 08 8位二进制数相加:位二进制数相加:10000100100001000111110001111100 1 10000000000000000“1”“1”的个数为的个数为0 0个:个:PFPF1 1结果结果进位进位仅最低仅最低8位位“1”的个的个数数3.5.2 3.5.2 加法指令加法指令加法指令加法指令 ADDADD带进位加法指令带进位加法指令 ADCADC增量指令增量指令 INCINC除除INCINC不影响进位标志不影响进位标志CFCF外外其他指令按定义影响全部状态标志位其他指令按定义影响全部状态标志位按照运算结果相应设置各个状态标志为按照运算结果相应设置各个状态标志为0 0或为或为
42、1 1数据传送类指令数据传送类指令不影响(不改变)不影响(不改变)状态标志状态标志加法和减法指令加法和减法指令根据结果按定义改变根据结果按定义改变状态标志状态标志1. 1. 加法指令加法指令ADDADD目的操作数加上源操作数,和送到目的操作数目的操作数加上源操作数,和送到目的操作数ADD dest,srcADD dest,src ; ;加法:加法:destdestdestdestsrcsrc按照按照定义影响定义影响6 6个状态标志位个状态标志位mov eax,0aaff7348hmov eax,0aaff7348h;EAX;EAXAAFF7348HAAFF7348Hadd al,27hadd
43、al,27h;EAX;EAXAAFF736FHAAFF736FH,OFOF0 0,SFSF0 0,ZFZF0 0,PFPF1 1,CFCF0 0add ax,3fffhadd ax,3fffh;EAX;EAXAAFFB36EHAAFFB36EH,OFOF1 1,SFSF1 1,ZFZF0 0,PFPF0 0,CFCF0 0add eax,88000000hadd eax,88000000h;EAX;EAX32FFB36EH32FFB36EH,OFOF1 1,SFSF0 0,ZFZF0 0,PFPF0 0,CFCF1 12. 2. 带进位加法指令带进位加法指令ADCADC两个操作数相加,再加两个
44、操作数相加,再加CFCF,结果送目的操作数,结果送目的操作数按照定义影响按照定义影响6 6个状态标志位个状态标志位ADC dest,srcADC dest,src;destdest;destdestsrcsrcCFCF用于与用于与ADDADD指令相结合实现多精度数的加法指令相结合实现多精度数的加法先将两个操作数的低先将两个操作数的低3232位相加(用位相加(用ADDADD指令)指令)再加高位部分、并将进位加到高位(用再加高位部分、并将进位加到高位(用ADCADC指令)指令)例例3-113-116464位数据相加程序位数据相加程序mov eax,dword ptr qvar1mov eax,dw
45、ord ptr qvar1; ;取低取低3232位位addadd eax,dword ptr qvar2 eax,dword ptr qvar2; ;加低加低3232位,设置位,设置CFCFmov edx,dword ptr qvar1+4mov edx,dword ptr qvar1+4 ; ;取高取高3232位位adcadc edx,dword ptr qvar2+4 edx,dword ptr qvar2+4 ; ;加高加高3232位,同时加位,同时加CFCF3. 3. 增量指令增量指令INCINC增量指令增量指令INCINC只有只有一个一个操作数操作数,对对操作数加操作数加1 1(增量
46、)再将结果返回(增量)再将结果返回原处,操作数是寄存器原处,操作数是寄存器或存储单元或存储单元INC reg/memINC reg/mem; ;加加1 1:reg/memreg/memreg/memreg/mem1 1用于计数器和地址指针的调整用于计数器和地址指针的调整不影响进位不影响进位CFCF标志标志,影响其他状态标志位,影响其他状态标志位例如例如inc inc ecxecx3.5.3 3.5.3 减法指令减法指令减法指令减法指令 SUBSUB带借位减法指令带借位减法指令 SBBSBB减量指令减量指令 DECDEC求补指令求补指令 NEGNEG比较指令比较指令 CMPCMP除除DECDEC
47、不影响不影响CFCF标志外标志外其他按定义影响全部状态标志位其他按定义影响全部状态标志位 数据传送类指令数据传送类指令不影响(不改变)不影响(不改变)状态标志状态标志加法和减法指令加法和减法指令根据结果按定义改变根据结果按定义改变状态标志状态标志例例3-123-12大小写字母转换程序大小写字母转换程序; ; 数据段数据段msgmsgbyte welcome,0byte welcome,0; ; 代码段代码段mov ecx,(lengthof msg)-1mov ecx,(lengthof msg)-1; ECX; ECX等于字符串长度等于字符串长度mov ebx,0mov ebx,0; EBX
48、; EBX0 0指向头一个字母指向头一个字母again:again:sub msgebx,a-Asub msgebx,a-A; ; 小写字母减小写字母减20H20H转换为大写转换为大写inc ebxinc ebx; ; 指向下一个字母指向下一个字母loop againloop again; ; 循环循环mov eax,offset msgmov eax,offset msgcall dispmsgcall dispmsg; ; 显示显示大写小写大写小写20H小写大写小写大写20H求补指令求补指令NEGNEG比较指令比较指令CMPCMP乘法除法等指令乘法除法等指令除法指令除法指令BCDBCD码码
49、压缩压缩BCDBCD码码0 00001 00012 00103 00114 01005 01016 01107 01118 10009 10013.2 3.2 常量表达常量表达3.3 3.3 变量应用变量应用3.4 3.4 数据传送类指令数据传送类指令3.5 3.5 算术运算类指令算术运算类指令3.6 3.6 位操作类指令位操作类指令本本 章章 内内 容容3.6 3.6 位操作类指令位操作类指令计算机中最基本的数据单位是二进制位计算机中最基本的数据单位是二进制位针对二进制位进行操作、实现位控制的指令针对二进制位进行操作、实现位控制的指令逻辑运算指令逻辑运算指令移位指令移位指令进行一位或若干位处
50、理,采用位操作类指令进行一位或若干位处理,采用位操作类指令3.6.1 3.6.1 逻辑运算指令逻辑运算指令逻辑与指令逻辑与指令 ANDAND逻辑或指令逻辑或指令 OROR逻辑非指令逻辑非指令 NOTNOT逻辑异或指令逻辑异或指令 XORXOR测试指令测试指令 TESTTEST除除NOTNOT指令不影响标志外指令不影响标志外其他逻辑指令其他逻辑指令使使OFOFCFCF0 0根据结果按定义影响根据结果按定义影响ZFZF、SFSF和和PFPF1. 1. 逻辑与指令逻辑与指令ANDAND逻辑与逻辑与( (逻辑乘逻辑乘) )运算规则:运算规则:两位都是逻辑两位都是逻辑1 1,则结果是,则结果是1 1;否
51、则,结果是;否则,结果是0 0逻辑与指令逻辑与指令ANDAND:按位进行逻辑与,结果返回目的操作数按位进行逻辑与,结果返回目的操作数AND dest,srcAND dest,src ; ;逻辑与:逻辑与:destdest destdest src src设置设置CFCFOFOF0 0影响影响SFSF,ZFZF和和PFPFT TB BA ATAB0 01 10 01 11 11 10 00 01 10 00 00 0TAB真值表真值表与门电路与门电路逻辑表达式逻辑表达式010001010011000100000001 2. 2. 逻辑或指令逻辑或指令OROR逻辑或逻辑或( (逻辑加逻辑加) )运
52、算规则:运算规则:两位都是逻辑两位都是逻辑0 0,则结果是,则结果是0 0;否则,结果是;否则,结果是1 1逻辑或指令逻辑或指令OROR:按位进行逻辑或,结果返回目的操作数按位进行逻辑或,结果返回目的操作数OR dest,srcOR dest,src; ;逻辑或:逻辑或:destdest destdest srcsrc设置设置CFCFOFOF0 0影响影响SFSF,ZFZF和和PFPFT TB BA ATAB1 11 10 01 11 11 11 10 01 10 00 00 0TA+B真值表真值表或门电路或门电路逻辑表达式逻辑表达式010001010011000101110101 3. 3.
53、 逻辑非指令逻辑非指令NOTNOT逻辑非逻辑非( (逻辑反逻辑反) )运算规则:运算规则:原来为原来为0 0的位变成的位变成1 1,原来为,原来为1 1的位变成的位变成0 0逻辑非指令逻辑非指令NOTNOT:按位进行逻辑非,结果返回操作数按位进行逻辑非,结果返回操作数NOT reg/memNOT reg/mem; ;逻辑非:逻辑非:reg/memreg/memreg/memreg/mem不影响状态标志位不影响状态标志位TA真值表真值表非门电路非门电路逻辑表达式逻辑表达式0 01 11 10 0T TA ATA01000101101110104. 4. 逻辑异或指令逻辑异或指令XORXOR逻辑异
54、或逻辑异或( (逻辑半加逻辑半加) )运算规则:运算规则:两位不同两位不同( (相异相异) ),则结果是,则结果是1 1;否则,结果是;否则,结果是0 0逻辑异或指令逻辑异或指令XORXOR:按位进行逻辑异或,结果返回目的操作数按位进行逻辑异或,结果返回目的操作数XOR dest,srcXOR dest,src ; ;逻辑或:逻辑或:destdest destdest srcsrc设置设置CFCFOFOF0 0影响影响SFSF,ZFZF和和PFPFTAB010001010011000101110100 1 11 10 00 01 11 11 10 01 10 00 00 0T TB BA ATA B真值表真值表异或门电路异或门电路逻辑表达式逻辑表达式逻辑运算的屏蔽作用逻辑运算的屏蔽作用ANDAND指令复位指令复位某些位某些位( (同同0 0与与) ),不影响其他,不影响其他( (同同1 1与与) )OROR指令置位指令置位某些位某些位( (同同1 1或或) ),不影响其他,不影响其他( (同同0 0或或) )XORXOR求反求反
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新教材)2026年沪科版八年级下册数学 18.1 勾股定理 课件
- 崇义中学高一下学期第一次月考数学试题
- DB5107-T 137.1-2023 国家食品安全示范城市细胞工程建设规范 第1部分:食品生产行业典范企业
- 2025年办公楼宇屋面防水协议
- 切割设备维护保养规范
- 基因编辑抗性机制
- 2025年AI心理咨询的情感分析工具开发 共情对话技术支撑
- 2025年容错纠错机制建设研究
- 2025年高考化学有机推断题真题深度剖析
- 专题03智慧养老-冲刺2025年高考地理热点梳理情境对点练
- 2025年党员党的基本理论应知应会知识100题及答案
- 《汽车发动机构造(双语课程)》习题(按项目列出)
- 婚庆公司发布会策划方案
- 松陵一中分班试卷及答案
- 《小米广告宣传册》课件
- 劳务派遣公司工作方案
- 物理趣味题目试题及答案
- 华师大版数学七年级上册《4.3 立体图形的表面展开图》听评课记录
- 2023-2024学年四川省成都市高二上学期期末调研考试地理试题(解析版)
- 陕西单招数学试题及答案
- 应收账款债权转让协议
评论
0/150
提交评论