微机原理与接口:第三章 数据处理_第1页
微机原理与接口:第三章 数据处理_第2页
微机原理与接口:第三章 数据处理_第3页
微机原理与接口:第三章 数据处理_第4页
微机原理与接口:第三章 数据处理_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理与接口技术,第3章 数据处理,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,3,3.1 数据表示,数据(Data):计算机处理的对象 对应指令操作的对象:操作数(Oprand) 计算机中的数据要用二进制的0和1组合表示 IA-32整数指令支持的基本数据类型 8、16、32、64位无符号整数 8、16、32、64位有符号整数 ASCII字符、字符串和BCD码,3.1 数据表示,微机原理与接口技术,4,1103110211011100

2、110-1110-2,权,N进制数am-1am-2a1a0 .b-1b-2b-(n-1)b-n,3.1.1 进制,例:十进制数1111.11,am-1Nm-1am-2Nm-2+a0+b-1N-1b-2N-2 +b-(n-1)N-(n-1)b-nN-n,基数,3.1 数据表示,微机原理与接口技术,5,1. 二进制,逢二进一,由0和1两个数码组成,基数为2,各个位的权以2n表示 二进制数的算术运算:逢2进1、借1当2,anan-1a1a0 .b1b2bm,an2nan-12n-1+a020+b12-1b22-2 +bm2-m,3.1 数据表示,微机原理与接口技术,6,二进制数的算术运算,3.1 数

3、据表示,微机原理与接口技术,7,2. 逻辑运算,基本逻辑运算 逻辑与AND: 1101 0011 = 0001 逻辑或OR: 1101 0011 = 1111 逻辑非NOT: 1101 = 0010 逻辑异或XOR:1101 0011 = 1110,3.1 数据表示,微机原理与接口技术,8,3. 十六进制,逢十六进一,由0F16个数码组成,基数为16,各个位的权以16k表示 十六进制数的算术运算:逢16进1、借1当16,anan-1a1a0 .b1b2bm,an16nan-116n-1+a0160+b116-1 b216-2 +bm16-m,3.1 数据表示,微机原理与接口技术,9,十六进制数

4、的加法运算,3.1 数据表示,微机原理与接口技术,10,十六进制数的减法运算,3.1 数据表示,微机原理与接口技术,11,4. 数制之间的转换,3.1 数据表示,微机原理与接口技术,12,1)N进制转换成十进制数-按权展开式,= 123 +121+120+121+123,= 11.625,= 10161+7160+11161=,1011.101B,例:,A7.BH,167.6875,3.1 数据表示,微机原理与接口技术,13,整数部分:除N取余,直至商为0 小数部分:乘N取整,直至小数部分为0 最先取到的数码离小数点最近!,2)十进制转换成N进制数,3.1 数据表示,微机原理与接口技术,14,

5、例:126.8125 ( )B,整数部分126除2取余,0,1,1,1,1,1,2,126,63,2,31,2,15,2,7,2,2,3,1,取余,小数部分0.8125乘2取整,1,取整,0.81252=1.625,0.6252=1.25,0.252=0.5,0.52=1.0,1,0,1,2,0,1,3.1 数据表示,1101,1111110.,微机原理与接口技术,15,练 习,256(?)B,13/16(?)B,108.375(?)H,100000000,0.1101,6C.6,3.1 数据表示,微机原理与接口技术,16,3)二进制与十六进制的转换,二进制十六进制- “四位并一位”,例:11

6、011.101001B = (0001 1011.1010 0100)B,= (1B.A4)H,3.1 数据表示,微机原理与接口技术,17,例:3A.EH=(0011 1010.1110)B,=(111010.111)B,3.1 数据表示,微机原理与接口技术,18,作 业,27/32(?)H=(?)B,65535(?)H=(?)B,11011.1B+26.8H(?)D,(101)X=(41)H, X=?,3.1 数据表示,微机原理与接口技术,19,3.1.2 数值的编码,3.1 数据表示,1. 定点整数,小数点的位置默认并固定的机器数称为定点数 定点整数:小数点的位置固定在机器数最右侧 定点小

