钱晓捷,微机原理与接口技术 ·第 4版 —— 基于 IA-32处理器和 32位汇编语言第 3 章数据处理
3.1 数据表示
3.2 常量表达
3.3 变量应用
3.4 数据传送类指令
3.5 算术运算类指令
3.6 位操作类指令
3.7 串操作类指令
3.8 IA-32指令系统微机原理与接口技术
·

4
版机械工业出版社
3.1 数据表示
数据 ( Data),计算机处理的对象
对应指令操作的对象,操作数 ( Oprand)
计算机中的数据要用二进制的 0和 1组合表示
进入计算机的任何信息都要转换成 0和 1数码
IA-32整数指令支持的基本数据类型
8,16,32,64位无符号整数
8,16,32,64位有符号整数
ASCII字符,字符串和 BCD码微机原理与接口技术
·

4
版机械工业出版社
3.1.1 数制
人习惯使用十进制计数
计算机使用二进制进行数据处理
十六进制数便于表达二进制数二进制数用后缀字母 B
十六进制数用后缀字母 H
微机原理与接口技术
·

4
版机械工业出版社
1,二进制
便于计算机存储及物理实现
特点:逢二进一,由 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
示意图微机原理与接口技术
·

4
版机械工业出版社
2,逻辑运算
事件的假和真可用数码 0和 1表示
事件之间的关系可以利用二进制表达
数字电路的低高电平用数码 0和 1表示
数字信号之间的关系可以利用二进制描述
数码 0和 1仅仅代表两种状态
它们的 运算是逻辑运算
例如,4位二进制数的逻辑运算:
逻辑与 AND,1101? 0011 = 0001
逻辑或 OR,1101? 0011 = 1111
逻辑非 NOT,? 1101 = 0010
逻辑异或 XOR,1101? 0011 = 1110
微机原理与接口技术
·

4
版机械工业出版社
3,十六进制
用于表达二进制数,相互转换简单
基数 16,逢 16进位,位权为 16k
16个数码,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
减法加法微机原理与接口技术
·

4
版机械工业出版社
4,数制之间的转换十进制 二进制 十六进制 BCD码 常用二进制位权
0 0000 0 0 2-3= 0.125
1 0001 1 1 2-2= 0.25
2 0010 2 2 2-1= 0.5
3 0011 3 3 20= 1
4 0100 4 4 21= 2
5 0101 5 5 22= 4
6 0110 6 6 23= 8
7 0111 7 7 24= 16
8 1000 8 8 25= 32
9 1001 9 9 26= 64
10 1010 A 27= 128
11 1011 B 28= 256
12 1100 C 29= 512
13 1101 D 210= 1024
14 1110 E 215= 32768
15 1111 F 216= 65536
微机原理与接口技术
·

4
版机械工业出版社二进制数或十六进制数转换为十进制数
方法:按权展开
二进制数转换为十进制数
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.125
微机原理与接口技术
·

4
版机械工业出版社十进制整数转换为二或十六进制数
整数 部分转换:用除法十进制数整数部分不断除以基数 2或 16,
并记下余数,直到商为 0为止由最后一个余数起逆向取各个余数,则为转换成的二进制和十六进制数
126= 01111110B
126= 7EH
示意图微机原理与接口技术
·

4
版机械工业出版社十进制小数转换为二或十六进制数
小数 部分转换:用乘法分别乘以各自的基数,记录整数部分,直到小数部分为 0为止
0.8125= 0.1101B
0.8125= 0.DH
小数转换会发生总是无法乘到为 0的情况可选取一定位数 ( 精度 )
将产生无法避免的转换误差示意图微机原理与接口技术
·

4
版机械工业出版社二进制和十六进制数的相互转换
二进制和十六进制数之间具有对应关系以小数点为基准整数从左向右,小数从右向左每 4个二进制位对应一个十六进制位
00111010B= 3AH
F2H= 11110010B
微机原理与接口技术
·

4
版机械工业出版社
3.1.2 数值的编码
编码,用文字,符号或者数码来表示某种信息
( 数值,语言,操作指令,状态等 ) 的过程
二进制编码,组合 0和 1数码
机器数,计算机中用 0和 1数码组合表达的数值
真值,现实中真实的数值
数值的两种编码方式定点格式 ( 第 3章 )
浮点格式 ( 第 9章 )
微机原理与接口技术
·

4
版机械工业出版社
1,定点整数
定点格式:固定小数点的位置表达数值
定点整数,小数点固定在机器数的最右侧
定点小数:小数点固定在机器数的最左侧
无符号整数 ( 无符号数 )
只表达 0和正整数的定点整数
N位无符号整数表达范围,0~ 2N
有符号整数 ( 有符号数,带符号数 )
表达负整数,0和正整数的定点整数最高位表达数值正负符号位用 0表示正数,1表示负数示意图微机原理与接口技术
·

4
版机械工业出版社
2,补码
有符号整数在计算机中默认采用补码最高位表示符号:正数用 0,负数用 1
正数补码:直接表示数值大小 ( 同无符号数 )
负数补码:将对应正数补码取反加 1
[105]补码 = 01101001B
[-105]补码 = [01101001B]取反+ 1
= 10010110B+ 1= 10010111B
8位 二进制补码的数值范围,-128~ +127
16位 二进制补码的数值范围,-215~ +215-1
32位 二进制补码的数值范围,-231~ +231-1
N位 二进制补码的数值范围,-2N-1~ +2N-1-1
微机原理与接口技术
·

4
版机械工业出版社负数求补
负数真值,取反加 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 = 11111000
0 = 00000000
-(8= 00001000)
-8 = 11111000
微机原理与接口技术
·

4
版机械工业出版社
3,补码运算
利用无符号数加法结合补码表达,实现无符号数加法无符号数减法有符号数加法有符号数减法
无符号数加减运算,需要利用进位或借位
有符号数加减运算,注意避免出现溢出
[X]补码 + [Y]补码 = [X+ Y]补码
[X]补码 - [Y]补码 = [X]补码 + [- Y]补码 = [X- Y]补码微机原理与接口技术
·

4
版机械工业出版社
4,原码和反码
正数的原码,反码和无符号数一样
求负数的原码,反码和补码首先计算其对应正数的编码然后取反符号位 ( 设置为 1) 成为原码再取反其他位得到反码最后加 1就是补码
真值,32,机器数,00100000B= 20H
真值,- 32,机器数:
[- 32]原码 = 10100000B= A0H
[- 32]反码 = 11011111B= DFH
[20H]补码 = 11100000B= E0H
微机原理与接口技术
·

