您的当前位置:首页汇编语言知识点

汇编语言知识点

2020-09-01 来源:乌哈旅游
第一章

十进制与二进制之间的转换〔P2〕 降幂法 除法

十进制与六进制之间的转换〔P5〕 降幂法 除法

补码表示:正数:采用符号—绝对值法

负数:先写出对应的正数的补码表示,然后再将其按位数求反,最后末尾加1,就可以得到负数的补码表示 补吗运算:二进制数按位求反后在末尾加1 第二章 存储容量

1K = 1024 =210 〔〕 1M =1024K = 220 〔〕 1G = 1024M = 230 〔〕

1个二进制位: 〔比特〕 8个二进制位:〔字节〕 1 = 8 2个字节:1 〔字〕 1 = 2 = 16 存储单元地址与内容

1.存储器以字节〔8 〕为编程单位 2.每个字节单元都有唯一的地址编码

3.地址用无符号整数来表示〔编程用十六进制表示〕 4.一个字要占用相继的两个字节

5.低位字节存入低地址,高位字节存入高地址 6.字单元地址用它的低地址来表示

7.机器以偶地址访问〔读 / 写〕存储器 物理地址 = 16 ´ 段地址 + 偏移地址 存储器的分段:

20 根地址线:地址范围 00000H ~ 〔1〕

机器字长16位:仅能表示地址范围 0000H ~ 〔64) 小段:每16个字节为一小段,共有64K个小段 段起始地址:小段首地址

段的大小: 64K 范围内的任意字节 存储器的逻辑分段优点:

允许程序在存储器内重定位;

允许实模式程序在保护模式下运行; 有利于程序与数据的别离。

第 1 页

中央处理器 8086/8088存放器组: 通用存放器 数据存放器:,,, 变址存放器:、 指针存放器:、 控制存放器: 、 段存放器:、、、

