汇编语言知识点Word下载.docx
《汇编语言知识点Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言知识点Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
段寄存器:
、、、
标志寄存器(/)
条件标志位:
溢出标志符号标志零标志
进位标志辅助进位标志奇偶标志
控制标志位:
方向标志中断标志陷阱标志
寄存器与存储器的比较:
寄存器:
在内部;
访问速度快;
容量小,成本高;
用名字表示;
没用地址
存储器:
在外部;
访问速度慢;
容量大,成本低;
用地址表示;
地址可用各种方式形成
第三章
寻址方式
操作数
所在位置
物理地址
()
格式
注意
1.立即寻址
存储器的代码段
无
5
只能用源操作数
操作数和源操作数的长度一致
2.寄存器寻址
寄存器
(唯一)
无
字节寄存器只有
不能用指令改变,
源操作数和目的操作数的字长一致
3.直接寻址
存储器
段地址
+位移量
:
[2000H]
[2000H]
默认的段地址存储在中
遇到的段地址存储在
可以使用段跨越前缀
4.寄存器
间接寻址
+基址
/变址
[]
[]
可用的寄存器
不允许使用、、
存放偏移地址()
和的字长一致
使用时,默认的数据段是,
其余都是
5.寄存器
相对寻址
[]
[]
6.基址变址寻址
+变址
[][]
7.相对
基址变址
[][]
可以使用段跨越前缀
数据传送指令
传送指令内部寄存器之间的数据传送
指令格式:
执行操作:
()¬
()
注意:
*、不能同时为段寄存器,´
*、不能同时为存储单元
*立即数不能直接送段寄存器,2000H´
*不能是立即数和
*不影响标志位
交换指令
1,2执行操作:
(1)«
(2)
例:
[],
*两个操作数字长一致
*两个操作数都不能是段寄存器
*两个操作数都不能是立即数
*两个操作数不能同时是存储单元
*可以采用除立即寻址方式外的任何一种寻址方式。
*不影响标志位
地址传送指令、、
1.有效地址送寄存器指令:
()¬
2.指针送寄存器和指令:
(2)相继二字®
寄存器、
3.指针送寄存器和指令:
寄存器、
注意:
*源操作数必须为存储器操作数
*目的操作数必须是一个16位通用寄存器,不能是段寄存器
*源操作数可以是除立即寻址和寄存器寻址以外的任意一种寻址方式
堆栈操作指令、
1.进栈指令:
执行操作:
()–2(()+1,())¬
出栈指令:
(()+1,())()¬
()+2
堆栈:
‘先进后出’的存储区,段地址存放在中,在任何时候都指向栈顶,进出栈后自动修改。
*堆栈操作必须以字为单位。
*不能用立即寻址方式1234H´
*不能是´
堆栈的用途:
临时保存寄存器的内容。
……;
其间用到、、
;
后进先出
标志操作指令
、、、、、、、、、、
标志传送指令:
1.标志送指令:
执行操作:
(的低字节)
2送标志寄存器指令:
(的低字节)¬
*不影响标志位*影响、、、、
标志进栈指令:
()-2(()+1,())¬
标志出栈指令:
和经常一起联用,完成保护、维护标志寄存器的内容或改变标志位的值。
标志位操作指令:
清进位标志指令←0
置进位标志指令←1
进位标志取反指令←
清方向标志指令←0
置方向标志指令←1
清中断允许标志指令←0
置中断允许标志指令←1
*只影响本指令指定的标志
加减法指令:
加法指令:
()+()
带进位加法指令:
()+()+
加1指令:
()+1
*除指令不影响标志外,均对状态标志位有影响。
各加法指令对条件标志位的影响:
1,结果为负1,结果为01,和的最高有效位有向高位的进位
1,两个操作数符号相同,而结果符号与之相反
位表示无符号数相加的溢出。
位表示带符号数相加的溢出。
减法指令:
()-()
带借位减法指令:
()-()-
减1指令:
()-1
求补指令:
-()
比较指令:
(1)-
(2)
各减法指令对条件标志位()的影响:
1,被减数的最高有效位有向高位的借位或1减数转换为加法运算时无进位
1两个操作数符号相反,而结果的符号与减数相同
位表示无符号数减法的溢出。
位表示带符号数减法的溢出。
指令对的影响
0,操作数为01,操作数为-128(字节运算)或-32727(字运算
乘除运算指令
无符号数乘法指令:
带符号数乘法指令:
字节操作数()¬
()*()
字操作数(,)¬
*目的操作数必须是累加器
*()为隐含的乘数寄存器。
*()为隐含的乘积寄存器。
*不能为立即数。
*除和外,对条件标志位无
乘法指令对的影响:
指令:
=00乘积的高一半为零
11否则
=00乘积的高一半是低一半的符号扩展
()=16A5H,()=0611H
(1);
(,)¬
16A5*0611=008955
()=0089H()=55H1
(2);
A5*11Þ
5B*11=060BÞ
F9F5
()=0F9F5H1
无符号数除法指令:
带符号数除法指令:
字节操作()¬
()/()的商()¬
()/()的余数
字操作()¬
(,)/()的商()¬
(,)/()的余数
*()为隐含的被除数寄存器。
*()为隐含的商寄存器。
*()为隐含的余数寄存器。
*对所有条件标志位均无定义。
类型转换指令
®
若()的最高有效位为0,则()=00H,若()的最高有效位为1,则()=
若()的最高有效位为0,则()=0000H,若()的最高有效位为1,则()=
()=045H
()=0045H;
()=0()=045H
*无操作数指令*隐含对或进行符号扩展*不影响条件标志位
逻辑运算指令
逻辑非指令:
*不能为立即数
()*不影响标志位
*
无定义
逻辑与指令:
()Ù
逻辑或指令:
()Ú
异或指令:
()"
测试指令:
(1)Ù
(2)
移位指令
逻辑左移,
逻辑右移,
算术左移,(同逻辑左移)
算术右移,
循环左移,
循环右移,
带进位循环左移,
带进位循环右移,
*可用除立即数以外的任何寻址方式
*1,,1
>
1,,,;
以为例
*条件标志位:
=移入的数值11时,最高有效位的值发生变化
01时,最高有效位的值不变
移位指令:
、、根据移位结果设置,无定义
循环移位指令:
不影响、、、
控制转移指令:
·
无条件转移指令
条件转移指令
/、/、/、/、
/、
循环指令、/、/
子程序调用和返回指令、
中断与中断返回指令、、
与转移地址有关的寻址方式:
用来确定转移指令及转子指令的转向地址
段内寻址段内直接寻址
段内间接寻址[]
段间寻址段间直接寻址
段间间接寻址[]
无条件转移指令:
段内直接短转移:
()←()+8位位移量
段内直接近转移:
()←()+16位位移量
段内间接转移:
()←()
段间直接远转移:
()←的段内偏移地址()←所在段的段地址
段间间接转移:
()←()()←
(2)
条件转移指令
*只能使用段内直接寻址的8位位移量*不影响标志位
(1)根据单个条件标志的设置情况转移
格式测试条件
()=1
()=0
=1
=0
(2)比较两个无符号数,并根据比较结果转移
<()=1
≥()=0
≤()∨=1
>()∨=0
*适用于地址或双精度数低位字的比较
(3)比较两个带符号数,并根据比较结果转移*适用于带符号数的比较
<()"
≥()"
≤()("
)∨=1
>()("
)∨=0
(4)测试的值为0则转移
格式测试条件
()=0
循环指令
*中存放循环次数
*只能使用段内直接寻址的8位位移量*不影响标志位
/
执行步骤:
(1)()←()–1
(2)检查是否满足测试条件,如满足则()←()+8位位移量,实行循环;
不满足则不变,退出循环
循环指令:
测试条件:
()¹
0
为零或相等时循环指令:
()
1且()¹
不为零或不相等时循环指令:
0且()¹
求首地址为的M个字之和,结果存入
M
0
:
[]
2
串处理指令
串处理指令·
串重复前缀
//
从串取指令:
(字节)
(字)
字节操作:
()←(()),()←()±
1
字操作:
2
*指令一般不与联用
*源串一般在数据段中(允许使用段跨越前缀来修改),
目的串必须在附加段中
*不影响条件标志位
存入串指令:
(())←(),()←()±
串传送指令:
[],:
(1)(())←(())
(2)字节操作:
()←()±
1,()←()±
()←()±
2,()←()±
方向标志0时用+,1时用-。
串扫描指令:
()-(()),()←()±
串比较指令:
(1)(())-(())根据比较结果置条件标志位:
相等1;
不等0
(与/配合工作)
(1)如()=0则退出,否则转
(2)
(2)()¬
()-1
(3)执行//
(4)重复
(1)~(3)
:
将数据段中的整串数据传送到附加段中。
源串(数据段)→目的串(附加段)
执行之前,应先做好:
(1)源串首地址(末地址)→
(2)目的串首地址(末地址)→
(3)串长度→
(4)建立方向标志(使0,使1)
/(与和配合工作)
(1)如()=0或0
(1)则退出串操作,否则转
(2)
(2)()←()-1
(3)执行/
从一个字符串中查找一个指定的字符
‘’
‘T’
8
比较两个字符串,找出它们不相匹配的位置
1
反向传送
1+7
2+7
第四章
标号和变量
(1)标号和变量都是标识符。
标识符组成:
字母,数字0~9,专用字符?
.@_$
标识符的组成规则:
最大长度为31,第一个字符不能是数字,不区分字母的大小写,不能是汇编语言的保留字
(2)标号和变量的异同:
不同:
标号:
用于汇编指令语句中,以冒号结束,在代码段中定义,经常在转移指令或指令
变量:
用于伪指令语句中,不允许有冒号,在数据段或附加段中定义,经常在操作数字段出现
相同:
都有三种属性:
段属性、偏移属性、类型属性
伪操作
是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、
存储器分配、指示程序开始结束等功能。
处理器选择伪操作段定义伪操作
程序开始和结束伪操作数据定义及存储器分配伪操作
表达式赋值伪操作地址计数器与对准伪操作
基数控制伪操作
段定义伪操作
定义数据段
…
定义附加段
定义代码段
,
;
段地址®
段寄存器
说明:
语句序列
段假定伪指令
格式:
段寄存器名:
段名(这里只是一种指明,段寄存器的实际值,必须在程序中使用传送指令来赋值,除外)
数据定义及存储器分配伪操作:
[变量]助记符操作数[,操作数,…][;
注释]
助记符:
10,4,10H,?
100,1005,?
伪操作:
50(?
)
表达式名表达式
9
18
[8]
1、2(表达式中的标号和变量要先定义,例如:
)
2、“=”伪操作(允许重复定义)
……
=7
数值回送操作符:
、、、、
/变量/标号
功能:
回送变量或标号的偏址/段址
变量/标号/常数
常数
4
6
8
10
-1
-2
变量
回送由定义的变量的单元数,其它情况回送1
*
100(?
100
200
属性操作符:
、段操作符、、、、
类型表达式[],5
段操作符:
[],
标号
类型
1234H
2
和1234H
第五章
分支程序设计
(1)条件控制
(2)逻辑尺控制
(3)地址跳跃表(值与地址有对应关系的表)
第六章
调用指令
段内直接近调用:
()←()-2
(()+1,())←()
()←()+16位位移量
段内间接近调用:
()←()
段间直接远调用:
()←偏移地址
()←段地址
段间间接远调用:
(()+1,())←()
()←
(2)
返回指令
段内近返回:
()←(()+1,())
()←()+2
段内带立即数近返回:
段间远返回:
段间带立即数远返回:
过程定义伪操作
过程名()
过程名
(1)属性:
调用程序和子程序在同一代码段中(段内调用)
(2)属性:
调用程序和子程序不在同一代码段中(段间调用)
子程序调用与返回
子程序调用:
隐含使用堆栈保存返回地址
(1)保存返回地址
(2)转子程序
子程序返回:
保存与恢复寄存器