4
版机械工业出版社
3.1.3 字符的编码
在计算机中,各种字符需要用若干位的二进制码的组合表示,即字符的二进制编码
由于字节为计算机的基本存储单位,所以常以 8个二进制位为单位表达字符微机原理与接口技术
·

4
版机械工业出版社
1,BCD
二进制编码的十进制数一个十进制数位用 4位二进制编码来表示
8421 BCD码:低 10个 4位二进制编码表示 0~ 9
压缩 BCD码:一个字节表达两位 BCD码非压缩 BCD码:一个字节表达一位 BCD码 ( 低 4位表达数值,高 4位常设置为 0)
BCD码很直观
BCD码,0100 1001 0111 1000.0001 0100 1001
十进制真值,4978.149
BCD码便于输入输出,表达数值准确微机原理与接口技术
·

4
版机械工业出版社
2,ASCII(美国标准信息交换码)
标准 ASCII码用 7位二进制编码,有 128个
不可显示的控制字符:前 32个和最后一个回车 CR,0DH 换行 LF,0AH 响铃 BEL,07H
可显示和打印的字符,20H后的 94个编码数码 0~ 9,30H~ 39H
大写字母 A~ Z,41H~ 5AH
小写字母 a~ z,61H~ 7AH
空格,20H
扩展 ASCII码:最高 D7位为 1,表达制表符号微机原理与接口技术
·

4
版机械工业出版社
3,Unicode(统一码)
8位 ASCII码表达英文字符
16位国标码表达汉字字符汉字机内码:国标码在计算机中使用的编码
国际信息交换码 Unicode
16位编码对世界上所有语言的大多数字符进行编码提供扩展能力
Unicode兼容 ASCII
Unicode给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论是什么语言微机原理与接口技术
·

4
版机械工业出版社
3.2 常量表达
常数十,十六和二进制形式表达的数值以后缀字母区分,十进制数可以不加以字母 A~ F开头的十六进制常数,要加前导 0
字符和字符串英文缩略号括起来的单个字符或多个字符数值是每个字符对应的 ASCII码值
符号常量使用标识符表达一个数值符号定义伪指令:等价 EQU,等号=
数值表达式用运算符连接各种常量构成的算式算术运算符:+ ( 加 ) - ( 减 ) *( 乘 ) /( 除 )
常量具有确定数值微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-1〕 数据表达程序- 1
00000000 64 64 64 64 64
const1 byte 100,100d,01100100b,64h,'d'
00000005 01 7F 80 80 FF FF
const2 byte 1,+127,128,-128,255,-1
0000000B 69 97 20 E0 32 CE
const3 byte 105,-105,32,-32,32h,-32h
00000011 30 31 32 33 34 35
36 37 38 39 61 62
63 78 79 7A 41 42
43 58 59 5A
const4 byte '0123456789','abcxyz','ABCXYZ'
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-1〕 数据表达程序- 2
00000027 0D 0A 24
crlf byte 0dh,0ah,0
= 0000000A
minint= 10
= 000000FF
maxintequ 0ffh
0000002A 0A 0F FA F5
const5 byte minint,minint+5
byte maxint-5,maxint-minint
0000002E 10 56 15 EB
const6 byte 4*4,34h+34,67h-52h,52h-67h
微机原理与接口技术
·

4
版机械工业出版社
3.3 变量应用
变量 ( Variable)
程序运行中随之发生变化的结果保存在可读可写的主存空间
实质是主存单元的数据,因而可以改变
变量需要事先定义才能使用
变量具有属性方便应用变量表达主存数据,即存储器操作数微机原理与接口技术
·

4
版机械工业出版社
3.3.1 变量定义
申请存储空间,还可以进行存储单元初始化变量名 变量定义伪指令 初值表
变量名是用户标识符,表示首元素逻辑地址
变量定义伪指令有
BYTE,WORD,DWORD,FWORD,QWORD,TBYTE
初值表是用逗号分隔的参数各种形式的常量
,?,表示初值不确定,即未赋初值复制操作符 DUP
重复次数 DUP(重复参数 )
微机原理与接口技术
·

4
版机械工业出版社
1,变量定义伪指令助记符,BYTE
变量类型,字节分配一个或多个字节单元;每个数据是字节量,也可以是字符串常量字节量表示 8位无符号数或有符号数,
字符的 ASCII码值助记符,WORD
变量类型,字分配一个或多个字单元;每个数据是字量,16位数据字量表示 16位无符号数或有符号数,16
位段选择器,16位偏移地址助记符,DWORD
变量类型,双字分配一个或多个双字单元;每个数据是双字量,32位数据双字量表示 32位无符号数或有符号数,
32位段基地址,32位偏移地址助记符,QWORD
变量类型,4个字分配一个或多个 8字节单元; 8字节量表示 64位数据微机原理与接口技术
·

4
版机械工业出版社
2,字节量数据
BYTE定义 8位,字节量变量数据
可以表达无符号整数 0~ 255
补码表示的有符号整数,-128~ +127
一个字符 ( ASCII码值 )
压缩 BCD码,0~ 99
非压缩 BCD码,0~ 9

字符串定义使用字节变量定义 BYTE
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-2〕 字节变量程序
=0000000A minint = 10
00000000 00 80 FF 80 00 7F
bvar1 byte 0,128,255,-128,0,+127
00000006 01 FF 26 DA 38 C8
bvar2 byte 1,-1,38,-38,38h,-38h
0000000C 00
bvar3 byte?
0000000D 00000005 [24]
bvar4 byte 5 dup ('$')
00000012 0000000A [00] 0000000A [0A 00]
bvar5 byte minint dup(0),minint dup(minint,?)
00000030 00000002 [02 03 00000002 [04]]
byte 2 dup(2,3,2 dup(4))
微机原理与接口技术
·

4
版机械工业出版社
3,字量数据
WORD定义 16位,字量变量数据
可以表达
16位无符号和有符号整数
16位段选择器,16位偏移地址
16位数据包含高低两个字节,占用 2个连续的字节存储单元
小端方式 ( Little Endian)
低字节数据存放在低地址存储单元高字节数据存放在高地址存储单元微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-3〕 字变量程序
= 0000000A minint= 10
00000000 0000 8000 FFFF 8000 0000 7FFF
wvar1 word 0,32768,65535,-32768,0,+32767
0000000C 0001 FFFF 0026 FFDA 0038 FFC8
wvar2 word 1,-1,38,-38,38h,-38h
00000018 0000 wvar3 word?
0000001A 2010 1020
wvar4 word 2010h,1020h
0000001E 00000005 [000A 0000]
word 5 dup(minint,?)
00000032 3139 3832
wvar6 word 3139h,3832h
00000036 39 31 32 38
bvar6 byte 39h,31h,32h,38h
0000003A 00 byte 0
91289128
运行结果微机原理与接口技术
·