7、数:小数点的位置固定在机器数最左侧,微机原理与接口技术,20,无符号定点整数 只表示正整数和0,不 含负数 N位无符号整数表达范围:02N-1 有符号定点整数 表示正整数、0和负整数 最高位表示数的正负即符号位,与数值无关 符号位用0表示正数、1表示负数,例:16位无符号定点整数的表示范围:02161 32位有符号定点整数的表示范围:2161,3.1 数据表示,微机原理与接口技术,21,有符号整数在计算机中默认采用补码表示 最高位表示符号,0表示正数,1表示负数 正数补码直接表示数值大小,同无符号数 负数补码是将对应正数补码取反加1 数值0只有“0”,“0”由128替代,2. 补码,3.1 数

8、据表示,例:+105=( )补码,01101001,-105=( )补码,10010111,微机原理与接口技术,22,求补运算,负数真值“取反加1”得机器数补码 负数补码“取反加1”得到负数真值 例:补码 11100000B 真值= (11100000求反1) =00100000B =32 负数求补运算,等效于“用带借位的0作减法” 例:真值-8, 补码=100H-8H=F8H 补码F8H, 真值=-(100H-F8H)=-8H=-8,3.1 数据表示,23,引入补码可以将减法变成加法 补码相加之和仍为补码 利用无符号数加法结合补码表达,实现 无符号数加法 无符号数减法 有符号数加法 有符号数

