十进制与二进制之间的转换〔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 页
转子程序
因篇幅问题不能全部显示,请点此查看更多更全内容