4
版机械工业出版社
4,双字量数据
DWORD定义 32位,双字量变量数据
可以表达
32位无符号和有符号整数
32位偏移地址,线性地址或段基地址
32位数据包含 4个字节,以,高对高,低对低,原则占用 4个连续字节空间示意图微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-4〕 双字变量程序- 1
=0000000A minint= 10
00000000 00000000 80000000 FFFFFFFF
80000000 00000000 7FFFFFFF
dvar1 dword 0,80000000h,0ffffffffh,\
-80000000h,0,7fffffffh
00000018 00000001 FFFFFFFF 00000026
FFFFFFDA 00000038 FFFFFFC8
dvar2 dword 1,-1,38,-38,38h,-38h
00000030 00000000
dvar3 dword?
00000034 00002010 00001020
dword 2010h,1020h
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-4〕 双字变量程序- 2
0000003C 0000000A [0000000A 00000000]
dvar5 dword minint dup(minint,?)
0000008C 38323139
dvar6 dword 38323139h
00000090 39 31 32 38
bvar6 byte 39h,31h,32h,38h
00000094 00
byte 0
91289128
运行结果微机原理与接口技术
·

4
版机械工业出版社
5,变量定位
变量定义的存储空间按照书写的先后顺序一个接着一个分配
,ORG 参数,控制存放的偏移地址
org 100h ;从偏移地址 100H处安排
指令代码也由汇编程序按照语句的书写顺序安排存储空间
定位伪指令也可以用于控制代码的偏移地址微机原理与接口技术
·

4
版机械工业出版社
3.3.2 变量属性
变量定义分配存储空间赋初值创建变量名
变量名具有两类属性:
⑴ 地址属性,首个变量所在存储单元的逻辑地址,
含有 段基地址 和 偏移地址
⑵ 类型属性,变量定义的数据单位字节量 BYTE 字量 WORD 双字量 DWORD
3字量 FWORD 4字量 QWORD 10字节量 TBYTE
微机原理与接口技术
·

4
版机械工业出版社
⒈ 地址操作符
地址操作符用于获取变量名的地址属性
[ ] 括起的表达式作为存储器地址指针
$ 返回当前偏移地址
OFFSET 变量名 返回变量名所在段的偏移地址
SEG 变量名 返回段基地址 ( 实地址存储模型 )
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-5〕 变量地址属性程序- 1; 数据段
00000000 12 34
bvar byte 12h,34h
org $+10
0000000C 0001 0002 0003 0004 0005 0006
0007 0008 0009 000A
array word 1,2,3,4,5,6,7,8,9,10
00000020 5678
wvar word 5678h
=00000016 arr_size = $-array
=0000000B arr_len = arr_size/2
00000022 9ABCDEF0
dvar dword 9abcdef0h
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-5〕 变量地址属性程序- 2; 代码段
00000000 A0 00000000 R
mov al,bvar
00000005 8A 25 00000001 R
mov ah,bvar+1
0000000B 66| 8B 1D 00000022 R
mov bx,wvar[2]
00000012 B9 0000000B
mov ecx,arr_len
00000017 BA 00000017 R
mov edx,$
0000001C BE 00000022 R
mov esi,offset dvar
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-5〕 变量地址属性程序- 3
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
运行结果微机原理与接口技术
·

4
版机械工业出版社
⒉ 类型操作符
类型操作符使用变量名的类型属性类型名 PTR 变量名 将变量名按照指定的类型使用
TYPE 变量名 返回占用字节空间的字量数值
LENGTHOF 变量名 返回整个变量的数据项数
SIZEOF 变量名 返回整个变量占用的字节数微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-6〕 变量类型属性程序- 1; 代码段
00000000 A1 0000000C R
mov eax,dword ptr array; 获得数据
00000005 BB 00000001
mov ebx,type bvar ; 获得字节类型值
0000000A B9 00000002
mov ecx,type wvar ; 获得字类型值
0000000F BA 00000004
mov edx,type dvar ; 获得双字类型值微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-6〕 变量类型属性程序- 2
00000014 BE 0000000A
mov esi,lengthof array; 获得数据个数
00000019 BF 00000014
mov edi,sizeof array; 获得字节长度
0000001E BD 00000016
mov ebp,arr_size ; 获得字节长度
00000023 E8 00000000 E
call disprd
EAX=00020001,EBX=00000001,ECX=00000002,EDX=00000004
ESI=0000000A,EDI=00000014,EBP=00000016,ESP=0012FFC4
运行结果微机原理与接口技术
·

4
版机械工业出版社
3.4 数据传送类指令
数据传送把数据从一个位置传送到另一个位置计算机中最基本的操作程序设计中最常使用的指令
除标志寄存器传送指令外,均 不影响标志 位全面而准确地理解每条指令的功能和应用是编写汇编语言程序的关键也是理解处理器如何进行数据处理的核心微机原理与接口技术
·

4
版机械工业出版社学习指令的注意事项
指令的功能 —— 该指令能够实现何种操作 。
通常指令助记符就是指令功能的英文单词或其缩写形式
指令支持的寻址方式 —— 该指令中的操作数可以采用何种寻址方式
指令对标志的影响 —— 该指令执行后是否对各个标志位有影响,以及如何影响
其他方面 —— 该指令其他需要特别注意的地方,如指令执行时的约定设置,必须预置的参数,隐含使用的寄存器等微机原理与接口技术
·

4
版机械工业出版社
3.4.1 通用传送指令
提供方便灵活的通用传送操作
主要有传送 MOV和交换 XCHG指令源操作数 src
目的操作数 dest30H
30H
被传送的数据
MOV指令的功能微机原理与接口技术
·

4
版机械工业出版社
1,传送指令 MOV
把一个字节,字或双字的操作数从源位置传送至目的位置
双操作数必须类型一致
操作数必须有明确的类型
双操作数不允许都是存储单元
操作专用寄存器的指令有限并非任意传送 !
无法翻译就出错 !
微机原理与接口技术
·