9、减法,3. 补码运算,3.1 数据表示,X补码Y补码XY补码 X补码Y补码X补码Y补码XY补码,微机原理与接口技术,24,例1:67H-10H=57H,例2:-67H-10H=-77H,=189H=(-77H)补,进位自然丢失,67H+(-10H)补=67H+F0H=157H,进位自然丢失,(-67H)补+(-10H)补=99H+F0H,3.1 数据表示,微机原理与接口技术,25,4. 原码和反码,3.1 数据表示,正数的原码、反码和无符号数一样 求负数的原码、反码和补码 首先计算其对应正数的编码 然后取反符号位(设置为1)成为原码 再取反其他位得到反码 最后加1就是补码,例:+32=(001

10、00000B)原码=(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 数据表示,微机原理与接口技术,27,3.1.3 字符的编码,在计算机中,各种字符需要用若干位的二进制码的组合表示,即字符的二进制编码 由于字节为计算机的基本存储单位,所以常以8个二进制位为单位表达字符,01234

11、56789,English,汉字,3.1 数据表示,微机原理与接口技术,28,1. 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 =( ) BCD,01010010,52H,000101100111,167H,00110100,34H,89

12、1.45,微机原理与接口技术,29,2. 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 数据表示,微机原理与接口技术,30,3. Unicode(统一码),8位ASCII码表达英文字符 16位国标码表达汉字字符 汉字机内码:国标码在计算机中使用的编码 国际信息交换码Unicod

13、e 16位编码 对世界上所有语言的大多数字符进行编码 提供扩展能力 Unicode兼容ASCII,Unicode给每个字符提供了一个唯一的数字,不论是什么 平台,不论是什么程序,不论是什么语言,3.1 数据表示,微机原理与接口技术,31,作 业,3.1 简答题(1) 3.2 判断题(13) 3.3 填空题(2、3) 3.43.8 3.14,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,33,常数 十、十六和二进制形式表达的数值 以后缀字母

14、区分,十进制数可以不加 以字母AF开头的十六进制常数,要加前导0 字符和字符串 英文缩略号括起来的单个字符或多个字符 数值是每个字符对应的ASCII码值 符号常量 使用标识符表达一个数值 符号定义伪指令:等价EQU,等号 数值表达式 用运算符连接各种常量构成的算式 算术运算符:(加) (减) *(乘) /(除),常量具有确定数值,3.2 常量表达,微机原理与接口技术,34,例3.1 数据表达程序1,.data 0000000064 64 64 64 64 const1byte 100,100d,01100100b,64h, d 0000000501 7F 80 80 FF FF const2b

15、yte 1,+127,128,-128,255,-1 0000000B69 97 20 E0 32 CE const3byte 105,-105,32,-32,32h,-32h 0000001130 31 32 33 34 35 36 37 38 39 61 62 63 78 79 7A 41 42 43 58 59 5A const4byte 0123456789,abcxyz,ABCXYZ,3.2 常量表达,微机原理与接口技术,35,例3.1 数据表达程序2,000000270D 0A 0 crlf byte 0dh,0ah,0 = 0000000A minint = 10 = 00000

16、0FF maxintequ 0ffh 0000002A0A 0F FA F5 const5byte minint,minint+5 byte maxint-5,maxint-minint 0000002E10 56 15 EB const6byte 4*4,34h+34,67h-52h,52h-67h,3.2 常量表达,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,37,变量(Variable) 程序运行中随之发生变化的结果 保存在可读可

17、写的主存空间 实质是主存单元的数据,因而可以改变 变量需要事先定义才能使用 变量具有属性方便应用,变量表达主存数据,即存储器操作数,3.3 变量应用,微机原理与接口技术,38,3.3.1 变量定义,申请存储空间,还可以进行存储单元初始化 变量名 变量定义伪指令 初值表 变量名是用户标识符,表示首元素逻辑地址 变量定义伪指令 BYTE、WORD、DWORD、FWORD、QWORD、TBYTE 初值表是用逗号分隔的参数 各种形式的常量 “?”表示初值不确定,即未赋初值 复制操作符DUP,3.3 变量应用,1. 变量定义伪指令,微机原理与接口技术,39,3.3 变量应用,2. 字节量数据,BYTE定

18、义8位、字节量变量数据 可以表达 无符号整数0255 补码表示的有符号整数:-128+127 一个字符(ASCII码值) 压缩BCD码:099 非压缩BCD码:09 ,字符串定义使用字节变量定义BYTE,3.3 变量应用,微机原理与接口技术,40,例3-2 字节变量程序,3.3 变量应用,41,=0000000Aminint= 10 0000000000 80 FF 80 00 7F bvar1byte 0,128,255,-128,0,+127 0000000601 FF 26 DA 38 C8 bvar2byte 1,-1,38,-38,38h,-38h 0000000C00 bvar3b

19、yte ? 0000000D00000005 24 bvar4byte 5 dup ($) 000000120000000A 00 0000000A 0A 00 bvar5byte minint dup(0),minint dup(minint,?) 0000003000000002 02 03 00000002 04 byte 2 dup(2,3,2 dup(4),3. 字量数据,WORD定义16位、字量变量数据 可以表达 16位无符号和有符号整数 16位段选择器,16位偏移地址 16位数据包含高低两个字节,占用2个连续的字节存储单元 小端方式(Little Endian) 低字节数据存放在

20、低地址存储单元 高字节数据存放在高地址存储单元,3.3 变量应用,微机原理与接口技术,42,例3-3字变量程序,= 0000000Aminint= 10 000000000000 8000 FFFF 8000 0000 7FFF wvar1word 0,32768,65535,-32768,0,+32767 0000000C0001 FFFF 0026 FFDA 0038 FFC8 wvar2word 1,-1,38,-38,38h,-38h 000000180000 wvar3word ? 0000001A2010 1020 0000001E00000005 000A 0000 wvar4w

21、ord 2010h,1020h word 5 dup(minint,?) 000000323139 3832 wvar6word 3139h,3832h 0000003639 31 32 38 0000003A00 bvar6byte 39h,31h,32h,38h byte 0,43,微机原理与接口技术,4. 双字量数据,DWORD定义32位、双字量变量数据 可以表达 32位无符号和有符号整数 32位偏移地址、线性地址或段基地址 32位数据包含4个字节,以“高对高、低对低”原则占用4个连续字节空间,3.3 变量应用,微机原理与接口技术,44,小端存储方式,3.3 变量应用,微机原理与接口技术

22、,45,例3-4 双字变量程序1,=0000000Aminint= 10 0000000000000000 80000000 FFFFFFFF 80000000 00000000 7FFFFFFF dvar1dword 0,80000000h,0ffffffffh, -80000000h,0,7fffffffh 0000001800000001 FFFFFFFF 00000026 FFFFFFDA 00000038 FFFFFFC8 dvar2dword 1,-1,38,-38,38h,-38h 0000003000000000 dvar3dword ? 0000003400002010 00

23、001020 dword 2010h,1020h,3.3 变量应用,微机原理与接口技术,46,例3-4 双字变量程序2,0000003C0000000A 0000000A 00000000 dvar5dword minint dup(minint,?) 0000008C38323139 dvar6dword 38323139h 0000009039 31 32 38 bvar6byte 39h,31h,32h,38h 0000009400 byte 0,91289128,运行结果,3.3 变量应用,微机原理与接口技术,47,5. 变量定位,变量定义的存储空间按照书写的先后顺序一个接着一个分配

24、“ORG 参数”控制存放的偏移地址 org 100h;从偏移地址100H处安排 指令代码也由汇编程序按照语句的书写顺序安排存储空间 定位伪指令也可以用于控制代码的偏移地址,3.3 变量应用,微机原理与接口技术,48,3.3.2 变量属性,变量定义 分配存储空间 赋初值 创建变量名 变量名具有两类属性 地址属性:首个变量所在存储单元的逻辑地址,含有段基地址和偏移地址 类型属性:变量定义的数据单位 字节量BYTE 字量WORD 双字量DWORD 3字量FWORD 4字量QWORD 10字节量TBYTE,3.3 变量应用,微机原理与接口技术,49, 地址操作符,地址操作符用于获取变量名的地址属性,3

25、.3 变量应用,微机原理与接口技术,50,例3-5 变量地址属性程序1,3.3 变量应用,51,; 数据段 0000000012 34 bvarbyte 12h,34h org $+10 0000000C0001 0002 0003 0004 0005 0006 0007 0008 0009 000A arrayword 1,2,3,4,5,6,7,8,9,10 000000205678 wvarword 5678h =00000016arr_size = $-array =0000000Barr_len = arr_size/2 000000229ABCDEF0 dvardword 9abc

26、def0h,例3-5 变量地址属性程序2,; 代码段 00000000A0 00000000 R mov al,bvar 000000058A 25 00000001 R mov ah,bvar+1 0000000B66| 8B 1D00000022 R mov bx,wvar2 00000012B9 0000000B mov ecx,arr_len 00000017BA 00000017 R mov edx,$,3.3 变量应用,微机原理与接口技术,52,直接寻址,al=12h,ah=34h,bx=def0h,ecx=0000000bh,edx=00000017h,例3-5 变量地址属性程序

27、3,0000001CBE 00000022 R mov esi,offset dvar 00000021 8B 3E mov edi,esi 00000023 8B 2D 00000022 R mov ebp,dvar 00000029 E8 00000000 E call disprd,EAX=00003412, EBX=7FFDDEF0, ECX=0000000B, EDX=00401017 ESI=00404022, EDI=9ABCDEF0, EBP=9ABCDEF0, ESP=0012FFC4,3.3 变量应用,微机原理与接口技术,53,esi=00000022h,edi=9abcd

28、ef0h,ebp=9abcdef0h, 类型操作符,类型操作符使用变量名的类型属性,3.3 变量应用,微机原理与接口技术,54,例3-6 变量类型属性程序1,; 代码段 00000000A1 0000000C R mov eax,dword ptr array; 获得数据 00000005BB 00000001 mov ebx,type bvar; 获得字节类型值 0000000AB9 00000002 mov ecx,type wvar; 获得字类型值 0000000FBA 00000004 mov edx,type dvar; 获得双字类型值,3.3 变量应用,微机原理与接口技术,55,例

29、3-6 变量类型属性程序2,00000014BE 0000000A mov esi, lengthof array ; 获得数据个数 00000019BF 00000014 mov edi, sizeof array; 获得字节长度 0000001EBD 00000016 mov ebp, arr_size; 获得字节长度 00000023E8 00000000 E call disprd,EAX=00020001, EBX=00000001, ECX=00000002, EDX=00000004 ESI=0000000A, EDI=00000014, EBP=00000016, ESP=00

30、12FFC4,3.3 变量应用,微机原理与接口技术,56,微机原理与接口技术,57,作 业,3.1 简答题(24) 3.3 填空题(46) 3.103.13,微机原理与接口技术,58,.data org 1000h buf1 dword 7080h,9000h,0ab0h buf2 word buf1 count equ $-buf1 buf3 byte 2 dup(?,10h,10,A) buf4 word buf3-buf2 .code mov eax, offset buf4 mov ebx, buf1+2 mov esi, lengthof buf2 mov edi, sizeof b

31、uf3,测 验,要求画出内存分配情况,并说明每条硬指令的执行结果,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,60,学习指令的注意事项,指令的功能:该指令能够实现何种操作 指令的寻址方式:该指令中的操作数采用何种寻址方式 指令对标志的影响:指令执行后是否影响标志位、如何影响 其他方面:如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等,数据传送把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 包括3类数据

32、传送指令:,3.4 数据传送类指令,微机原理与接口技术,61,3.4.1 通用传送指令,3.4 数据传送类指令,微机原理与接口技术,62,MOV,XCHG,微机原理与接口技术,63,1. 传送指令 MOV,dest: reg/mem src: imm/reg/mem/seg,3.4 数据传送类指令,将源操作数内容传送到目的操作,指令格式:mov dest , src,微机原理与接口技术,64,两个操作数的类型必须一致 操作数必须有明确的类型 两个操作数不能同时为存储器 操作专用寄存器的指令有限,注意事项,3.4 数据传送类指令,双操作数必须类型一致,mov al, 050ah ; 类型不一致,

33、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 数据传送类指令,微机原理与接口技术,

34、双操作数不允许都是存储单元,; 假设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, ebx xchg edx, var xchg al, edi,3.4 数据传送类指令,微机原理与接口技术,68,dest: reg src: reg/mem,指令格式:xchg

35、dest, src,例3-7 数据交换程序1,; 数据段 numbyte 6,7,7,8,3,0,0,0 tabbyte 67783000 ; 代码段 mov ecx, lengthof num ; ECX变量NUM长度(数据个数) mov esi, offset num mov edi, offset tab again: mov al, esi ; AL获得变量NUM的一个数据 xchg al, edi ;交换,AL等于变量TAB对应字符,3.4 数据传送类指令,微机原理与接口技术,69,mov esi, al ; 保存回变量NUM原位置 call dispc ; 显示AL中的字符 add

36、 esi,1 ; 指向下一个数字 add edi,1 ; 指向下一个字符 loop again ; 循环处理 xchg eax, eax nop,67783000,运行结果,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

37、 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 堆栈操作指令,“先进后出FILO”存取的存储区域,只有一个数据出入口,即当前栈顶(不断变化) 两种基本操作 数据压进堆栈PUSH 数据弹出堆栈操作POP SS指向堆栈段的起始位置 ESP指定栈顶 数据进入堆栈,ESP逐渐减小

38、数据依次弹出、ESP逐渐增大,Word 1,Word 2,Word 3,Word 4,Word 5,Stack,PUSH,POP,3.4 数据传送类指令,微机原理与接口技术,73,1. 进栈指令PUSH,将ESP减小作为当前栈顶 esp-2(4)esp 将源操作数(立即数、通用寄存器和段寄存器内容或存储器操作数)传送到当前栈顶 srcss:esp,3.4 数据传送类指令,74,指令格式:push src,操 作:,以字或双字为单位操作 进栈双字量数据时,ESP减4 进栈字量数据时,ESP减2,微机原理与接口技术,75,执行前,12345678H,EAX,78,12H,堆栈段,SS,高地址,低地

39、址,执行进栈指令 push eax,3.4 数据传送类指令,ESP,ESPESP-4,56,34,12,EAXESP,2. 出栈指令 POP, 将栈顶数据传送到目的操作数(通用寄存器、存储单 元或段寄存器)SS:ESP dest 增加ESP作为当前栈顶 ESPESP4(2),3.4 数据传送类指令,微机原理与接口技术,76,指令格式:pop dest,操 作:,以字或双字为单位操作 出栈双字量数据时,ESP加4 出栈字量数据时,ESP加2,微机原理与接口技术,77,执行前,EAX,00,12H,堆栈段,SS,高地址,低地址,执行出栈指令 pop eax,3.4 数据传送类指令,ESP,ESPE

40、AX,20,76,67, ESP=ESP+4,例3-8 堆栈操作程序,; 数据段 ten = 10 dvar dword 67762000h,12345678h ; 代码段 mov eax,dvar+4 ; EAX12345678H push eax ; 将EAX内容压入堆栈 push dword ptr ten ; 将立即数以双字量压入堆栈 push dvar ; 变量DVAR第一个数据入栈 pop eax ; 栈顶数据弹出到EAX pop dvar+4 ; 栈顶数据弹出到DVAR4 mov ebx,dvar+4 ; EBX000000AH pop ecx ; 栈顶数据弹出到ECX call

41、 disprd,3.4 数据传送类指令,微机原理与接口技术,78,微机原理与接口技术,79,3. 堆栈的应用,堆栈不可或缺,被很多指令使用: 堆栈操作指令 子程序调用CALL和返回RET,中断调用INT和返回IRET等 内部异常、外部中断等也利用堆栈 堆栈可用来临时存放数据,以便随时恢复它们 常利用堆栈基址指针EBP,随机读写堆栈数据 mov ebp, esp ; EBPESP mov eax, ebp+8; EAXSS:EBP+8 mov ebp, eax; SS:EBPEAX,3.4 数据传送类指令,微机原理与接口技术,80,利用堆栈实现主、子程序间传递参数 堆栈还常用于子程序的寄存器保护

42、和恢复 注意入栈和出栈的数据要成对,要保持堆栈平衡,PUSH AX PUSH BX PUSH CX PUSH DX,POP DX POP CX POP BX POP AX,入栈顺序:,出栈顺序:,3.4 数据传送类指令,3.4.3 其他传送指令,针对特定需要设计的专用传送指令 换码指令 XLAT 标志传送指令 CLC STC CMC 地址传送指令 LEA LDS LES ,3.4 数据传送类指令,微机原理与接口技术,81,1. 换码指令 XLAT,指令功能:ALEBXAL 换码指令执行前: 在主存建立一个字节量表格,内含目的代码 表格首地址存放于EBX AL存放相对表格首地址的位移量 换码指令

43、执行后: 将AL寄存器的内容转换为目标代码,3.4 数据传送类指令,微机原理与接口技术,82,例3-9 换码显示程序1,;数据段 numbyte 6,7,7,8,3,0,0,0; 被转换数字 tabbyte 0123456789; 代码表 ;代码段 mov ecx,lengthof num mov esi,offset num mov ebx,offset tab; EBX指向代码表 again:mov al, esi; AL要转换的数字 xlat; 换码 call dispc; 显示 add esi,1; 指向下一个数字 loop again; 循环,3.4 数据传送类指令,微机原理与接口技

44、术,83,67783000,运行结果,2. 标志传送指令,直接操作标志寄存器 标志位操作指令:直接改变CF、DF、IF标志,3.4 数据传送类指令,微机原理与接口技术,84,3. 地址传送指令 LEA,地址传送指令获取存储器操作数的地址 lea r16/r32, mem ;r16/r32mem的有效地址EA(不需类型一致) LEA指令类似地址操作符OFFSET的作用 LEA指令在指令执行时计算出偏移地址 OFFSET操作符在汇编阶段取得变量的偏移地址 OFFSET无需在执行时计算、指令执行速度更快 LEA指令能获取汇编阶段无法确定的偏移地址,3.4 数据传送类指令,微机原理与接口技术,85,例

45、3-10 地址传送程序,; 数据段 dvar dword 41424344h ; 代码段 mov eax,dvar; EAX41424344H lea esi,dvar; ESI指向DVAR mov ebx,esi; EBX41424344H mov edi,offset dvar; EDI指向DVAR mov ecx,edi ; ECX41424344H lea edx,esi+edi*4+100h ; EDXESIEDI4100H call disprd,3.4 数据传送类指令,微机原理与接口技术,86,微机原理与接口技术,87,作 业,3.1 简答题(5,6) 3.2 判断题(4,5)

46、3.15 3.17 3.18,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,89,算术运算 对数据进行加减乘除 基本的数据处理方法 加减运算有“和”或“差”的结果外,还有进借位、溢出等状态标志,也是结果的一部分 注意算术运算类指令对标志的影响 掌握:加法和减法指令 熟悉:乘法和除法指令 理解:零位扩展和符号扩展,3.5 算术运算类指令,微机原理与接口技术,90,3.5.1 加法指令,ADD,ADC,INC,3.5 算术运算类指令,微机原理

47、与接口技术,91,1. 加法指令 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=,6FH,0,0,0,1,0,3.5 算术运算类指令,B36EH,0,0,1

48、,1,0,; EAX= , OF= , SF= , ZF= , PF= ,CF=,32FFB36EH,0,1,1,0,0,微机原理与接口技术,93,2. 带进位加法指令 ADC,操 作:dest+src+CFdest,指令格式:adc dest src,3.5 算术运算类指令,用于与ADD指令相结合实现多精度数的加法 先将两个操作数的低32位相加(用ADD指令) 再加高位部分、并将进位加到高位(用ADC指令),微机原理与接口技术,94,mov eax, dword ptr qvar1 ;取低32位 add eax, dword ptr qvar2 ;加低32位,设置CF mov edx, dw

49、ord ptr qvar1+4 ;取高32位 adc edx, dword ptr qvar2+4 ;加高32位,同时加CF,例3-11 64位数据相加程序,; 数据段 qvar1 qword 6778300082347856h qvar2 qword 6776200012348998h ; 代码段,3.5 算术运算类指令,微机原理与接口技术,95,3. 增量指令INC,操 作:reg/mem+1reg/mem,指令格式:inc reg/mem,用于对计数器和地址指针进行调整 不影响CF但影响其它状态标志位,inc ecx inc esi inc wvar inc dvarebx+edi,3.

50、5 算术运算类指令,微机原理与接口技术,96,3.5.2 减法指令,SUB,SBB,DEC,3.5 算术运算类指令,CMP,NEG,微机原理与接口技术,97,1. 减法指令 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,微机原理与接口技术,9

51、8,; AL= , OF= ,SF= ,ZF= ,PF= ,CF=,21H,0,0,0,1,0,3.5 算术运算类指令,3322H,0,0,0,0,1,; EAX= , OF= , SF= , ZF= , PF= ,CF=,EFFF3322H,0,1,0,1,1,微机原理与接口技术,99,2. 带借位减法指令 SBB,操 作:dest-src-CFdest,指令格式:sbb dest src,3.5 算术运算类指令,用于与SUB指令相结合实现多精度数的减法 先将两个操作数的低32位相减(用SUB指令) 再减高位部分、并从高位减去借位(用SBB指令),微机原理与接口技术,100,3. 减量指令

52、DEC,操 作:reg/mem-1reg/mem,指令格式:dec reg/mem,用于对计数器和地址指针进行调整 不影响CF但影响其它状态标志位,dec ecx dec esi dec wvar dec dvarebx+edi,3.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 ; 指向下一个字母 lo

53、op again ; 循环 mov eax,offset msg call dispmsg ; 显示,3.5 算术运算类指令,again:,微机原理与接口技术,102,3.5 算术运算类指令,4. 求补指令 NEG,操 作:0-destdest,指令格式:neg dest,影响CF、OF、PF、SF、ZF,dest: 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,P

54、F=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=0,3.5 算术运算类指令,微机原理与接口技术,104,3.5 算术运算类指令,5. 比较指令 CMP,操 作:dest-src,指令格式:cmp dest, src,结果不回送目的操作数 按照减法结果影响状态标志 根据标志状态获知两个操作数的大小关系 给条件转移等指令使用其形成的状态标志,微机原理与接口技术,105,根据标志位判断比较结果的步骤,destsrc,de

55、stsrc,dest=src,destsrc,destsrc, ZF=1?,Y,N,有符号数的比较,无符号数的比较,N, CF=1?,Y,N, SF=OF?,Y,3.5 算术运算类指令,算术运算指令还包括:,3.4 数据传送类指令,微机原理与接口技术,106,乘法指令,除法指令,零位扩展和符号位扩展指令,3.5.3 乘除法等指令,十进制调整指令(自学),微机原理与接口技术,107,1. 乘法指令,3.5 算术运算类指令,微机原理与接口技术,108,3.5 算术运算类指令,乘法指令对 CF/OF 的影响:,00 乘积的高一半为零 11 否则,MUL指令: CF,OF=,00 乘积的高一半是低一

56、半的符号扩展 11 否则,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,微机原理与接口技术,109,3.5 算术运算类指令,无符号除法指令DIV和有符号除法指令IDIV 除法指令可能产生除法溢出 对DIV指令,除数为0,或者在字节做除数时商超过8位,字做除数时商超过16位,或者双字做除数时商超过32位,则发生除法溢出 对IDIV指令,除数为0,或者在字节

57、除时商不在-128127范围内,在字除时商不在-3276832767范围内,或者在双字除时商不在-2312311范围内,则发生除法溢出 除法错溢出时将产生编号为0的内部中断,2. 除法指令,微机原理与接口技术,110,3.5 算术运算类指令,除法指令使状态标志没有定义,微机原理与接口技术,111,3.5 算术运算类指令,3. 零位扩展和符号扩展指令,零位扩展对应无符号数:MOVZX 前面加0实现位数扩展 例:80H:8位无符号数,零位扩展为16位:0080H 符号扩展对应有符号数:MOVSX指令 前面加符号位(最高位)实现位数扩展 例:64H:8位有符号数,符号扩展成16位:0064H FF0

58、0H:16位有符号数据,符号扩展成32位: FFFFFF00H,都表达真值:-256 真值-1:字节量补码:FFH,字量补码:FFFFH, 双字量补码:FFFFFFFFH,微机原理与接口技术,112,3.5 算术运算类指令,指令格式,微机原理与接口技术,113,作 业,3.1 简答题(7,8) 3.2 判断题(6,7) 3.19 3.20 3.21,主要内容,3.1 数据表示 3.2 常量表达 3.3 变量应用 3.4 数据传送类指令 3.5 算术运算类指令 3.6 位操作类指令 3.7 串操作类指令 3.8 IA-32指令系统,微机原理与接口技术,115,位操作指令可以对数据中的各个二进制位进行操作,包括:,逻辑运算指令,移位指令,循环移位指令,3.6 位操作指令,微机原理与接口技术,116,AND dest, src : dest srcdest OR dest, src : dest srcdest XOR dest, src : dest srcdest TEST dest, src : de

温馨提示

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

评论

0/150

提交评论