标志存放器 ( / 〕

条件标志位: 溢出标志 符号标志 零标志 进位标志 辅助进位标志 奇偶标志

控制标志位: 方向标志 中断标志 陷阱标志 存放器与存储器的比拟:

存放器:在内部 ;访问速度快;容量小,本钱高;用名字表示;没用地址

存储器:在外部;访问速度慢;容量大,本钱低;用地址表示;地址可用各种方式形成 第三章

物理地寻址方操作数 址 式 所在位置 〔〕 存储器的无 代码段 存放器 无 〔唯一〕 存储器 格式 , 5 , 注意 只能用源操作数 操作数与源操作数的长度一致 字节存放器只有 不能用 指令改变, 源操作数与目的操作数的字长一致 默认的段地址存储在中 遇到的段地址存储在 可以使用段跨越前缀 可用的存放器 不允许使用、、 存放偏移地址() 与 的字长一致 使用时,默认的数据段是, 其余都是 可以使用段跨越前缀 段地址 :[2000H] +位移 量 ,[2000H] 段地址 +基址 /变址 ,[] :[] 间接寻存储器 址 存储器 相对寻 段地址 [] +基址 :[] 第 2 页

址 /变址 ,[] +位移量 段地址 ,[] +基址 ,[][] +变址 段地址 +基址 [][] +变址 [] +位移量 存储器 可以使用段跨越前缀 可以使用段跨越前缀 基址变存储器 址 数据传送指令 传送指令 内部存放器之间的数据传送 指令格式: , 执行操作:() ¬ ()

注意: *、 不能同时为段存放器 , ´ * 、 不能同时为存储单元

*立即数不能直接送段存放器 , 2000H ´ * 不能是立即数与 *不影响标志位 交换指令

指令格式: 1, 2 执行操作:(1) « (2) 例: , [ ] ,

注意: * 两个操作数字长一致

* 两个操作数都不能是段存放器 * 两个操作数都不能是立即数

* 两个操作数不能同时是存储单元

* 可以采用除立即寻址方式外的任何一种寻址方式。 * 不影响标志位 地址传送指令 、、

1.有效地址送存放器指令: , 执行操作: () ¬ 2.指针送存放器与指令: , 执行操作: () ¬ () () ¬ (2) 相继二字 ® 存放器、

3.指针送存放器与指令: , 执行操作: () ¬ () () ¬ (2) 相继二字 ® 存放器、

注意: * 源操作数必须为存储器操作数

* 目的操作数必须是一个16位通用存放器,不能是段存放器

第 3 页

* 源操作数可以是除立即寻址与存放器寻址以外的任意一种寻址方式

* 不影响标志位 堆栈操作指令 、 1.进栈指令:

执行操作: () ¬ () – 2 ( ()+1, () ) ¬ () 出栈指令:

执行操作: () ¬ ( ()+1, () ) () ¬ () + 2

堆栈:‘先进后出’的存储区,段地址存放在中,在任何时候都指向栈顶,进出栈后自动修改。

注意: * 堆栈操作必须以字为单位。 * 不影响标志位

* 不能用立即寻址方式 1234H ´ * 不能是 ´ 堆栈的用途:临时保存存放器的内容。 ; 后进先出 …… ;其间用到、、 标志操作指令 标志传送指令:

1.标志送指令: 执行操作: () ¬ (的低字节) 2送标志存放器指令: 执行操作: (的低字节) ¬ () 注意: * 不影响标志位 * 影响、、、、 标志进栈指令:

执行操作:() ¬ () - 2 ( ()+1, () ) ¬ () 标志出栈指令:

执行操作:() ¬ ( ()+1, () ) () ¬ () + 2

注意:与经常一起联用,完成保护、维护标志存放器的内容或改变标志位的值。 标志位操作指令:

清进位标志指令 ← 0 置进位标志指令 ← 1 进位标志取反指令 ← 清方向标志指令 ← 0 置方向标志指令 ← 1

清中断允许标志指令 ← 0 置中断允许标志指令 ← 1

第 4 页

注意: * 只影响本指令指定的标志 加减法指令:

加法指令: , 执行操作: () ¬ () + () 带进位加法指令: , 执行操作: () ¬ () + () + 加1指令: 执行操作: () ¬ () + 1 注意: * 除指令不影响标志外,均对状态标志位有影响。 各加法指令对条件标志位的影响:

1,结果为负 1,结果为0 1,与的最高有效位有向高位的进位 1,两个操作数符号一样,而结果符号与之相反 位表示 无符号数 相加的溢出。 位表示 带符号数 相加的溢出。

减法指令: , 执行操作: () ¬ () - () 带借位减法指令: , 执行操作: () ¬ () - () - 减1指令: 执行操作: () ¬ () - 1 求补指令: 执行操作: () ¬ - () 比拟指令: 1, 2 执行操作: (1) - (2) 各减法指令对条件标志位〔〕的影响:

1,被减数的最高有效位有向高位的借位 或 1减数转换为加法运算时无进位 1 两个操作数符号相反,而结果的符号与减数一样 位表示 无符号数 减法的溢出。 位表示 带符号数 减法的溢出。 指令对的影响

0,操作数为0 1,操作数为-128(字节运算)或-32727(字运算 乘除运算指令

无符号数乘法指令: 带符号数乘法指令: 执行操作:字节操作数 () ¬ () * () 字操作数 (, ) ¬ () * () 注意: * 目的操作数必须是累加器

* () 为隐含的乘数存放器。 * () 为隐含的乘积存放器。 * 不能为立即数。 * 除与外,对条件标志位无 乘法指令对 的影响:

指令: =00乘积的高一半为零 11否那么

指令: =00乘积的高一半是低一半的符号扩展 11否那么 例:() = 16A5H,() = 0611H

第 5 页

(1) ; (, ) ¬ () * ()

; 16A5*0611=0089 55 ; ()=0089H ()=55H 1 (2) ; () ¬ () * ()

; A5*11 Þ 5B*11=060B Þ F9F5 ; () = 0F9F5H 1 无符号数除法指令: 带符号数除法指令:

执行操作:字节操作 () ¬ () / () 的商 () ¬ () / () 的余数 字操作 () ¬ (, ) / () 的商 () ¬ (, ) / () 的余数 注意: * () 为隐含的被除数存放器。

* () 为隐含的商存放器。 * () 为隐含的余数存放器。 * 不能为立即数。 * 对所有条件标志位均无定义。 类型转换指令

执行操作: 假设()的最高有效位为0,那么()= 00H,假设()的最高有效位为1,那么()=

执行操作:假设()的最高有效位为0,那么()= 0000H,假设()的最高有效位为1,那么()=

例:() = 045H

; ()=0045H ; ()=0 ()=045H

注意: * 无操作数指令 * 隐含对 或 进展符号扩展* 不影响条件标志位 逻辑运算指令

逻辑非指令: * 不能为立即数

执行操作: () ¬ () * 不影响标志位 0 0 * * * 无定义 逻辑与指令: , 执行操作: () ¬ () Ù () 逻辑或指令: , 执行操作: () ¬ () Ú () 异或指令: , 执行操作: () ¬ () \" () 测试指令: 1, 2 执行操作: (1) Ù (2)

移位指令

逻辑左移 , 逻辑右移 ,

算术左移 , 〔同逻辑左移〕

算术右移 , 循环左移 ,

第 6 页

循环右移 , 带进位循环左移 ,

带进位循环右移 , 注意: * 可用除立即数以外的任何寻址方式

* 1, , 1

>1, , , ; 以为例

* 条件标志位:

= 移入的数值 1 1时,最高有效位的值发生变化 0 1时,最高有效位的值不变

移位指令: 、、 根据移位结果设置,无定义

循环移位指令:不影响 、、、

控制转移指令:

· 无条件转移指令 · 条件转移指令

· 循环指令 、 / 、 / · 子程序调用与返回指令 、 · 中断与中断返回指令 、、

与转移地址有关的寻址方式:

用来确定转移指令及转子指令的转向地址

段内寻址 段内直接寻址

段内间接寻址 [ ]

段间寻址 段间直接寻址

段间间接寻址 [ ]

无条件转移指令:

段内直接短转移:

执行操作:() ← () + 8位位移量

段内直接近转移:

执行操作:() ← () + 16位位移量

段内间接转移:

执行操作:() ← ()

段间直接远转移:

执行操作:() ← 的段内偏移地址 () ← 所在段的段地址

段间间接转移:

执行操作:() ← () () ← (2)

注意: * 不影响标志位

条件转移指令

第 7 页

注意: * 只能使用段内直接寻址的8 位位移量 * 不影响标志位

(1) 根据单个条件标志的设置情况转移

格式 测试条件

() = 1 () = 0 = 1 = 0 = 1 = 0 = 1 = 0 = 1 = 0

(2) 比拟两个无符号数,并根据比拟结果转移 格式 测试条件

< () = 1 ≥ () = 0 ≤ () ∨ = 1 > () ∨ = 0

* 适用于地址或双精度数低位字的比拟

(3) 比拟两个带符号数,并根据比拟结果转移 * 适用于带符号数的比拟

格式 测试条件

< () \" = 1 ≥ () \" = 0 ≤ () (\")∨ = 1 > () (\")∨ = 0

(4) 测试 的值为 0 那么转移

格式 测试条件

()=0

循环指令

注意: * 中存放循环次数

* 只能使用段内直接寻址的8 位位移量 * 不影响标志位

执行步骤: (1) () ← () – 1

〔2〕检查是否满足测试条件,如满足那么 () ← () + 8位位移量,实行循环;

不满足那么 不变,退出循环

循环指令:

第 8 页

测试条件:() ¹ 0

为零或相等时循环指令:() 测试条件:1 且 () ¹ 0

不为零或不相等时循环指令:()

测试条件:0 且 () ¹ 0

例:求首地址为 的 M 个字之与,结果存入

, M , 0 , 2 串处理指令

· 串处理指令 · 串重复前缀

从串取指令:

〔字节〕 〔字〕

执行操作: 字节操作:()←(()), ()←()±1 字操作:()←(()), ()←()±2

注意: * 指令一般不与 联用

* 源串一般在数据段中〔允许使用段跨越前缀来修改〕,

目的串必须在附加段中 * 不影响条件标志位

存入串指令: 〔字节〕 〔字〕

执行操作: 字节操作:(())←(), ()←()±1 字操作:(())←(), ()←()±2

串传送指令:

〔字节〕 〔字〕

例: : [], : [] 执行操作:(1) (()) ← (())

(2) 字节操作:()←()±1, ()←()±1 字操作: ()←()±2, ()←()±2 方向标志 0 时用 + ,1 时用 - 。

串扫描指令:

〔字节〕 〔字〕

第 9 页

执行操作: 字节操作:() - (()), ()←()±1 字操作:() - (()), ()←()±2

串比拟指令: 〔字节〕 〔字〕

执行操作: (1) (()) - (())根据比拟结果置条件标志位:相等 1;不等 0

(2) 字节操作:()←()±1, ()←()±1 字操作: ()←()±2, ()←()±2

(与 / 配合工作)

执行操作:(1) 如 ()=0 那么退出 ,否那么转(2)

(2) () ¬ () -1 (3) 执行 / / (4) 重复 (1) ~ (3)

:将数据段中的整串数据传送到附加段中。 源串〔数据段〕→ 目的串〔附加段〕

执行 之前,应先做好: (1) 源串首地址〔末地址〕→ (2) 目的串首地址〔末地址〕→

(3) 串长度 →

(4) 建立方向标志 ( 使 0, 使 1 )

/ (与 与 配合工作)

执行操作: (1) 如 ()=0 或 0 (1) 那么退出串操作,否那么转(2)

(2) ()←() -1 (3) 执行 / (4) 重复 (1) ~ (3)

例:从一个字符串中查找一个指定的字符

, ‘T’ , 8

例:比拟两个字符串,找出它们不相匹配的位置

, 1 , 2 , 8 例:反向传送 , 1+7 , 2+7 , 8

第 10 页

第四章 标号与变量

〔1〕标号与变量都是标识符。

标识符组成:字母 ,数字 0~9,专用字符 ? . @ _ $

标识符的组成规那么:最大长度为31,第一个字符不能是数字,不区分字母的大

小写,不能是汇编语言的保存字 〔2〕标号与变量的异同:

不同:

标号:用于汇编指令语句中,以冒号完毕,在代码段中定义,经常在转移指令或

指令

变量:用于伪指令语句中,不允许有冒号,在数据段或附加段中定义,经常在操

作数字段出现

一样:都有三种属性:段属性、偏移属性、类型属性

伪操作

是汇编程序对源程序进展汇编时处理的操作,完成处理器选择、存储模式定义、

数据定义、

存储器分配、指示程序开场完毕等功能。 处理器选择伪操作 段定义伪操作

程序开场与完毕伪操作 数据定义及存储器分配伪操作 表达式赋值伪操作 地址计数器与对准伪操作

基数控制伪操作 段定义伪操作

; 定义数据段 ; 定义附加段 ; 定义代码段

, ; 段地址 ® 段存放器

说明:语句序列 段假定伪指令

格式: 段存放器名:段名〔这里只是一种指明,段存放器的实际值,必须在程

序中使用传送指令来赋值,除外〕 数据定义及存储器分配伪操作:

[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释]

助记符: 例: 10,4,10H,? 100,1005,?

伪操作:

第 11 页

1 例:

50 (?) 表达式名 表达式

9 18 [8]

说明:1、 2 (表达式中的标号与变量要先定义,例如: )

2、 “ = 〞 伪操作 〔允许重复定义〕

= 7 = 1

数值回送操作符: 、、、 、 / 变量 / 标号

功能:回送变量或标号的偏址 / 段址

变量 / 标号 / 常数

常数 2 4 6 8 10 -1 -2 0 变量 功能:回送由定义的变量的单元数,其它情况回送1

变量 功能: * 例:

100 (?)

, ; , 2 , ; , 1

, ; , 100 , ; , 1

, ; , 200 , ; , 1 属性操作符: 、段操作符、、 、、 类型 表达式 [], 5

段操作符 : [],

标号

类型

1234H

,2

与 1234H

第 12 页

第五章 分支程序设计 (1) 条件控制 (2) 逻辑尺控制

(3) 地址跳跃表〔值与地址有对应关系的表〕

第六章 调用指令

段内直接近调用: 执行操作: () ← () - 2

( ()+1,() ) ← () () ← () + 16位位移量

段内间接近调用: 执行操作: () ← () - 2

( ()+1,() ) ← ()

段间直接远调用: 执行操作: () ← () - 2

( ()+1,() ) ← () () ← () - 2 ( ()+1,() ) ← () () ← 偏移地址 () ← 段地址

段间间接远调用: 执行操作: () ← () - 2

( ()+1,() ) ← () () ← () - 2 ( ()+1,() ) ← () () ← (2)

返回指令 段内近返回:

执行操作: () ← ( ()+1,() ) () ← () + 2 段内带立即数近返回:

段间远返回:

执行操作: () ← ( ()+1,() ) () ← () + 2

() ← ( ()+1,() )

第 13 页

() ← () + 2 段间带立即数远返回: 过程定义伪操作

过程名 ( )

过程名

〔1〕属性:调用程序与子程序在同一代码段中〔段内调用〕 〔2〕属性:调用程序与子程序不在同一代码段中〔段间调用〕

子程序调用与返回

子程序调用:隐含使用堆栈保存返回地址 (1) 保存返回地址 (2) 转子程序 (1) 保存返回地址 (2) 子程序返回: 保存与恢复存放器

第 14 页

转子程序

因篇幅问题不能全部显示,请点此查看更多更全内容