4
版机械工业出版社
2,交换指令 XCHG
将源操作数和目的操作数内容交换通用寄存器与通用寄存器之间通用寄存器或存储器之间
空操作指令 NOP,XCHG EAX,EAX
处理器执行空操作该指令,需要化费时间,在主存中也要占用一个字节空间实现短时间延时临时占用代码空间 xchg eax,ebx
xchg edx,var
xchg al,[edi]
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-7〕 数据交换程序- 1; 数据段
00000000 06 07 07 08 03 00 00 00
num byte 6,7,7,8,3,0,0,0
00000008 36 37 37 38 33 30 30 30
tab byte '67783000’; 代码段
00000000 B9 00000008
mov ecx,lengthof num; ECX=变量 NUM长度 ( 字节个数 )
00000005 BE 00000000 R
mov esi,offset num
0000000A BF 00000008 R
mov edi,offset tab
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-7〕 数据交换程序- 2
0000000F 8A 06
again,mov al,[esi] ; AL获得变量 NUM的一个数字
00000011 86 07
xchg al,[edi]; 交换,AL等于变量 TAB对应字符
00000013 88 06
mov [esi],al ; 保存回变量 NUM原位置
00000015 E8 00000000 E
call dispc ; 显示 AL中的字符
0000001A 83 C6 01
add esi,1 ; 指向下一个数字
0000001D 83 C7 01
add edi,1 ; 指向下一个字符
00000020 E2 ED
loop again ; 循环处理寄存器间接寻址
67783000
运行结果微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-7〕 数据交换程序- 3
mov ecx,lengthof num; ECX=变量 NUM长度
mov esi,0; ESI= 0,表示数据在变量中的位移量
again,mov al,num[esi]; AL获得变量 NUM的一个数字
xchg al,tab[esi]; 交换,AL等于变量 TAB对应字符
mov num[esi],al ; 保存回变量 NUM位置
call dispc ; 显示 AL中的字符
add esi,1 ; 指向下一个数据
loop again ; 循环寄存器相对寻址
67783000
运行结果微机原理与接口技术
·

4
版机械工业出版社
3.4.2 堆栈操作指令
,先进后出 FILO” 存取的存储区域,只有一个数据出入口,即当前栈顶 ( 不断变化 )
两种基本操作数据压进堆栈 PUSH
数据弹出堆栈操作 POP
SS指向堆栈段的起始位置
ESP指定栈顶数据进入堆栈,ESP逐渐减小数据依次弹出,ESP逐渐增大
Word 1
Word 2
Word 3
Word 4
Word 5
Stack
PUSH
POP
示意图微机原理与接口技术
·

4
版机械工业出版社
1,进栈指令 PUSH
push src
① ESP= ESP- 4( 2) ② SS:[ESP]= src
先将 ESP减小作为当前栈顶
后将源操作数 (立即数,通用寄存器和段寄存器内容或存储器操作数 )传送到当前栈顶
以字或双字为单位操作进栈双字量数据时,ESP减 4
进栈字量数据时,ESP减 2
push eax
push dword ptr [ebx]
示意图微机原理与接口技术
·

4
版机械工业出版社
2,出栈指令 POP
pop dest
① dest= SS:[ESP] ② ESP= ESP+ 4( 2)
先将栈顶数据传送到目的操作数 ( 通用寄存器,存储单元或段寄存器 )
后 ESP增加作为当前栈顶
以字或双字为单位操作出栈双字量数据时,ESP加 4
出栈字量数据时,ESP加 2
示意图
pop eax
pop dword ptr [ebx]
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-8〕 堆栈操作程序; 数据段
ten = 10
dvar dword 67762000h,12345678h; 代码段
mov eax,dvar+4; EAX= 12345678H
push eax ; 将 EAX内容压入堆栈
push dword ptr ten; 将立即数以双字量压入堆栈
push dvar ; 变量 DVAR第一个数据入堆
pop eax ; 栈顶数据弹出到 EAX
pop dvar+4 ; 栈顶数据弹出到 DVAR+ 4
mov ebx,dvar+4; EBX= 000000AH
pop ecx ; 栈顶数据弹出到 ECX
call disprd
微机原理与接口技术
·

4
版机械工业出版社
3,堆栈的应用
堆栈不可或缺,被 很多指令使用,
堆栈操作指令子程序调用 CALL和返回 RET,中断调用 INT和返回 IRET等内部异常,外部中断等也利用堆栈
堆栈可用来 临时存放数据,以便随时恢复它们
常利用堆栈基址指针 EBP,随机读写堆栈数据
mov ebp,esp ; EBP= ESP
mov eax,[ebp+8] ; EAX←SS,[EBP+8]
mov [ebp],eax ; SS:[EBP]←EAX
利用堆栈实现主,子程序间 传递参数
堆栈还常用于子程序的 寄存器保护 和恢复
注意入栈和出栈的数据要成对,要保持堆栈平衡微机原理与接口技术
·

4
版机械工业出版社
3.4.3 其他传送指令
针对特定需要设计的专用传送指令换码指令标志传送指令地址传送指令

PUSHAD POPAD PUSHFD POPFD
XLAT CLC STC CMC
LEA LDS LES
微机原理与接口技术
·

4
版机械工业出版社
1,换码指令
XLAT指令功能,AL←[EBX + AL]
将 (E)BX指定的缓冲区中
AL指定的位移处的一个字节数据取出赋给 AL
换码指令执行前:
在主存建立一个字节量表格,内含要目的代码表格首地址存放于 EBX
AL存放相对表格首地址的位移量
换码指令执行后:
将 AL寄存器的内容转换为目标代码
xlat
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-9〕 换码显示程序- 1;数据段
num byte 6,7,7,8,3,0,0,0 ; 被转换数字
tab byte '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 ; 循环使用 XLAT指令微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-9〕 换码显示程序- 2;代码段
mov ecx,lengthof num
mov esi,offset num
mov ebx,offset tab ; EBX指向代码表
again,mov eax,0 ; EAX= 0
mov al,[esi] ; AL=要转换的数字
add eax,ebx; EAX= EAX+ EBX,指向对应的字符
mov al,[eax] ; 换码
call dispc ; 显示
add esi,1 ; 指向下一个数字
loop again ; 循环不使用 XLAT指令微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-9〕 换码显示程序- 3;代码段
mov ecx,lengthof num
mov esi,offset num
again,mov eax,0 ; EAX= 0
mov al,[esi] ; AL=要转换的数字
mov al,tab[eax] ; 换码
call dispc ; 显示
add esi,1 ; 指向下一个数字
loop again ; 循环寄存器相对寻址
67783000
运行结果微机原理与接口技术
·

