资源预览内容
第1页 / 共140页
第2页 / 共140页
第3页 / 共140页
第4页 / 共140页
第5页 / 共140页
第6页 / 共140页
第7页 / 共140页
第8页 / 共140页
第9页 / 共140页
第10页 / 共140页
亲,该文档总共140页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
微机原理与接口技术第第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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术33.1 3.1 数据表示数据表示数据(数据(Data):):计算机处理的对象计算机处理的对象对应指令操作的对象:对应指令操作的对象:操作数操作数(Oprand)计算机中的数据要用二进制的计算机中的数据要用二进制的0和和1组合组合表示表示IA-32整数指令支持的基本数据类型整数指令支持的基本数据类型8、16、32、64位无符号整数位无符号整数8、16、32、64位有符号整数位有符号整数ASCII字符、字符串和字符、字符串和BCD码码3.1 数据表示微机原理与接口技术41103110211011100110-1110-2权权权权N N进制数进制数a am-1m-1a am-2m-2a a1 1a a0 0 . .b b-1-1b b-2-2b b-(n-1)-(n-1)b b-n-n3.1.1 3.1.1 进制进制例:例:十进制数十进制数1111.111111.11am-1Nm-1am-2Nm-2+ +a0+ +b-1N-1b-2N-2 + +b-(n-1)N-(n-1)b-nN-n基数基数3.1 数据表示微机原理与接口技术51. 二进制二进制逢二进一,由逢二进一,由0和和1两个数码组成,基数为两个数码组成,基数为2,各,各个位的权以个位的权以2n表示表示二进制数的算术运算:二进制数的算术运算:逢逢2进进1、借、借1当当2a an na an-1n-1a a1 1a a0 0 . .b b1 1b b2 2b bm man2nan-12n-1+ +a020+ +b12-1b22-2 + +bm2-m3.1 数据表示微机原理与接口技术6二进制数的算术运算二进制数的算术运算3.1 数据表示微机原理与接口技术72. 逻辑运算逻辑运算基本逻辑运算基本逻辑运算逻辑逻辑与与AND: 1101 0011 = 0001逻辑逻辑或或OR: 1101 0011 = 1111逻辑逻辑非非NOT: 1101 = 0010逻辑逻辑异或异或XOR:1101 0011 = 1110 3.1 数据表示微机原理与接口技术83. 十六进制十六进制逢十六进一,由逢十六进一,由0F16个数码组成,基数为个数码组成,基数为16,各个位的权以,各个位的权以16k表示表示十六进制数的算术运算:十六进制数的算术运算:逢逢16进进1、借、借1当当16a an na an-1n-1a a1 1a a0 0 . .b b1 1b b2 2b bm man16nan-116n-1+ +a0160+ +b116-1 b216-2 + +bm16-m3.1 数据表示微机原理与接口技术9十六进制数的加法运算十六进制数的加法运算 2 3 D 9+ 9 4 B E 9+14=23=16(carry)+713+11+1(carry)=25=16(carry)+93+4+1(carry)=82+9=11=BB 8 9 73.1 数据表示微机原理与接口技术10十六进制数的减法运算十六进制数的减法运算 A 5 9 F- 6 2 B 815-8=716(borrow)+9-11=14=E5-2-1(borrow)=210-6=44 2 E 73.1 数据表示微机原理与接口技术114. 数制之间的转换数制之间的转换3.1 数据表示微机原理与接口技术121)N进制转换成十进制数进制转换成十进制数-按权展开式按权展开式 = 123 +121+120+121+123= 11.625 = 10161+7160+11161=1011.101B例:例:A7.BH167.68753.1 数据表示微机原理与接口技术13整数部分:整数部分:除除N N取余,直至商为取余,直至商为0 0小数部分:小数部分:乘乘N N取整,直至小数部分为取整,直至小数部分为0 0最先取到的数码离小数点最近!最先取到的数码离小数点最近!2)十进制转换成)十进制转换成N进制数进制数3.1 数据表示微机原理与接口技术14例例:126.8125 ( )B整数部分整数部分126126除除2 2取取余余011111212663231215272231取余取余小数部分小数部分0.81250.8125乘乘2 2取取整整1取整取整0.81252=1.6250.6252=1.250.252=0.50.52=1.01012013.1 数据表示11011111110.微机原理与接口技术15练练 习习 256 256(?)B(?)B 13/16 13/16(?)B(?)B 108.375 108.375(?)H(?)H 1000000000.11016C.63.1 数据表示微机原理与接口技术163)二进制与十六进制的转换)二进制与十六进制的转换二进制二进制十六进制十六进制- “四位并一位四位并一位”以小数点为基准,两侧每以小数点为基准,两侧每4 4位二进制数位二进制数 对应对应1 1位十六进制数,不足位十六进制数,不足4 4位时位时外侧补外侧补0 0例:例:11011.101001B = (0001 1011.1010 0100)B= (1B.A4)H3.1 数据表示微机原理与接口技术17例:例:3A.EH=(0011 1010.1110)B十六进制十六进制 二进制二进制-“一位拆成四位一位拆成四位”=(111010.111)B3.1 数据表示微机原理与接口技术18作作 业业 27/32(?)H=(?)B 65535(?)H=(?)B 11011.1B+26.8H(?)D (101)X=(41)H, X=?3.1 数据表示微机原理与接口技术193.1.23.1.2 数值的编码数值的编码3.1 数据表示1. 定点整数定点整数 小数点的位置默认并固定的机器数称为小数点的位置默认并固定的机器数称为定点数定点数定点整数:小数点的位置固定在机器数定点整数:小数点的位置固定在机器数最右侧最右侧定点小数:小数点的位置固定在机器数定点小数:小数点的位置固定在机器数最左侧最左侧微机原理与接口技术20 无符号定点整数无符号定点整数只表示正整数和只表示正整数和0,不,不 含负数含负数N位无符号整数表达范围:位无符号整数表达范围:02N-1有符号定点整数有符号定点整数表示正整数、表示正整数、0和负整数和负整数最高位表示数的正负即符号位,与数值无关最高位表示数的正负即符号位,与数值无关符号位用符号位用0表示正数、表示正数、1表示负数表示负数例:例:16位无符号定点整数的表示范围:位无符号定点整数的表示范围:02161 32位有符号定点整数的表示范围:位有符号定点整数的表示范围:21613.1 数据表示微机原理与接口技术21有符号整数在计算机中默认采用有符号整数在计算机中默认采用补码补码表示表示最高位表示符号,最高位表示符号,0表示正数,表示正数,1表示负数表示负数正数补码直接表示数值大小,同无符号数正数补码直接表示数值大小,同无符号数负数补码是负数补码是将对应正数补码取反加将对应正数补码取反加1数值数值0只有只有“0”,“0”由由128替代替代2. 补码补码3.1 数据表示例:例:+105=( )补码补码01101001 -105=( )补码补码10010111 微机原理与接口技术22 求补运算求补运算负数真值负数真值“取反加取反加1”得机器数补码得机器数补码负数补码负数补码“取反加取反加1”得到负数真值得到负数真值 例:例:补码补码 11100000B 真值真值= (11100000求反求反1) =00100000B =32负数求补运算,等效于负数求补运算,等效于“用带借位的用带借位的0作减法作减法” 例:例:真值真值-8, 补码补码=100H-8H=F8H 补码补码F8H, 真值真值=-(100H-F8H)=-8H=-83.1 数据表示23引入补码可以引入补码可以将减法变成加法将减法变成加法补码相加之和仍为补码补码相加之和仍为补码利用无符号数加法结合补码表达,实现利用无符号数加法结合补码表达,实现无符号数加法无符号数加法无符号数减法无符号数减法有符号数加法有符号数加法有符号数减法有符号数减法 3. 补码运算补码运算3.1 数据表示X补码Y补码XY补码X补码Y补码X补码Y补码XY补码微机原理与接口技术24例例1 1:67H-10H=57H67H-10H=57H例例2 2:-67H-10H=-77H-67H-10H=-77H= =1 189H=(-77H)89H=(-77H)补补进位自然丢失进位自然丢失 67H+(-10H) 67H+(-10H)补补=67H+F0H=67H+F0H=1 157H57H进位自然丢失进位自然丢失 (-67H) (-67H)补补+(-10H)+(-10H)补补=99H+F0H=99H+F0H3.1 数据表示微机原理与接口技术254. 原码和反码原码和反码3.1 数据表示正数的原码、反码和无符号数一样正数的原码、反码和无符号数一样求负数的原码、反码和补码求负数的原码、反码和补码首先计算其对应正数的编码首先计算其对应正数的编码然后取反符号位(设置为然后取反符号位(设置为1)成为原码)成为原码再取反其他位得到反码再取反其他位得到反码最后加最后加1就是补码就是补码例:例:+32=(00100000B)原码原码=(00100000)反码反码=(00100000)补码补码 -32=(10100000B)原码原码=(11011111B)反码反码=(11100000)补码补码微机原理与接口技术26作作 业业一个一个8位的二进制数若采用补位的二进制数若采用补码表示,由码表示,由3个个“1”和和5个个“0”组成,则最小值为十进组成,则最小值为十进制数制数(?) X原原Y反反Z补补90H X=?Y=?Z=? X补补1100111B, X原原? -X补补?2X补补=?3.1 数据表示微机原理与接口技术273.1.3 3.1.3 字符的编码字符的编码在计算机中,各种字符需要用若干位的二进制在计算机中,各种字符需要用若干位的二进制码的组合表示,即字符的二进制编码码的组合表示,即字符的二进制编码由于由于字节字节为计算机的基本存储单位,所以常以为计算机的基本存储单位,所以常以8个二进制位为单位表达字符个二进制位为单位表达字符3.1 数据表示微机原理与接口技术281. BCD二进制编码的十进制数二进制编码的十进制数用用4位二进制编码位二进制编码00001001表示表示09压缩压缩BCD码:一个字节表达两位码:一个字节表达两位BCD码码非压缩非压缩BCD码:一个字节表达一位码:一个字节表达一位BCD码(低码(低4位位表达数值,高表达数值,高4位常设置为位常设置为0)BCD码便于输入输出,表达数值准确码便于输入输出,表达数值准确3.1 数据表示例:例:(100010010001.01000101)BCD = 34=( )BCD =( ) BCD 34H=( )BCD =( ) BCD A7H=( )BCD =( ) BCD0101001052H000101100111167H 0011010034H891.45微机原理与接口技术292. ASCII(美国标准信息交换码)(美国标准信息交换码)标准标准ASCII码用码用7位二进制编码,有位二进制编码,有128个个不可显示的控制字符:前不可显示的控制字符:前32个和最后一个个和最后一个回车回车CR:0DH 换行换行LF:0AH 响铃响铃BEL:07H可显示和打印的字符:可显示和打印的字符:20H后的后的94个编码个编码数码数码09:30H39H大写字母大写字母AZ:41H5AH小写字母小写字母az:61H7AH空格:空格:20H扩展扩展ASCII码:最高码:最高D7位为位为1,表达制表符号,表达制表符号3.1 数据表示微机原理与接口技术303. Unicode(统一码)(统一码)8位位ASCII码表达英文字符码表达英文字符16位国标码表达汉字字符位国标码表达汉字字符汉字机内码:国标码在计算机中使用的编码汉字机内码:国标码在计算机中使用的编码国际信息交换码国际信息交换码Unicode16位编码位编码对世界上所有语言的大多数字符进行编码对世界上所有语言的大多数字符进行编码提供扩展能力提供扩展能力Unicode兼容兼容ASCIIUnicode给每个字符提供了一个唯一的数字,不论是什么给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论是什么语言平台,不论是什么程序,不论是什么语言3.1 数据表示微机原理与接口技术31作作 业业3.1 简答题(简答题(1)3.2 判断题(判断题(13)3.3 填空题(填空题(2、3)3.43.8 3.14主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术331.常数常数十、十六和二进制形式表达的数值十、十六和二进制形式表达的数值以后缀字母区分,十进制数可以不加以后缀字母区分,十进制数可以不加以字母以字母AF开头的十六进制常数,要加前导开头的十六进制常数,要加前导02.字符和字符串字符和字符串英文缩略号括起来的单个字符或多个字符英文缩略号括起来的单个字符或多个字符数值是每个字符对应的数值是每个字符对应的ASCII码值码值3.符号常量符号常量使用标识符表达一个数值使用标识符表达一个数值符号定义伪指令:等价符号定义伪指令:等价EQU,等号,等号4.数值表达式数值表达式用运算符连接各种常量构成的算式用运算符连接各种常量构成的算式算术运算符:(加)算术运算符:(加) (减)(减) *(乘)(乘) /(除)(除)常常量量具具有有确确定定数数值值3.2 常量表达微机原理与接口技术34例例3.1 数据表达程序数据表达程序1 .data0000000064 64 64 64 64 const1 byte 100,100d,01100100b,64h, d0000000501 7F 80 80 FF FF const2 byte 1,+127,128,-128,255,-10000000B69 97 20 E0 32 CE const3 byte 105,-105,32,-32,32h,-32h0000001130 31 32 33 34 35 36 37 38 39 61 6263 78 79 7A 41 42 43 58 59 5A const4 byte 0123456789,abcxyz,ABCXYZ3.2 常量表达微机原理与接口技术35例例3.1 数据表达程序数据表达程序2000000270D 0A 0 crlf byte 0dh,0ah,0= 0000000Aminint = 10 = 000000FFmaxintequ 0ffh0000002A0A 0F FA F5 const5 byte minint,minint+5 byte maxint-5,maxint-minint0000002E10 56 15 EB const6 byte 4*4,34h+34,67h-52h,52h-67h3.2 常量表达主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术37变量(变量(Variable)程序运行中随之发生变化的结果程序运行中随之发生变化的结果保存在可读可写的主存空间保存在可读可写的主存空间实质是实质是主存单元的数据主存单元的数据,因而可以改变,因而可以改变变量需要变量需要事先定义事先定义才能使用才能使用变量变量具有属性具有属性方便应用方便应用 变量表达主存数据,即存储器操作数变量表达主存数据,即存储器操作数3.3 变量应用微机原理与接口技术383.3.1 3.3.1 变量定义变量定义申请存储空间,还可以进行存储单元初始化申请存储空间,还可以进行存储单元初始化变量名变量名 变量定义伪指令变量定义伪指令 初值表初值表变量名变量名是用户标识符,表示首元素逻辑地址是用户标识符,表示首元素逻辑地址变量定义伪指令变量定义伪指令BYTE、WORD、DWORD、FWORD、QWORD、TBYTE初值表初值表是用逗号分隔的参数是用逗号分隔的参数各种形式的各种形式的常量常量“?”表示初值不确定,即未赋初值表示初值不确定,即未赋初值复制操作符复制操作符DUP3.3 变量应用1. 变量定义伪指令变量定义伪指令微机原理与接口技术393.3 变量应用2. 字节量数据字节量数据BYTE定义定义8位、字节量变量数据位、字节量变量数据可以表达可以表达无符号整数无符号整数0255补码表示的有符号整数:补码表示的有符号整数:-128+127一个字符(一个字符(ASCII码值)码值)压缩压缩BCD码:码:099非压缩非压缩BCD码:码:09字符串定义使用字节变量定义字符串定义使用字节变量定义BYTE3.3 变量应用微机原理与接口技术40例例3-2 字节字节变量程序变量程序3.3 变量应用41=0000000A minint= 100000000000 80 FF 80 00 7F bvar1byte 0,128,255,-128,0,+1270000000601 FF 26 DA 38 C8 bvar2byte 1,-1,38,-38,38h,-38h0000000C00 bvar3byte ?0000000D00000005 24 bvar4byte 5 dup ($)000000120000000A 00 0000000A 0A 00 bvar5byte minint dup(0),minint dup(minint,?)0000003000000002 02 03 00000002 04byte 2 dup(2,3,2 dup(4)3. 字量数据字量数据WORD定义定义16位、字量变量数据位、字量变量数据可以表达可以表达16位无符号和有符号整数位无符号和有符号整数16位段选择器,位段选择器,16位偏移地址位偏移地址16位数据包含高低两个字节,占用位数据包含高低两个字节,占用2个连续的字节个连续的字节存储单元存储单元小端方式(小端方式(Little Endian)低字节数据存放在低地址存储单元低字节数据存放在低地址存储单元高字节数据存放在高地址存储单元高字节数据存放在高地址存储单元3.3 变量应用微机原理与接口技术42例例3-3字字变量程序变量程序= 0000000Aminint= 10000000000000 8000 FFFF 8000 0000 7FFF wvar1word 0,32768,65535,-32768,0,+327670000000C0001 FFFF 0026 FFDA 0038 FFC8 wvar2word 1,-1,38,-38,38h,-38h000000180000 wvar3word ?0000001A2010 10200000001E00000005 000A 0000 wvar4word 2010h,1020hword 5 dup(minint,?)000000323139 3832 wvar6word 3139h,3832h0000003639 31 32 380000003A00 bvar6byte 39h,31h,32h,38hbyte 043微机原理与接口技术4. 双字量数据双字量数据DWORD定义定义32位、双字量变量数据位、双字量变量数据可以表达可以表达32位无符号和有符号整数位无符号和有符号整数32位偏移地址、线性地址或段基地址位偏移地址、线性地址或段基地址32位数据包含位数据包含4个字节,以个字节,以“高对高、低对低高对高、低对低”原则占用原则占用4个连续字节空间个连续字节空间3.3 变量应用微机原理与接口技术44小端存储方式小端存储方式3.3 变量应用微机原理与接口技术45例例3-4 双双字变量程序字变量程序1=0000000A minint= 100000000000000000 80000000 FFFFFFFF80000000 00000000 7FFFFFFF dvar1dword 0,80000000h,0ffffffffh,-80000000h,0,7fffffffh0000001800000001 FFFFFFFF 00000026FFFFFFDA 00000038 FFFFFFC8 dvar2dword 1,-1,38,-38,38h,-38h0000003000000000 dvar3dword ?0000003400002010 00001020dword 2010h,1020h3.3 变量应用微机原理与接口技术46例例3-4 双双字变量程序字变量程序20000003C0000000A 0000000A 00000000 dvar5dword minint dup(minint,?)0000008C38323139 dvar6dword 38323139h0000009039 31 32 38 bvar6byte 39h,31h,32h,38h0000009400byte 091289128运行结果运行结果3.3 变量应用微机原理与接口技术475. 变量定位变量定位变量定义的变量定义的存储空间按照存储空间按照书写的先后顺序一个接书写的先后顺序一个接着一个分配着一个分配“ORG 参数参数”控制存放的偏移地址控制存放的偏移地址 org 100h ;从偏移地址从偏移地址100H处安排处安排指令代码也由指令代码也由汇编程序按照汇编程序按照语句的书写顺序安排语句的书写顺序安排存储空间存储空间定位伪指令也可以用于控制代码的偏移地址定位伪指令也可以用于控制代码的偏移地址3.3 变量应用微机原理与接口技术483.3.2 3.3.2 变量属性变量属性变量定义变量定义分配存储空间分配存储空间赋初值赋初值创建变量名创建变量名变量名具有两类变量名具有两类属性属性地址地址属性属性:首个变量所在存储单元的逻辑地址,含首个变量所在存储单元的逻辑地址,含有段基地址和偏移地址有段基地址和偏移地址类型类型属性属性:变量定义的数据单位:变量定义的数据单位字节量字节量BYTE 字量字量WORD 双字量双字量DWORD 3字量字量FWORD 4字量字量QWORD 10字节量字节量TBYTE3.3 变量应用微机原理与接口技术49 地址操作符地址操作符地址操作符用于获取变量名的地址操作符用于获取变量名的地址属性地址属性 括起的表达式作为存储器地址指针括起的表达式作为存储器地址指针$ $返回当前偏移地址返回当前偏移地址OFFSET OFFSET 变量名变量名返回变量名所在段的偏移地址返回变量名所在段的偏移地址SEG SEG 变量名变量名返回段基地址(实地址存储模型)返回段基地址(实地址存储模型)3.3 变量应用微机原理与接口技术50例例3-5 变量变量地址属性程序地址属性程序13.3 变量应用51; 数据段数据段0000000012 34 bvarbyte 12h,34h org $+10 0000000C0001 0002 0003 0004 0005 00060007 0008 0009 000A arrayword 1,2,3,4,5,6,7,8,9,10000000205678 wvarword 5678h=00000016arr_size = $-array=0000000Barr_len = arr_size/2000000229ABCDEF0 dvardword 9abcdef0h例例3-5 变量变量地址属性程序地址属性程序2; 代码段代码段00000000A0 00000000 Rmov al,bvar000000058A 25 00000001 Rmov ah,bvar+10000000B66| 8B 1D00000022 Rmov bx,wvar200000012B9 0000000Bmov ecx,arr_len00000017BA 00000017 Rmov edx,$3.3 变量应用微机原理与接口技术52直接寻址直接寻址al=12hah=34hbx=def0hecx=0000000bhedx=00000017h例例3-5 变量变量地址属性程序地址属性程序30000001C BE 00000022 Rmov esi,offset dvar00000021 8B 3E mov edi,esi00000023 8B 2D 00000022 Rmov ebp,dvar00000029 E8 00000000 E call disprdEAX=00003412, EBX=7FFDDEF0, ECX=0000000B, EDX=00401017EAX=00003412, EBX=7FFDDEF0, ECX=0000000B, EDX=00401017ESI=00404022, EDI=9ABCDEF0, EBP=9ABCDEF0, ESP=0012FFC4ESI=00404022, EDI=9ABCDEF0, EBP=9ABCDEF0, ESP=0012FFC43.3 变量应用微机原理与接口技术53esi=00000022hedi=9abcdef0hebp=9abcdef0h 类型操作符类型操作符类型操作符使用变量名的类型属性类型操作符使用变量名的类型属性类型名类型名 PTR PTR 变量名变量名将变量名按照指定的类型使用将变量名按照指定的类型使用TYPE TYPE 变量名变量名返回占用字节空间的字量数值返回占用字节空间的字量数值LENGTHOF LENGTHOF 变量名变量名返回整个变量的数据项数返回整个变量的数据项数SIZEOFSIZEOF 变量名变量名返回整个变量占用的字节数返回整个变量占用的字节数3.3 变量应用微机原理与接口技术54例例3-6 变量变量类型属性程序类型属性程序1; 代码段代码段00000000A1 0000000C Rmov eax,dword ptr array ; 获得数据获得数据00000005BB 00000001mov ebx,type bvar; 获得字节类型值获得字节类型值0000000AB9 00000002mov ecx,type wvar; 获得字类型值获得字类型值0000000FBA 00000004mov edx,type dvar; 获得双字类型值获得双字类型值3.3 变量应用微机原理与接口技术55例例3-6 变量变量类型属性程序类型属性程序200000014BE 0000000Amov esi, lengthof array ; 获得数据个数获得数据个数00000019BF 00000014mov edi, sizeof array ; 获得字节长度获得字节长度0000001EBD 00000016mov ebp, arr_size; 获得字节长度获得字节长度00000023E8 00000000 Ecall disprd EAX=00020001, EBX=00000001, ECX=00000002, EDX=00000004EAX=00020001, EBX=00000001, ECX=00000002, EDX=00000004ESI=0000000A, EDI=00000014, EBP=00000016, ESP=0012FFC4ESI=0000000A, EDI=00000014, EBP=00000016, ESP=0012FFC43.3 变量应用微机原理与接口技术56微机原理与接口技术57作作 业业3.1 简答题(简答题(24)3.3 填空题(填空题(46)3.103.13微机原理与接口技术58 .data org 1000hbuf1 dword 7080h,9000h,0ab0hbuf2 word buf1count equ $-buf1buf3 byte 2 dup(?,10h,10,A)buf4 word buf3-buf2 .codemov eax, offset buf4mov ebx, buf1+2mov esi, lengthof buf2mov edi, sizeof buf3测测 验验要求画出内存分配情况,并说明每条硬指令的执行结果要求画出内存分配情况,并说明每条硬指令的执行结果主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术 60学习指令的注意事项学习指令的注意事项指令的功能:指令的功能:该指令能够实现何种操作该指令能够实现何种操作指令的寻址方式:指令的寻址方式:该指令中的操作数采用何该指令中的操作数采用何种寻址方式种寻址方式指令对标志的影响:指令对标志的影响:指令执行后是否影响标指令执行后是否影响标志位、如何影响志位、如何影响其他方面:其他方面:如指令执行时的约定设置、必须如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等预置的参数、隐含使用的寄存器等数据数据传送传送把数据从一个位置传送到另一个位置把数据从一个位置传送到另一个位置除除标志寄存器标志寄存器传送指令外,均传送指令外,均不影响标志不影响标志位位包括包括3类数据传送指令:类数据传送指令:3.4 数据传送类指令微机原理与接口技术61通用数据通用数据传送指令传送指令堆栈操作堆栈操作 指令指令其它传送指令其它传送指令地址传送指令地址传送指令标志传送指令标志传送指令换码指令换码指令3.4.1 3.4.1 通用传送指令通用传送指令3.4 数据传送类指令微机原理与接口技术62MOVXCHG微机原理与接口技术 631. 传送指令传送指令 MOV dest: reg/mem src: imm/reg/mem/seg 3.4 数据传送类指令 将源操作数内容传送到目的操作将源操作数内容传送到目的操作 指令格式:指令格式:mov dest , src微机原理与接口技术 64两个操作数的两个操作数的类型必须一致类型必须一致操作数必须有操作数必须有明确的类型明确的类型两个操作数两个操作数不能同时为存储器不能同时为存储器操作专用寄存器的指令有限操作专用寄存器的指令有限注意事项注意事项3.4 数据传送类指令双操作数必须类型一致双操作数必须类型一致mov al, 050ah ; 类型不一致类型不一致,050AH超过了寄存器超过了寄存器AL范围范围mov eax,050ah ; 双双字量数据传送字量数据传送mov esi, dl ; 类型不一致类型不一致, ESI为为32位寄存器,位寄存器,DL为为8位寄存器位寄存器mov esi,edx ; 两两个个32位寄存器传送位寄存器传送3.4 数据传送类指令微机原理与接口技术操作数必须有明确的类型操作数必须有明确的类型 mov EBX,255; 无无明确类型明确类型 mov byte ptr ebx,255; BYTE PTR说明是字节操作说明是字节操作 mov word ptr ebx,255; WORD PTR说明是字操作说明是字操作 mov dword ptr ebx,255; DWORD PTR说明是双字操作说明是双字操作3.4 数据传送类指令微机原理与接口技术双操作数不允许都是存储单元双操作数不允许都是存储单元 ; 假设假设dbuf1和和dbuf2是两个双字变量是两个双字变量 mov dbuf2, dbuf1; 两两个操作数都是存储单元个操作数都是存储单元 mov eax, dbuf1 ; eax=dbuf1(将将DBUF1内容送内容送EAX) mov dbuf2, eax ; dubf2=eax(将将EAX内容送内容送DBUF2)3.4 数据传送类指令微机原理与接口技术2. 交换交换指令指令 XCHG 将将源操作数和目的操作数内容源操作数和目的操作数内容交换交换xchg eax, ebxxchg edx, varxchg al, edi3.4 数据传送类指令微机原理与接口技术68 dest: reg src: reg/mem 指令格式:指令格式:xchg dest, src例例3-7 数据数据交换程序交换程序1; 数据段数据段 numbyte 6,7,7,8,3,0,0,0 tab byte 67783000; 代码段代码段 mov ecx, lengthof num; ECX变量变量NUM长度(长度(数据数据个数)个数) mov esi, offset num mov edi, offset tabagain: mov al, esi ; AL获得变量获得变量NUM的一个数的一个数据据 xchg al, edi ;交换,交换,AL等于变量等于变量TAB对应字符对应字符3.4 数据传送类指令微机原理与接口技术69mov esi, al ; 保存回变量保存回变量NUM原位置原位置 call dispc ; 显示显示AL中的字符中的字符 add esi,1 ; 指向下一个数字指向下一个数字 add edi,1 ; 指向下一个字符指向下一个字符 loop again ; 循环处理循环处理 xchg eax, eax nop6778300067783000运行结果运行结果3.4 数据传送类指令微机原理与接口技术70例例3-7 数据数据交换程序交换程序2微机原理与接口技术71空操作指令空操作指令NOP等同于指令等同于指令 XCHG EAX,EAX处理器执行该指令,需要花费时间,在主存中也要处理器执行该指令,需要花费时间,在主存中也要占用一个字节空间占用一个字节空间实现短时间延时实现短时间延时临时占用代码空间临时占用代码空间3.4 数据传送类指令mov ecx, lengthof num ; ECX变量变量NUM长度长度mov esi,0 ; ESI0,表示数据在变量中的位移量,表示数据在变量中的位移量 again: mov al,numesi ; AL获得变量获得变量NUM的一个数字的一个数字 xchg al,tabesi ; 交换,交换,AL等于变量等于变量TAB对应字符对应字符mov numesi,al; 保存回变量保存回变量NUM位置位置call dispc; 显示显示AL中的字符中的字符add esi,1; 指向下一个数据指向下一个数据loop again; 循环循环3.4 数据传送类指令72例例3-7 数据数据交换程序交换程序3微机原理与接口技术3.4.2 3.4.2 堆栈操作指令堆栈操作指令“先进后出先进后出FILO”存取的存储区域,只有一个数据出入存取的存储区域,只有一个数据出入口,即当前栈顶(不断变化)口,即当前栈顶(不断变化)两种基本操作两种基本操作数据压进堆栈数据压进堆栈PUSH数据弹出堆栈操作数据弹出堆栈操作POPSS指向堆栈段的起始位置指向堆栈段的起始位置ESP指定栈顶指定栈顶数据进入堆栈,数据进入堆栈,ESP逐渐减小逐渐减小数据依次弹出、数据依次弹出、ESP逐渐增大逐渐增大Word 1Word 2Word 3Word 4Word 5StackPUSHPOP3.4 数据传送类指令微机原理与接口技术731. 进栈指令进栈指令PUSH将将ESP减小作为当前栈减小作为当前栈顶顶 esp-2(4)esp将源操作数将源操作数(立即数、通用寄存器和段寄存器内容或立即数、通用寄存器和段寄存器内容或存储器操作数存储器操作数)传送到当前栈顶传送到当前栈顶 srcss:esp3.4 数据传送类指令74指令格式:指令格式:push src操操 作:作:以字或双字为单位操作以字或双字为单位操作进栈进栈双字双字量数据时,量数据时,ESP减减4进栈进栈字字量数据时,量数据时,ESP减减2微机原理与接口技术 75执行前执行前12345678HEAX7812H堆栈段堆栈段SSSS高地址高地址低地址低地址 执行进栈指令执行进栈指令 push eax3.4 数据传送类指令ESPESP栈顶栈顶ESPESPESP-4ESP-4563412EAXESPEAXESP2. 出栈指令出栈指令 POP 将栈顶数据传送到目的操作数(通用寄存器、存储将栈顶数据传送到目的操作数(通用寄存器、存储单单 元元或段寄存器或段寄存器)SS:ESP dest增加增加ESP作为作为当前栈当前栈顶顶 ESPESP4(2) 3.4 数据传送类指令微机原理与接口技术76 指令格式:指令格式:pop dest 操操 作:作:以字或双字为单位操作以字或双字为单位操作出栈出栈双字量双字量数据时,数据时,ESP加加4出栈出栈字量字量数据时,数据时,ESP加加2微机原理与接口技术 77执行前执行前EAX0012H堆栈段堆栈段SSSS高地址高地址低地址低地址 执行出栈指令执行出栈指令 pop eax3.4 数据传送类指令ESPESP栈顶栈顶ESPEAXESPEAX207667 ESP=ESP+4ESP=ESP+4 例例3-8 堆栈堆栈操作程序操作程序 ; 数据段数据段 ten = 10 dvar dword 67762000h,12345678h ; 代码段代码段mov eax,dvar+4 ; EAX12345678Hpush eax ; 将将EAX内容压入堆栈内容压入堆栈push dword ptr ten ; 将立即数以双字量压入堆栈将立即数以双字量压入堆栈push dvar ; 变量变量DVAR第一个数据入栈第一个数据入栈pop eax ; 栈顶数据弹出到栈顶数据弹出到EAXpop dvar+4 ; 栈顶数据弹出到栈顶数据弹出到DVAR4mov ebx,dvar+4 ; EBX000000AHpop ecx ; 栈顶数据弹出到栈顶数据弹出到ECXcall disprd3.4 数据传送类指令微机原理与接口技术78微机原理与接口技术793. 堆栈的应用堆栈的应用 堆栈堆栈不可或缺,被很多指令使用:不可或缺,被很多指令使用:堆栈操作指令堆栈操作指令子程序调用子程序调用CALL和返回和返回RET,中断调用,中断调用INT和返回和返回IRET等等内部异常、外部中断等也利用堆栈内部异常、外部中断等也利用堆栈堆栈堆栈可用可用来临时存放数据来临时存放数据,以便随时恢复它们,以便随时恢复它们常利用堆栈基址指针常利用堆栈基址指针EBP,随机读写堆栈数据,随机读写堆栈数据mov ebp, esp ; EBPESPmov eax, ebp+8; EAXSS:EBP+8mov ebp, eax; SS:EBPEAX3.4 数据传送类指令微机原理与接口技术80利用堆栈实现主、子程序间利用堆栈实现主、子程序间传递参数传递参数堆栈还常用于子程序的堆栈还常用于子程序的寄存器保护和恢复寄存器保护和恢复注意入栈和出栈的数据要成对,要注意入栈和出栈的数据要成对,要保持堆栈平衡保持堆栈平衡PUSH AX PUSH BXPUSH CXPUSH DXPOP DXPOP CXPOP BXPOP AX入栈顺序:入栈顺序:出栈顺序:出栈顺序:3.4 数据传送类指令3.4.3 3.4.3 其他传送指令其他传送指令 针对针对特定需要设计的专用传送指令特定需要设计的专用传送指令换码换码指令指令 XLAT标志传送标志传送指令指令 CLC STC CMC 地址传送地址传送指令指令 LEA LDS LES 3.4 数据传送类指令微机原理与接口技术811. 换码换码指令指令 XLAT指令功能指令功能:ALEBXAL 换换码指令执行前:码指令执行前:在主存建立一个在主存建立一个字节字节量表格,量表格,内含目的内含目的代码代码表格首地址存放于表格首地址存放于EBXAL存放相对表格首地址的位移量存放相对表格首地址的位移量换码指令执行后:换码指令执行后:将将AL寄存器的内容转换为目标代码寄存器的内容转换为目标代码3.4 数据传送类指令微机原理与接口技术82例例3-9 换换码显示程序码显示程序1;数据段数据段 numbyte 6,7,7,8,3,0,0,0; 被转换数字被转换数字 tabbyte 0123456789; 代码表代码表;代码段代码段mov ecx,lengthof nummov esi,offset nummov ebx,offset tab; EBX指向代码表指向代码表 again: mov al, esi; AL要转换的数字要转换的数字xlat; 换码换码call dispc; 显示显示add esi,1; 指向下一个数字指向下一个数字loop again; 循环循环3.4 数据传送类指令微机原理与接口技术836778300067783000运行结果运行结果2. 标志传送指令标志传送指令直接操作直接操作标志寄存器标志寄存器标志位操作指令:直接改变标志位操作指令:直接改变CF、DF、IF标志标志3.4 数据传送类指令微机原理与接口技术843. 地址传送地址传送指令指令 LEA地址传送指令获取地址传送指令获取存储器操作数的存储器操作数的地址地址lea r16/r32, mem;r16/r32mem的有效地址的有效地址EA(不需类型一致)(不需类型一致)LEA指令指令类似地址类似地址操作符操作符OFFSET的作用的作用LEA指令在指令执行时计算出偏移地址指令在指令执行时计算出偏移地址OFFSET操作符在汇编阶段取得变量的偏移地址操作符在汇编阶段取得变量的偏移地址OFFSET无需在执行时计算、指令执行速度更快无需在执行时计算、指令执行速度更快LEA指令能获取汇编阶段无法确定的偏移地址指令能获取汇编阶段无法确定的偏移地址3.4 数据传送类指令微机原理与接口技术85 例例3-10 地址地址传送程序传送程序; 数据段数据段 dvar dword 41424344h; 代码段代码段mov eax,dvar; EAX41424344Hlea esi,dvar; ESI指向指向DVARmov ebx,esi; EBX41424344Hmov edi,offset dvar; EDI指向指向DVARmov ecx,edi ; ECX41424344Hlea edx,esi+edi*4+100h ; EDXESIEDI4100Hcall disprd3.4 数据传送类指令微机原理与接口技术86微机原理与接口技术87作作 业业3.1 简答题(简答题(5,6)3.2 判断题(判断题(4,5)3.15 3.17 3.18主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术89算术运算算术运算对数据进行对数据进行加减乘除加减乘除基本的数据处理方法基本的数据处理方法加减运算有加减运算有“和和”或或“差差”的结果外,还有的结果外,还有进进借位、溢出等状态标志借位、溢出等状态标志,也是结果的一部分,也是结果的一部分注意算术运算类指令对标志的影响注意算术运算类指令对标志的影响掌握:加法和减法指令掌握:加法和减法指令熟悉:乘法和除法指令熟悉:乘法和除法指令理解:零位扩展和符号扩展理解:零位扩展和符号扩展3.5 算术运算类指令微机原理与接口技术903.5.1 3.5.1 加法指令加法指令ADDADCINC3.5 算术运算类指令微机原理与接口技术911. 加法指令加法指令 ADD dest: reg/mem src: imm/reg/mem 操操 作:作:dest+srcdest 指令格式:指令格式:add dest src指令按照定义影响指令按照定义影响6个状态标志位!个状态标志位!3.5 算术运算类指令; AX= , OF= , SF= , ZF= , PF= ,CF= 例:例:mov eax, 0aaff7348h add al, 27h add ax, 3fffh add eax, 88000000h微机原理与接口技术 92; AL= , OF= ,SF= ,ZF= ,PF= ,CF= 6FH00 0103.5 算术运算类指令B36EH 0 0110; EAX= , OF= , SF= , ZF= , PF= ,CF= 32FFB36EH 0 1100微机原理与接口技术932. 带进位加法指令带进位加法指令 ADC 操操 作:作:dest+src+CFdest 指令格式:指令格式:adc dest src3.5 算术运算类指令 用于与用于与ADD指令相结合实现指令相结合实现多精度数多精度数的加法的加法先将两个操作数的低先将两个操作数的低32位相加(用位相加(用ADD指令)指令)再加高位部分、并将进位加到高位(用再加高位部分、并将进位加到高位(用ADC指令)指令)微机原理与接口技术94mov eax, dword ptr qvar1 ;取低取低32位位add eax, dword ptr qvar2 ;加低加低32位,设置位,设置CFmov edx, dword ptr qvar1+4 ;取高取高32位位adc edx, dword ptr qvar2+4 ;加高加高32位,同时加位,同时加CF例例3-11 64位数据相加程序位数据相加程序 ; 数据段数据段 qvar1 qword 6778300082347856h qvar2 qword 6776200012348998h ; 代码段代码段3.5 算术运算类指令微机原理与接口技术953. 增量指令增量指令INC 操操 作:作:reg/mem+1reg/mem 指令格式:指令格式:inc reg/mem 用于对用于对计数器计数器和和地址指针地址指针进行调整进行调整 不影响不影响CF但影响其它状态标志位但影响其它状态标志位inc ecxinc esiinc wvarinc dvarebx+edi3.5 算术运算类指令微机原理与接口技术963.5.2 3.5.2 减法指令减法指令SUBSBBDEC3.5 算术运算类指令CMPNEG微机原理与接口技术971. 减法指令减法指令 SUB dest: reg/mem src: imm/reg/mem 操操 作:作:dest-srcdest 指令格式:指令格式:sub dest src指令按照定义影响指令按照定义影响6个状态标志位!个状态标志位!3.5 算术运算类指令; AX= , OF= , SF= , ZF= , PF= ,CF= 例:例:mov eax, 0aaff7348h sub al, 27h sub ax, 3fffh sub eax, 0bb000000h微机原理与接口技术 98; AL= , OF= ,SF= ,ZF= ,PF= ,CF= 21H00 0103.5 算术运算类指令3322H 0 0001; EAX= , OF= , SF= , ZF= , PF= ,CF= EFFF3322H 0 1011微机原理与接口技术992. 带借位减法指令带借位减法指令 SBB 操操 作:作:dest-src-CFdest 指令格式:指令格式:sbb dest src3.5 算术运算类指令 用于与用于与SUB指令相结合实现多精度数的减法指令相结合实现多精度数的减法先将两个操作数的低先将两个操作数的低32位相减(用位相减(用SUB指令)指令)再减高位部分、并从高位减去借位(用再减高位部分、并从高位减去借位(用SBB指令)指令)微机原理与接口技术1003. 减量指令减量指令 DEC 操操 作:作:reg/mem-1reg/mem 指令格式:指令格式:dec reg/mem 用于对用于对计数器计数器和和地址指针地址指针进行调整进行调整 不影响不影响CF但影响其它状态标志位但影响其它状态标志位dec ecxdec esidec wvardec dvarebx+edi3.5 算术运算类指令微机原理与接口技术101例例3-12 大小写字母转换程序大小写字母转换程序 ; 数据段数据段 msg byte welcome,0 ; 代码段代码段mov ecx,(lengthof msg)-1 ; ECX等于字符串长度等于字符串长度mov ebx,0 ; EBX0指向头一个字母指向头一个字母sub msgebx,a-A ;小写字母减小写字母减20H转换为大写转换为大写inc ebx ; 指向下一个字母指向下一个字母loop again ; 循环循环mov eax,offset msgcall dispmsg ; 显示显示3.5 算术运算类指令again:微机原理与接口技术1023.5 算术运算类指令4. 求补指令求补指令 NEG 操操 作:作:0-destdest 指令格式:指令格式:neg dest 影响影响CF、OF、PF、SF、ZFdest: reg/mem微机原理与接口技术 103例:例:mov ax,0ff64h neg al sub al,9dh neg ax dec al neg ax ; AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1; AX=FFFFH,OF=0,SF=1,ZF=0,PF=1,CF=1; AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1; AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1; AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=03.5 算术运算类指令微机原理与接口技术1043.5 算术运算类指令5. 比较指令比较指令 CMP 操操 作:作:dest-src 指令格式:指令格式:cmp dest, src 结果不回送目的操作数结果不回送目的操作数按照减法结果影响按照减法结果影响状态标志状态标志 根据标志状态获知两个操作数的大小关系根据标志状态获知两个操作数的大小关系 给条件转移等指令使用其形成的状态标志给条件转移等指令使用其形成的状态标志微机原理与接口技术 105 根据标志位判断比较结果的步骤根据标志位判断比较结果的步骤destsrcdest=srcdestsrcdestsrc ZF=1?Y YN N有符号数的比较有符号数的比较无符号数的比较无符号数的比较N N CF=1?Y YN N SF=OF?Y Y3.5 算术运算类指令算术运算指令还包括:算术运算指令还包括:3.4 数据传送类指令微机原理与接口技术106乘法指令乘法指令除法指令除法指令零位扩展和符号位扩展指令零位扩展和符号位扩展指令3.5.3 3.5.3 乘除法等指令乘除法等指令十进制调整指令(自学)十进制调整指令(自学)微机原理与接口技术1071. 乘法指令乘法指令3.5 算术运算类指令微机原理与接口技术1083.5 算术运算类指令乘法指令对乘法指令对 CF/OF 的影响:的影响:00 乘积的高一半为零乘积的高一半为零11 否则否则MULMUL指令指令: : CF,OF= =00 乘积的高一半是低一乘积的高一半是低一 半的符号扩展半的符号扩展11 否则否则 IMUL IMUL指令指令: : CF,OF=例:例:AX = 16A5H,BX = 0611H (1) IMUL BL ; AX AL * BL ; AX = 0F9F5H CF=OF=1 (2) MUL BX ; DX. AX AX *BX ; (DX)=0089H (AX)=5EF5H CF=OF=1微机原理与接口技术1093.5 算术运算类指令无符号除法指令无符号除法指令DIV和有符号除法指令和有符号除法指令IDIV除法指令可能产生除法指令可能产生除法溢出除法溢出对对DIV指令,除数为指令,除数为0,或者在字节做除数时商超,或者在字节做除数时商超过过8位,字做除数时商超过位,字做除数时商超过16位,或者双字做除数位,或者双字做除数时商超过时商超过32位,则发生位,则发生除法溢出除法溢出对对IDIV指令,除数为指令,除数为0,或者在字节除时商不在,或者在字节除时商不在-128127范围内,在字除时商不在范围内,在字除时商不在-3276832767范围内,或者在双字除时商不在范围内,或者在双字除时商不在-2312311范围内,则发生除法溢出范围内,则发生除法溢出除法错溢出时将产生除法错溢出时将产生编号为编号为0的内部中断的内部中断2. 除法指令除法指令微机原理与接口技术1103.5 算术运算类指令 除法指令使除法指令使状态标志没有定义状态标志没有定义微机原理与接口技术1113.5 算术运算类指令3. 零位扩展和符号扩展指令零位扩展和符号扩展指令零位扩展对应无符号数:零位扩展对应无符号数:MOVZX前面前面加加0实现位数扩展实现位数扩展例例:80H:8位无符号数,零位扩展为位无符号数,零位扩展为16位:位:0080H符号扩展对应有符号数:符号扩展对应有符号数:MOVSX指令指令前面前面加符号位加符号位(最高位)实现位数扩展(最高位)实现位数扩展例:例:64H:8位有符号数,符号扩展成位有符号数,符号扩展成16位:位:0064H FF00H:16位有符号数据,符号扩展成位有符号数据,符号扩展成32位:位: FFFFFF00H,都表达真值:,都表达真值:-256 真值真值-1:字节量补码:字节量补码:FFH,字量补码:,字量补码:FFFFH, 双字量补码:双字量补码:FFFFFFFFH微机原理与接口技术1123.5 算术运算类指令 指令格式指令格式微机原理与接口技术113作作 业业3.1 简答题(简答题(7,8)3.2 判断题(判断题(6,7)3.19 3.20 3.21主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术 115位操作指令可以对数据中的位操作指令可以对数据中的各个二进制位各个二进制位进行进行操作,包括:操作,包括:逻辑运算指令逻辑运算指令移位指令移位指令循环移位指令循环移位指令3.6 位操作指令微机原理与接口技术 1161.AND dest, src : dest srcdest2.OR dest, src : dest srcdest3.XOR dest, src : dest srcdest4.TEST dest, src : dest src 5.NOT dest : destdest3.6.1 3.6.1 逻辑运算指令逻辑运算指令dest/src: reg/mem设置设置CF=OF=0根据结果设置根据结果设置SF/ZF/PFAF无定义无定义不影响标志位不影响标志位3.6 位操作指令微机原理与接口技术117例例3-13 逻辑运算程序逻辑运算程序1mov eax,varA; EAX11001010000111100101010101001101Bnot eax; EAX00110101111000011010101010110010Bmov ebx,varB ; EBX00110111010110100011010111100001Band eax,varB; EAX00110101010000000010000010100000Bnot ebx; EBX11001000101001011100101000011110Band ebx,varA; EBX11001000000001000100000000001100Bor eax,ebx; EAX11111101010001000110000010101100Bmov varT1, eax3.6 位操作指令微机原理与接口技术118例例3-13 逻辑运算程序逻辑运算程序2mov eax,varAxor eax,varB; EAX11111101010001000110000010101100Bmov varT2,eax;mov eax,varT1 ; 二进制形式显示二进制形式显示VART1call dispbdcall dispcrlf ; 换行显示换行显示mov eax,varT2 ; 二进制形式显示二进制形式显示VART2call dispbd111111010100010001100000101011001111110101000100011000001010110011111101010001000110000010101100111111010100010001100000101011003.6 位操作指令微机原理与接口技术 119AND指令可以指令可以复位某些位复位某些位而不影响其它位而不影响其它位(同同“0”与与)OR指令可以指令可以置位某些位置位某些位而不影响其它位而不影响其它位(同同“1”或或)XOR指令可指令可以求反某些位以求反某些位(同同“1”异或异或)而不影响而不影响其它位其它位(同同“0”异或异或)注注 意意3.6 位操作指令微机原理与接口技术 120例:例:字母大小写的转换字母大小写的转换AND bl, 11011111b(dfh) ; 小写转换为大写:小写转换为大写:D5清清0,其余位不变,其余位不变 OR bl, 00100000b(20h) ; 大写转换为小写:大写转换为小写:D5置置1,其余位不变,其余位不变XOR bl, 00100000b(20h) ; 大小写相互转换:大小写相互转换:D5求反求反,其余位不变,其余位不变3.6 位操作指令微机原理与接口技术 1211. SHL dest, 1/cl : 逻辑左移指令逻辑左移指令2. SHR dest, 1/cl : 逻辑右移指令逻辑右移指令3. SAL dest, 1/cl : 算术左移指令算术左移指令4. SAR dest, 1/cl : 算术右移指令算术右移指令3.6.23.6.2 移位指令移位指令dest: reg/mem移动位数移动位数3.6 位操作指令微机原理与接口技术 122CF高高低低0算术左移算术左移SALCF高高低低0逻辑左移逻辑左移SHLSHL与与SAL的功能完全一样,每移一次,最高位进的功能完全一样,每移一次,最高位进入入CF,最低位,最低位补补0移位后如果移位后如果最高位和最高位和CF不同不同,则,则OF1,否则,否则OF=03.6 位操作指令微机原理与接口技术 123SHR与与SAR的功能不一样。的功能不一样。SAR执行时,最高位不执行时,最高位不变。变。SHR执行时最高位置执行时最高位置0。所有移位指令影响所有移位指令影响CF、OF、PF、SF和和ZF。算术右移算术右移SARCF高高低低逻辑右移逻辑右移SHRCF高高低低03.6 位操作指令微机原理与接口技术 1240110000001110101例例:mov dx, 6075h shl dx, 1 sar dx, 1 shr dx, 1 mov cl, 4 sal dx, cl00110000001110101001CF011100000011101010DX11100000011101011000 0CF3.6 位操作指令微机原理与接口技术125例例3-14 移位指令实现乘法程序移位指令实现乘法程序xor eax,eax; EAX0mov ax, wvar; AX要乘以要乘以10的无符号数的无符号数shl eax,1; 左移一位等于乘左移一位等于乘2mov ebx,eax; EBXEAX2shl eax,2; 再左移再左移2位位,EAXEAX8add eax,ebx; EAXEAX10call dispuid; 显示乘积显示乘积call dispcrlf; 换行换行imul eax,10; EAXEAX10call dispuid; 显示乘积显示乘积 SHL逻辑逻辑左移一位相当于左移一位相当于无符号数无符号数乘以乘以2 SHR逻辑逻辑右移一位相当于右移一位相当于无符号数无符号数除以除以23.6 位操作指令微机原理与接口技术 1263.6.3 3.6.3 循环移位指令循环移位指令1. ROL dest, 1/cl : 不带进位循环左移不带进位循环左移2. ROR dest, 1/cl : 不带进位循环右移不带进位循环右移3. RCL dest, 1/cl : 带进位循环左移带进位循环左移4. RCR dest, 1/cl : 带进位循环右移带进位循环右移dest: reg/mem循环移位指令只影响循环移位指令只影响CF和和OF3.6 位操作指令微机原理与接口技术 127高高低低不带不带CF的循环左移指令的循环左移指令ROL “小循环小循环”CF不带不带CF的循环右移指令的循环右移指令ROR“小循环小循环”CF高高低低高高低低带带CF的循环左移指令的循环左移指令RCL“大循环大循环”CF带带CF的循环右移指令的循环右移指令RCR“大循环大循环”CF高高低低3.6 位操作指令微机原理与接口技术1283.6 位操作指令 例例3-15 循环移位程序循环移位程序1;数据段数据段 qvarqword 1234567887654321h;代码段代码段mov ecx,4 again:shr dword ptr qvar+4,1rcr dword ptr qvar,1loop again微机原理与接口技术129例例3-15 循环移位程序循环移位程序2 ;数据段数据段 asciibyte 38 bcdbyte ?;代码段代码段mov al, asciiand al,0fhmov ah,ascii+1shl ah, 4or al, ahmov bcd, al3.6 位操作指令主要内容主要内容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 串操作类指令串操作类指令3.8 IA-323.8 IA-32指令系统指令系统微机原理与接口技术131数据串数据串(数组数组):以字节、字和双字为单位的多个数据以字节、字和双字为单位的多个数据存放在连续的主存区域中存放在连续的主存区域中源操作数:允许段超越:源操作数:允许段超越:DS:ESI目的操作数:不允许段超越:目的操作数:不允许段超越:ES:EDI每执行一次串操作:每执行一次串操作:ESI和和EDI自动自动1/2/4以字节为单位(用以字节为单位(用B结尾)操作:地址指针结尾)操作:地址指针1以字为单位(用以字为单位(用W结尾)操作:地址指针结尾)操作:地址指针2以双字为单位(用以双字为单位(用D结尾)操作:地址指针结尾)操作:地址指针4DF0(执行执行CLD指令指令):地址指针增加():地址指针增加()DF1(执行执行STD指令指令):地址指针减小():地址指针减小()3.7 串操作指令微机原理与接口技术1323.7 串操作指令3.7.1 3.7.1 串传送指令串传送指令1.MOVSB|MOVSW|MOVSD串传送:串传送:ES:EDIDS:ESIESIESI1/2/4,EDIEDI1/2/42.STOSB|STOSW|STOSD串存储:串存储:ES:EDIAL/AX/EAX然后:然后:EDIEDI1/2/43.LODSB|LODSW|LODSD串读取:串读取:AL/AX/EAXDS:ESI然后:然后:ESIESI1/2/44.REP执行一次串指令,执行一次串指令,ECX减减1;直到;直到ECX0微机原理与接口技术1333.7 串操作指令例例3-16 字符串复制程序字符串复制程序1; 数据段数据段srcmsg byteIn a major matter, no details are small.,0destmsg byte (lengthof srcmsg) dup (0); 代码段代码段mov esi, offset srcmsg ; ESI源字符串地址源字符串地址mov edi, offset destmsg ; EDI目的字符串地址目的字符串地址mov ecx, lengthof srcmsg ; ECX字符串长度字符串长度cld ; 地址增量传送地址增量传送rep movsb ; 重复字符串传送重复字符串传送mov eax, offset destmsgcall dispmsg微机原理与接口技术1343.7 串操作指令例例3-16 字符串复制程序字符串复制程序2; 数据段数据段 srcmsg byte In a major matter, no details are small.,0 destmsg byte (lengthof srcmsg) dup (0); 代码段代码段xor ebx, ebx; EBX0mov ecx,lengthof srcmsg ; ECX字符串长度字符串长度again:mov al,srcmsgebx; 源字符串取一个字符源字符串取一个字符mov destmsgebx,al; 传送到目的字符串传送到目的字符串inc ebx; 指向下一个字符指向下一个字符loop again; 重复进行字符串传送重复进行字符串传送微机原理与接口技术1353.7 串操作指令3.7.2 3.7.2 串检测指令串检测指令1.CMPSB|CMPSW|CMPSD;串比较:串比较:DS:ESIES:EDI;然后:然后:ESIESI1/2/4,EDIEDI1/2/42.SCASB|SCASW|SCASD;串扫描:串扫描:AL/AX/EAXES:EDI;然后:然后:EDIEDI1/2/43.REPE|REPZ;执行一次串指令,执行一次串指令,ECX减减1;直到;直到ECX0或或ZF04.REPNE|REPNZ;执行一次串指令,执行一次串指令,ECX减减1;直到;直到ECX0或或ZF1微机原理与接口技术1363.7 串操作指令例例3-17 等长字符串比较程序等长字符串比较程序; 代码段代码段mov ecx,countmov esi, offset string1mov edi, offset string2cldrepz cmpsb; 重重复复比比较较,不不同同或或比比较较完完jne found; 发现不同字符发现不同字符,转移转移mov al,Y; 字符串相同字符串相同,显示显示Yjmp done found: mov al,N; 字符串不同,显示字符串不同,显示N done: call dispc主要内容主要内容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 串操作类指令串操作类指令3.8 3.8 IA-32IA-32指令系统指令系统微机原理与接口技术1383.8 IA-32指令系统指令系统(指令集):指令系统(指令集): 处理器支持的所有指令的集合处理器支持的所有指令的集合通用指令通用指令属于处理器的基本指令属于处理器的基本指令微机原理与接口技术139 Intel 80x86指令系统的发展指令系统的发展8086(80186)建立建立16位基本指令位基本指令80286增加保护方式指令增加保护方式指令80386扩展为扩展为32位指令系统,新增许多位操作指令位指令系统,新增许多位操作指令80486新增新增6条指令,开始直接支持浮点处理指令条指令,开始直接支持浮点处理指令Pentium新增新增6条指令,如处理器识别指令条指令,如处理器识别指令CPUIDPentium Pro增加增加3条指令,如条件传送指令条指令,如条件传送指令CMOVPemtium II/III/4逐渐增加多媒体指令:逐渐增加多媒体指令:MMX、SSE/SSE2/SSE3/SSSE3指令指令Intel 64处理器提供处理器提供64位指令,具有虚拟机管理指令位指令,具有虚拟机管理指令3.8 IA-32指令系统微机原理与接口技术140掌握掌握二进制、十六进制及与十进制间的相互转换二进制、十六进制及与十进制间的相互转换理解理解定点整数及有符号数表达,定点整数及有符号数表达,掌握求补运算掌握求补运算熟悉熟悉BCD、ASCII码及其编码规律码及其编码规律掌握掌握常量表达方法常量表达方法掌握掌握变量定义、变量属性及其应用变量定义、变量属性及其应用掌握掌握基本指令的功能及其应用基本指令的功能及其应用MOV,XCHG,PUSH,POP加法指令,减法指令,逻辑指令,移位指令加法指令,减法指令,逻辑指令,移位指令熟悉熟悉常见指令的功能常见指令的功能XLAT,LEA,MUL,IMUL,DIV,IDIVMOVZX,MOVSX,CLC,STC;MOVS,STOS,REP理解理解常见语法错误、符号扩展、十进制调整等问题常见语法错误、符号扩展、十进制调整等问题第第3 3章章 总结总结
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号