4
版机械工业出版社
2,标志传送指令
直接操作标志寄存器
标志位操作指令:直接改变 CF,DF,IF标志指令 功能
CLC 复位进位标志,CF←0
STC 置位进位标志,CF←1
CMC 求反进位标志:原为 0变为 1,原为 1变为 0
CLD 复位方向标志,DF←0,串操作后地址增大
STD 置位方向标志,DF←1,串操作后地址减小
CLI 复位中断标志,IF←0,禁止可屏蔽中断
STI 置位中断标志,IF←1,允许可屏蔽中断微机原理与接口技术
·

4
版机械工业出版社
3,地址传送指令
地址传送指令获取存储器操作数的地址
LEA r16/r32,mem;r16/r32←mem 的有效地址 EA( 不需类型一致 )
LEA指令类似的地址操作符 OFFSET的作用
LEA指令在指令执行时计算出偏移地址
OFFSET操作符在汇编阶段取得变量的偏移地址
OFFSET无需在执行时计算,指令执行速度更快
LEA指令能获取汇编阶段无法确定的偏移地址
lea esi,var
mov edi,offset var
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-10〕 地址传送程序; 数据段
dvar dword 41424344h; 代码段
mov eax,dvar ; EAX= 41424344H
lea esi,dvar ; ESI指向 DVAR
mov ebx,[esi] ; EBX= 41424344H
mov edi,offset dvar; EDI指向 DVAR
mov ecx,[edi] ; ECX= 41424344H
lea edx,[esi+edi*4+100h]; EDX= ESI+ EDI× 4+ 100H
call disprd
微机原理与接口技术
·

4
版机械工业出版社
3.5 算术运算类指令
算术运算对数据进行加减乘除基本的数据处理方法加减运算有,和,或,差,的结果外,还有进借位,溢出等状态标志,也是结果的一部分
注意算术运算类指令 对标志的影响掌握,加法和减法指令熟悉,乘法和除法指令理解,零位扩展和符号扩展微机原理与接口技术
·

4
版机械工业出版社
3.5.1 加法指令
加法指令 ADD
带进位加法指令 ADC
增量指令 INC
除 INC不影响进位标志 CF外其他指令按定义影响全部状态标志位按照运算结果相应设置各个状态标志为 0或为 1
数据传送类指令 不影响 ( =不改变 ) 状态标志加法和减法指令 根据结果按定义改变 状态标志微机原理与接口技术
·

4
版机械工业出版社
1,加法指令 ADD
目的操作数加上源操作数,和送到目的操作数
ADD dest,src ;加法,dest←dest + src
寄存器与立即数,寄存器,存储单元的加法存储单元与立即数,寄存器的加法
按照定义影响 6个状态标志位
mov eax,0aaff7348h ;EAX= AAFF7348H
add al,27h;EAX= AAFF736FH,OF= 0,SF= 0,ZF= 0,PF= 1,CF= 0
add ax,3fffh;EAX= AAFFB36EH,OF= 1,SF= 1,ZF= 0,PF= 0,CF= 0
add eax,88000000h;EAX= 32FFB36EH,OF= 1,SF= 0,ZF= 0,PF= 0,CF= 1
微机原理与接口技术
·

4
版机械工业出版社
2,带进位加法指令 ADC
两个操作数相加,再加 CF,结果送目的操作数
按照定义影响 6个状态标志位
ADC dest,src ;dest←dest + src+ CF
用于与 ADD指令相结合实现多精度数的加法先将两个操作数的低 32位相加 ( 用 ADD指令 )
再加高位部分,并将进位加到高位 ( 用 ADC指令 )
〔 例 3-11〕 64位数据相加程序
mov eax,dword ptr qvar1 ;取低 32位
add eax,dword ptr qvar2 ;加低 32位,设置 CF
mov edx,dword ptr qvar1+4;取高 32位
adc edx,dword ptr qvar2+4;加高 32位,同时加 CF
微机原理与接口技术
·

4
版机械工业出版社
3,增量指令 INC
只有一个操作数:寄存器或存储单元
对操作数加 1( 增量 ) 再将结果返回原处
INC reg/mem ;加 1,reg/mem←reg/mem + 1
用于计数器和地址指针的调整
不影响进位 CF标志,影响其他状态标志位
例如
inc ecx
inc esi
inc wvar
inc dvar[ebx+edi]
微机原理与接口技术
·

4
版机械工业出版社
3.5.2 减法指令
减法指令 SUB
带借位减法指令 SBB
减量指令 DEC
求补指令 NEG
比较指令 CMP
除 DEC不影响 CF标志外其他按定义影响全部状态标志位数据传送类指令 不影响 ( =不改变 ) 状态标志加法和减法指令 根据结果按定义改变 状态标志微机原理与接口技术
·

4
版机械工业出版社
1,减法指令 SUB
目的操作数减去源操作数,差送到目的操作数
SUB dest,src ;减法,dest←dest - src
寄存器与立即数,寄存器,存储单元的减法存储单元与立即数,寄存器的减法
按照定义影响 6个状态标志位
mov eax,0aaff7348h ;EAX= AAFF7348H
sub al,27h;EAX= AAFF7321H,OF= 0,SF= 0,ZF= 0,PF= 1,CF= 0
sub ax,3fffh;EAX= AAFF3322H,OF= 0,SF= 0,ZF= 0,PF= 1,CF= 0
sub eax,0bb000000h;EAX= EFFF3322H,OF= 0,SF= 1,ZF= 0,PF= 1,CF= 1
微机原理与接口技术
·

4
版机械工业出版社
2,带借位减法指令 SBB
目的操作数减去源操作数,再减 CF,结果送目的操作数
按照定义影响 6个状态标志位
SBB dest,src ;dest←dest - src- CF
用于与 SUB指令相结合实现多精度数的减法先将两个操作数的低 32位相减 ( 用 SUB指令 )
然后减高位部分,并减去借位 ( 用 SBB指令 )
微机原理与接口技术
·

4
版机械工业出版社
3,减量指令 DEC
对操作数减 1( 减量 ) 再将结果返回原处
DEC reg/mem ;减 1,reg/mem←reg/mem - 1
用于计数器和地址指针的调整
不影响进位 CF标志,影响其他状态标志位
例如
dec ecx
dec esi
dec wvar
dec dvar[ebx+edi]
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-12〕 大小写字母转换程序; 数据段
msg byte 'welcome',0; 代码段
mov ecx,(lengthof msg)-1; ECX等于字符串长度
mov ebx,0 ; EBX= 0指向头一个字母
again,sub msg[ebx],'a'-'A'; 小写字母减 20H转换为大写
inc ebx ; 指向下一个字母
loop again ; 循环
mov eax,offset msg
call dispmsg ; 显示大写=小写- 20H
小写=大写+ 20H
微机原理与接口技术
·

4
版机械工业出版社
4,求补指令 NEG
对操作数执行求补运算,即用零减去操作数
NEG reg/mem ;reg/mem← 0- reg/mem
对标志的影响与用零作减法的 SUB指令一样
可用于求补码或由补码求其绝对值
mov ax,0ff64h
neg al ;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1
sub al,9dh;AX=FFFFH,OF=0,SF=1,ZF=0,PF=1,CF=1
neg ax ;AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1
dec al ;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1
neg ax ;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=0
微机原理与接口技术
·

4
版机械工业出版社
5,比较指令 CMP
将目的操作数减去源操作数
差值不回送目的操作数
按照减法结果影响状态标志
CMP dest,src ;做减法运算,dest- src
根据标志状态获知两个操作数的大小关系给条件转移等指令使用其形成的状态标志
SUB与 CMP?
ADD与 ADC? INC与 DEC?SUB与 SBB?
ADD与 SUB? ADC与 SBB? DEC与 NEG?
微机原理与接口技术
·

4
版机械工业出版社
3.5.3 乘法除法等指令
算术运算类指令还有乘法除法指令零位扩展和符号扩展指令十进制调整指令

MUL IMUL DIV IDIV
MOVZX MOVSX CBW CWD CWDE CDQ
DAA DAS AAA AAS AAM AAD

微机原理与接口技术
·

4
版机械工业出版社
1,乘法指令
无符号数乘法指令 MUL
有符号数乘法指令 IMUL
计算二进制数乘法,A5H× 64H
用 MUL指令作无符号数乘法:
4074H( = 16500) = A5H( = 165) × 64H( = 100)
用 IMUL指令作无符号数乘法:
DC74H( = -9100) = A5H( = -91) × 64H( = 100)
加减指令只进行无符号数运算利用 CF和 OF区别无符号数和有符号数微机原理与接口技术
·

4
版机械工业出版社乘法指令指令类型 操作数组合及功能 举例无符号数乘法
MUL src AX= AL× r8/m8DX.AX= AX× r16/m16
EDX.EAX= EAX× r32/m32
mul bl
imul bx
mul dvar有符号数乘法IMUL src
双操作数乘法
IMUL dest,src
r16= r16× r16/m16/i8/i16
r32= r32× r32/m32/i8/i32
imul eax,10
imul ebx,ecx
三操作数乘法
IMUL dest,src,imm
r16= r16/m16× i8/i16
r32= r32/m32× i8/i32
imul ax,bx,-2
imul eax,dword ptr [esi+8],5
微机原理与接口技术
·

4
版机械工业出版社
2,除法指令
无符号除法指令 DIV和有符号除法指令 IDIV
除法指令可能产生除法溢出对 DIV指令,除数为 0,或者在字节除时商超过 8
位,在字除时商超过 16位,或者双字除时超过
32位,则发生除法溢出对 IDIV指令,除数为 0,或者在字节除时商不在
- 128~ 127范围内,在字除时商不在- 32768~
32767范围内,或者在双字除时商不在- 231~
231- 1范围内,则发生除法溢出
除法错溢出,将产生编号为 0的内部中断微机原理与接口技术
·

4
版机械工业出版社除法指令指令 操作数组合及功能 举例无符号除法:
DIV src
AL←AX ÷ r8/m8的商
AH←AX ÷ r8/m8的余数
AX←DX,AX÷ r16/m16的商
DX←DX,AX÷ r16/m16的余数
EAX←EDX,EAX÷ r16/m16的商
EDX←EDX,EAX÷ r16/m16的余数
div bl
idiv bx
div ebx
有符号除法:
IDIV src
微机原理与接口技术
·

4
版机械工业出版社
3,零位扩展和符号扩展指令
零位扩展对应无符号数,MOVZX指令前面加 0实现位数扩展
80H,8位无符号数,零位扩展为 16位,0080H
符号扩展对应有符号数,MOVSX指令前面加符号位 ( 最高位 ) 实现位数扩展
64H,8位有符号数,符号扩展成 16位,0064H
FF00H,16位有符号数据,符号扩展成 32位:
FFFFFF00H,都表达真值,-256
真值 -1,字节量补码,FFH,字量补码,FFFFH,
双字量补码,FFFFFFFFH
位数加长,大小没变微机原理与接口技术
·

4
版机械工业出版社零位扩展和符号扩展指令指令类型 指令 举例零位扩展 MOVZX r16,r8/m8 movzx di,bvarmovzx eax,ax
MOVZX r32,r8/m8/r16/m16
符号扩展 MOVSX r16,r8/m8 movsx ax,almovsx edx,bx
MOVSX r32,r8/m8/r16/m16
微机原理与接口技术
·

4
版机械工业出版社
4,十进制调整指令
算术运算指令实现二进制数的加减乘除
十进制 BCD码运算:对二进制运算结果调整
压缩 BCD码,4个二进制位表示一个十进制位一个字节表示两个十进制位,00~ 99
压缩 BCD码调整指令:加法 DAA和减法 DAS
非压缩 BCD码,8个二进制位表示一个十进制位一个字节表示一个十进制位 0~ 9
ASCII码可以认为是非压缩 BCD码非压缩 BCD码调整指令:
加法 AAA,减法 AAS,乘法 AAM和除法 AAD
微机原理与接口技术
·

4
版机械工业出版社
3.6 位操作类指令
计算机中最基本的数据单位是二进制位
针对二进制位进行操作,实现位控制的指令逻辑运算指令移位指令

进行一位或若干位处理,采用位操作类指令微机原理与接口技术
·

4
版机械工业出版社
3.6.1 逻辑运算指令
逻辑与指令 AND
逻辑或指令 OR
逻辑非指令 NOT
逻辑异或指令 XOR
测试指令 TEST
除 NOT指令不影响标志外其他逻辑指令使 OF= CF= 0
根据结果按定义影响 ZF,SF和 PF
微机原理与接口技术
·

4
版机械工业出版社
1,逻辑与指令 AND
逻辑与 (逻辑乘 )运算规则:
两位都是逻辑 1,则结果是 1;否则,结果是 0
逻辑与指令 AND:
按位进行逻辑与,结果返回目的操作数
AND dest,src ;逻辑与,dest←dest? src
设置 CF= OF= 0
影响 SF,ZF和 PF TBA
TAB010
111
001
000
T= A·B
真值表与门电路逻辑表达式
01000101
00110001
00000001
微机原理与接口技术
·

4
版机械工业出版社
2,逻辑或指令 OR
逻辑或 (逻辑加 )运算规则:
两位都是逻辑 0,则结果是 0;否则,结果是 1
逻辑或指令 OR:
按位进行逻辑或,结果返回目的操作数
OR dest,src ;逻辑或,dest←dest? src
设置 CF= OF= 0
影响 SF,ZF和 PF TBA
TAB
110
111
101
000
T= A+B
真值表或门电路逻辑表达式
01000101
00110001
01110101
微机原理与接口技术
·

4
版机械工业出版社
3,逻辑非指令 NOT
逻辑非 (逻辑反 )运算规则:
原来为 0的位变成 1,原来为 1的位变成 0
逻辑非指令 NOT:
按位进行逻辑非,结果返回操作数
NOT reg/mem ;逻辑非,reg/mem← ~ reg/mem
不影响状态标志位
TA
真值表非门电路逻辑表达式01 10
TA
T= A
01000101
10111010

微机原理与接口技术
·

4
版机械工业出版社
4,逻辑异或指令 XOR
逻辑异或 (逻辑半加 )运算规则:
两位不同 (相异 ),则结果是 1;否则,结果是 0
逻辑异或指令 XOR:
按位进行逻辑异或,结果返回目的操作数
XOR dest,src ;逻辑或,dest←dest? src
设置 CF= OF= 0
影响 SF,ZF和 PF
TAB
01000101
00110001
01110100
110
011
101
000
TBA
T= A?B
真值表异或门电路逻辑表达式微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-13〕 逻辑运算程序- 1
mov eax,varA; EAX= 11001010000111100101010101001101B
not eax; EAX= 00110101111000011010101010110010B
and eax,varB; EAX= 00110101010000000010000010100000B
mov ebx,varB; EBX= 00110111010110100011010111100001B
not ebx; EBX= 11001000101001011100101000011110B
and ebx,varA; EBX= 11001000000001000100000000001100B
or eax,ebx; EAX= 11111101010001000110000010101100B
mov varT1,eax
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-13〕 逻辑运算程序- 2
mov eax,varA
xor eax,varB; EAX= 11111101010001000110000010101100B
mov varT2,eax;
mov eax,varT1 ; 二进制形式显示 VART1
call dispbd
call dispcrlf ; 换行显示
mov eax,varT2 ; 二进制形式显示 VART2
call dispbd
BABABA
11111101010001000110000010101100
11111101010001000110000010101100
运行结果微机原理与接口技术
·

4
版机械工业出版社逻辑运算的屏蔽作用
AND指令复位 某些位 (同 0与 ),不影响其他 (同 1与 )
OR指令置位 某些位 (同 1或 ),不影响其他 (同 0或 )
XOR求反 某些位 (同 1异或 ),不影响其他 (同 0异或 )
and bl,11110110b ;BL中 D0和 D3清 0,其余位不变
or bl,00001001b ;BL中 D0和 D3置 1,其余位不变
xor bl,00001001b ;BL中 D0和 D3求反,其余位不变复位 Reset:清 0,清除 Clear置位 Set:置 1
大写=小写 AND DFH
小写=大写 OR 20H
xor eax,eax
sub eax,eax
mov eax,0
微机原理与接口技术
·

4
版机械工业出版社
5,测试指令 TEST
按位进行逻辑与运算,不返回逻辑与结果
TEST dest,src ;作逻辑与运算,dest? src
TEST指令像 AND指令一样来设置状态标志
TEST指令常用于检测一些条件是否满足,一般后跟条件转移指令,目的是利用测试条件转向不同的分支
AND与 TEST? TEST与 CMP?
微机原理与接口技术
·

4
版机械工业出版社
3.6.2 移位指令
逻辑左移指令 SHL
逻辑右移指令 SHR
算术左移指令 SAL
算术 左移指令 SAR
S,Shift
R,Rotate
L,Left
R,Right
A,Arithmetic
C,Carry flag
不带进位循环左移指令 ROL
不带进位循环右移指令 ROR
带进位循环左移指令 RCL
带进位循环右移指令 RCR
微机原理与接口技术
·

4
版机械工业出版社
1,移位指令
分逻辑 ( Logical) 和算术 ( Arithmetic) 移位
具有左移 ( Left) 或右移 ( Right) 操作
SHL reg/mem,i8/CL;逻辑左移:最低位补 0,最高位进入 CF
SHR reg/mem,i8/CL;逻辑右移:最高位补 0,最低位进入 CF
SAL reg/mem,i8/CL;算术左移,与 SHL是同一条指令
SAR reg/mem,i8/CL;算术右移:最高位不变,最低位进入 CF
目的操作数:寄存器或存储单元 reg/mem
后一个操作数:移位位数 i8/CL
示意图微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-14〕 移位指令实现乘法程序
xor eax,eax ; EAX= 0
mov ax,wvar ; AX= 要乘以 10的无符号数
shl eax,1 ; 左移一位等于乘 2
mov ebx,eax ; EBX= EAX× 2
shl eax,2 ; 再左移 2位,EAX= EAX× 8
add eax,ebx ; EAX= EAX× 10
call dispuid ; 显示乘积
call dispcrlf ; 换行
imul eax,10 ; EAX= EAX× 10
call dispuid ; 显示乘积
SHL逻辑 左移一位相当于 无符号数 乘以 2
SHR逻辑 右移一位相当于 无符号数 除以 2
微机原理与接口技术
·

4
版机械工业出版社
2,循环移位指令
循环 ( Rotate) 移位指令要将从一端移出的位返回到另一端形成循环
分成不带进位循环移位和带进位循环移位
分别具有左移或右移操作
ROL reg/mem,i8/CL;不带进位循环左移指令
ROR reg/mem,i8/CL;不带进位循环右移指令
RCL reg/mem,i8/CL;带进位循环左移
RCR reg/mem,i8/CL;带进位循环右移 RC
RCL/RCR示意图
ROL/ROR示意图微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-15〕 循环移位程序- 1;数据段
qvar dq 1234567887654321h;代码段
mov ecx,4
again,shr dword ptr qvar+4,1
rcr dword ptr qvar,1
loop again
低 32位CF
0
高 32位64位数据逻辑右移微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-15〕 循环移位程序- 2;数据段
ascii db '38'
bcd db?;代码段
mov al,ascii
and al,0fh
mov ah,ascii+1
shl ah,4
or al,ah
mov bcd,al
BCD= 83H
微机原理与接口技术
·

4
版机械工业出版社
3.7 串操作类指令
数据串 (数组 ):以字节,字和双字为单位的多个数据存放在连续的主存区域中
源操作数:允许段超越,DS:[ESI]
目的操作数:不允许段超越,ES:[EDI]
每执行一次串操作,ESI和 EDI自动 ± 1/2/4
以字节为单位 ( 用 B结尾 ) 操作:地址指针 ± 1
以字为单位 ( 用 W结尾 ) 操作:地址指针 ± 2
以双字为单位 ( 用 D结尾 ) 操作:地址指针 ± 4
DF= 0(执行 CLD指令 ):地址指针增加 ( + )
DF= 1(执行 STD指令 ):地址指针减小 ( - )
微机原理与接口技术
·

4
版机械工业出版社
3.7.1 串传送指令
MOVSB|MOVSW|MOVSD;串传送,ES:[EDI]←DS,[ESI];然后,ESI←ESI ± 1/2/4,EDI←EDI ± 1/2/4
STOSB|STOSW|STOSD;串存储,ES:[EDI]←AL/AX/EAX;然后,EDI←EDI ± 1/2/4
LODSB|LODSW|LODSD;串读取,AL/AX/EAX←DS,[ESI];然后,ESI←ESI ± 1/2/4
REP;执行一次串指令,ECX减 1;直到 ECX= 0
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-16〕 字符串复制程序- 1; 数据段
srcmsg byte\
'In a major matter,no details are small.',0
destmsg byte (lengthof srcmsg) dup (0); 代码段
mov esi,offset srcmsg ; ESI=源字符串地址
mov edi,offset destmsg ; ESI=源字符串地址
mov ecx,lengthof srcmsg ; ECX=字符串长度
cld ; 地址增量传送
rep movsb ; 重复字符串传送
mov eax,offset destmsg
call dispmsg
大事之中无小事
again,movsb
loop again
again,mov al,[esi]
mov [edi],al
add esi,1
add edi,1
loop again
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-16〕 字符串复制程序- 2; 数据段
srcmsg byte\
'In a major matter,no details are small.',0
destmsg byte (lengthof srcmsg) dup (0); 代码段
xor ebx,ebx ; EBX= 0
mov ecx,lengthof srcmsg ; ECX=字符串长度
again,mov al,srcmsg[ebx] ; 源字符串取一个字符
mov destmsg[ebx],al ; 传送到目的字符串
inc ebx ; 指向下一个字符
loop again ; 重复进行字符串传送细节决定成败学习“汇编语言”也是如此微机原理与接口技术
·

4
版机械工业出版社
3.7.2 串检测指令
CMPSB|CMPSW|CMPSD;字节串比较,DS:[ESI]- ES:[EDI];然后,ESI←ESI ± 1/2/4,EDI←EDI ± 1/2/4
SCASB|SCASW|SCASD;字节串扫描,AL/AX/EAX- ES:[EDI];然后,EDI←EDI ± 1/2/4
REPE|REPZ;执行一次串指令,ECX减 1;直到 ECX= 0或 ZF= 0
REPNE|REPNZ;执行一次串指令,ECX减 1;直到 ECX= 0或 ZF= 1
微机原理与接口技术
·

4
版机械工业出版社
〔 例 3-17〕 等长字符串比较程序; 代码段
mov ecx,count
mov esi,offset string1
mov edi,offset string2
cld
repz cmpsb ; 重复比较,不同或比较完
jne found ; 发现不同字符,转移
mov al,'Y' ; 字符串相同,显示 Y
jmp done
found,mov al,'N' ; 字符串不同,显示 N
done,call dispc
微机原理与接口技术
·

4
版机械工业出版社
3.8 IA-32指令系统
指令系统 ( 指令集 ),
处理器支持的所有指令的集合
通用指令属于处理器的基本指令指令类型 指令特点通用指令 处理器的基本指令,包括整数的传送和运算,流程控制,输入输出,位操作等浮点指令 浮点数处理指令,包括浮点数的传送,算术运算,超越函数运算,比较,控制等多媒体指令 多媒体数据处理指令,包括 MMX,SSE、SSE2,以及 SSE3和 SSSE3等系统指令 为核心程序和操作系统提供的处理器功能控制指令微机原理与接口技术
·

4
版机械工业出版社
Intel 80x86指令系统的发展
8086(80186)建立 16位基本指令
80286增加保护方式指令
80386扩展为 32位指令系统,新增许多位操作指令
80486新增 6条指令,开始直接支持浮点处理指令
Pentium新增 6条指令,如 处理器识别指令 CPUID
Pentium Pro增加 3条指令,如 条件传送指令 CMOV
Pemtium II/III/4逐渐增加多媒体指令:
MMX,SSE/SSE2/SSE3/SSSE3指令
Intel 64处理器提供
64位指令,具有虚拟机管理指令
掌握二进制,十六进制及其与十进制相互转换
理解定点整数及有符号数表达,掌握求补运算
熟悉 BCD,ASCII码及其编码规律
掌握常量表达方法
掌握变量定义,变量属性及其应用
掌握基本指令的功能及其应用
MOV,XCHG,PUSH,POP
加法指令,减法指令,逻辑指令,移位指令
熟悉常见指令的功能
XLAT,LEA,MUL,IMUL,DIV,IDIV
MOVZX,MOVSX,CLC,STC; MOVS,STOS,REP
理解常见语法错误,符号扩展,十进制调整等问题教学要求第 3章 数据处理钱晓捷,微机原理与接口技术 ·第 4版 —— 基于 IA-32处理器和 32位汇编语言第 3章 习题
3.1 简答题 ( 1,2,3,8,9)
3.2 判断题 ( 2,4,6,8,9)
3.3 填空题 ( 2,3,5,6,8)
3.7 3.10 3.12 3.14 3.15
3.20 3.23 3.29 3.30