汇编 ax bx语言的问题!!!为什么书上写shr ax,3是错误的,而shr cx,1是对的?

君,已阅读到文档的结尾了呢~~
xin微机原理与汇编语言程序设计
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
xin微机原理与汇编语言程序设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口我想把EDX里面的第8位取出来,该怎么写?
你可以这样操作:
EDX, 0010H
//为0时,转LP1
//否则,为1,顺序执行
其他答案(共3个回答)
汇编的可移植性很差,如果是平台不同基本不可能使用
据我知道,如果你是WIN98下可以执行的16位汇编对中断的操作以及对端口的读写操作,那么在WIN2K和XP下是...
MOV DL,0DH
;输出回车;回车表示那个退格
MOV AH,02H
MOV DL,0AH
MOV AH,02H
都与饭同吃了,这个很简单,我记得有一个蓝皮的教材,携86汇编的很不错!
EXCEL的分类汇总只能对连续出现的相同数据进行汇总,你要对同一数据只出现一个总汇总结果,可以先以该列字段为关键字进行一个排序,这样所有的相同数据就被排列到一起...
CX先减一,然后才判断ZF标志位是否为1(即运算结果为0),如果不是,则跳转,否则循环结束.因此如果CX赋初值为0,则循环将是一个死循环.具体的,你可以自己编个...
答: test Y 夏梦测试问题110
答: 根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言和面向对象的语言
答: 最好先学C,接着学别的就轻松了,写游戏的语言比较多,后来再说都不耽误
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415计算机组成原理实验1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
计算机组成原理实验1
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢一、寻址方式 1、概念: &&& 一条指令由操作码和操作数构成,操作码是系统定义好的符号,执行指定的操作,操作数即是指令的对象,而寻址方式就是操作数的指定方式 操作码
目的操作数,源操作数
2、寻址方式的三种情况:
(1)CPU中(2)储存器(3)I/O中
3、寻址方式分类
(1)隐含寻址:
&&& 指令中只有操作码没有指定的操作数,但是根据操作码就可确定相应的操作数
(2)立即寻址:
&&& 指令中直接给出要操作的数
ADD AL,<span style="color: #
&&& 立即寻址只能用在源操作数上
(3)寄存器寻址:
A、指令中给出寄存器的名字,寄存器中的内容是要操作的数,这种方式称为寄存器寻址。
B、可以使用寄存器:8个通用16位寄存器(AX,BX,CX,DX,SI,DI,BP,SP),以及8个8位寄存器(AH,AL,BH,BL,CH,CL,DH,DL)
(4)段寄存器寻址:
A、指令中给出段寄存器的名字,段寄存器中的内容是要操作的数,这种方式称为段寄存器寻址。
B、可以使用段寄存器:4个段寄存器(CS,DS,ES,SS)
C、8086中只有数据传输指令MOV,堆栈操作指令PUSH和POP可以使用段寄存器寻址方式
(5)I/0口寻址
A、操作数在I/O接口中,这种寻址方式为I/O寻址
B、只用使用IN/OUT操作。
C、直接IO寻址:使用一个8位无符号数指定端口号
&&& 间接IO寻址:使用一个16位寄存器DX来指定端口号
(6)转移地址的寻址:
&&& 指令指针IP会一直指向下一条要执行的命令,所以使用指令转移IP内容,成为转移地址的寻址
(7)储存器操作数的寻址
&& 8086CPU有20根地址线,所以储存器每个单元的地址是20位(2进制),称为物理地址,而CPU内部的寄存器都是16位,只用一个寄存器不能完整表示储存器地址,所以拆成2个分量:段地址(CS,DS,ES,SS),偏移地址(BX,BP,SI,DI)
物理地址 = 段地址*10H + 偏移地址
②直接寻址
ADD AL,[Xvar]
将Xvar地址中的内容与AL相加,并储存在AL中;其中Xvar是在数据段中定义的一个变量名
A、直接寻址:要用变量名指定地址
&&&& 立即寻址:常数作为源操作数
ADD AL,[20H]
认为是立即寻址
③寄存器间接寻址
A、将储存器的偏移地址存在一个16位寄存器中,然后用方括号中的16位寄存器指定此偏移地址,成为寄存器间接寻址
B、BX,SI,DI搭配DS(数据段)
&&& BP搭配SS(堆栈段)
ADD AL,[BX];
从数据段的此地址取数据
ADD AL,[BP];
从堆栈段的此地址取数据
④寄存器相对寻址
A、就是在寄存器间接寻址的基础上,使用BX+D(8位或者16位的常数偏移量)作为地址
ADD AL [SI+<span style="color: #];
ADD AL [BP-<span style="color: #];
⑤基址变址寻址
A、将一个基址寄存器(BX,BP)与一个变址寄存器(SI,DI)的内容相加作为偏移地址,段寄存器搭配由基址寄存器决定:BX搭配DS,BP搭配SS
B、计算公式:
物理地址=DS*10H+BX/DP+SI/DI
ADD AL,[BX+SI];
ADD AL,[BP-DI];
ADD AL [BX+BP];
也不能是两个基址寄存器
ADD AL,[SI+DI];
或者是两个变址寻址器
⑥相对基址变址寻址
A、就是在寄存器基址变址寻址的基础上,使用BX+SI+D(8位或者16位的常数偏移量)作为地址
ADD AL,[BP+BI+<span style="color: #]
ADD AL,[BP+BI-<span style="color: #];
同样的,不能有减法
二、数据传送指令
1、通用数据传送指令
(1)立即数传送给寄存器或储存单元
A、立即数只能作为源操作数
B、若寄存器是16位,立即数可以是16位或8位,若寄存器是8位的,立即数只能是8位的。
C、目的操作数是存储器,而立即数是8位,则存储器必须有类型说明
(2)通用寄存器与存储器之间的传送
若通用寄存器是8位,则按字节传送,若是16位,则按字传送。
(3)两个通用寄存器之间的传送
源和目的必须同为8位或者16位寄存器
(4)段寄存器与通用寄存器或存储器之间的传送
A、程序的一开始,经常需要用立即数对段寄存器赋初值,但是,立即数为源操作数,段寄存器为目的的操作数寻址方式是非法的,所以使用:
MOV AX,DATA
B、段寄存器作为源操作数时:DS,SS,ES,CS都可以使用
&&&&&&&&&&&&& 作为目的操作数:CS不能使用
C、IP不能作为源操作数或者目的操作数
D、两个存储单元之间的传送是允许的,所以
2、交换指令:
(1)指令格式
(2)操作数不能是立即数、段寄存器、存储器操作数。
(3)操作数的长度要一致
3、堆栈操作指令
(1)入栈指令:
A、指令格式:
&&& 将一个源操作数压入堆栈,具体过程:先将堆栈指针SP减2,然后将源操作数存入堆栈中SP所指的地址.
(2)出栈指令:
POP src&&& 将堆栈顶部的数据弹出给目的操作数,具体操作:以SS为段地址,SP为偏移地址,将此地址中的数据取出传给目的操作数,然后堆栈指针SP加2
(3)一些注意事项:
A、POP和PUSH的操作数必须是16位的。通用寄存器和存储器皆可。
B、一些错误指令:
PUSH <span style="color: #34
不能是立即数
不能使用8位寄存器
不能使用IP寄存器
不能使用立即数
不能使用8位寄存器
CS不能作为目的操作数C、低字节在低地址,高字节在高地址
4、查表指令
(1)指令格式:
XLAT src_table&&&& 又称换码指令,用BX指向数据段中一个表格的首地址,AL为某元素的下标,查表得到此元素的值存入AL中
MOV BX OFFSET TABLE
MOV AL,<span style="color: #
5、输入/输出指令
(1)指令格式
(2)一些注意点:
A、操作数必须是累加寄存器AL或者AX;另一个操作数是8位无符号port或者16位的数据寄存器DX,用来指定I/O接口电路中的一个地址
B、地址超8位,只能使用间接寻址。
6、地址传送指令
(1)有效地址传送:
A、指令格式:
LEA reg16,mem
&&&& 源操作数必须是存储器操作数,目的操作数必须是16位的通用寄存器,功能是将存储器操作数的偏移地址传送给给一个16通用寄存器.
B、OFFSET:功能是取存储器操作数的偏移地址。
(2)地址指针送寄存器和DS
LDS reg16,mem32;
等同于 reg16&---[mem32],DS&---[mem32+<span style="color: #]
(3)地址指针送寄存器和ES
LES reg16,mem32;
等同于 reg16&---[mem32],ES&---[mem32+<span style="color: #]
7、标志位传送指令
(1)标志寄存器送AH
A、指令格式:
等同于AH&----标志寄存器的低八位
(2)AH送标志寄存器
A、指令格式:
标志寄存器低8位&------AH
PS:只能对标志寄存器的低八位进行操作
(3)标志寄存器入栈
A、指令格式:
SP&------SP-<span style="color: #
SS:[SP]&------ 标志寄存器
(4)标志寄存器出栈
A、指令格式:
标志寄存器&-------SS:[SP], SP&----SP+<span style="color: #
三、汇编语言程序结构:
DATA SEGMENT
数据段开始
伪指令,定义数据段变量
数据段结束
EXTRA SEGMENT 扩展段开始
伪指令,定义扩展段变量
EXTRA ENDS
扩展段结束
STACK SEGMENT堆栈段开始
伪指令,定义数据段变量
STACK ENDS
堆栈段结束
MAC1 MACRO
宏指令定义开始
伪指令或者指令,宏定义体
宏指令定义结束
CODE SEGMENT
代码段开始
CS:CODE,DS:DATA,ES:EXTRA,SS:STACK
主程序起始地址定义
AX,DATA寄存器初始化
调用子程序
调用宏指令
MOV AH,4CH
子程序定义开始
返回主程序
子程序定义结束
代码段结束
1、分段结构
(1)代码段结束处,必须加入如下代码,实现返回系统的功能
MOV,AH,4CH
(2)子程序中必须有RET使之能返回主程序
2、语句格式
(1)指令语句:
标号:操作码
目的操作数,源操作数;注释
(2)伪指令语句:
操作数,……,操作数;注释
&&& 汇编时起到辅助作用,不产生机器码,也称为指示性语句。
(3)宏定义语句
标号:宏定义指令名
实际参数;注释
B、使用MACRO伪指令定义了一条宏指令之后,在代码段中就可以用宏指令语句来调用此宏指令。
3、变量和标号:
&&&& 变量和标号都是来表示存储器中的地址,标号只能在代码段中定义,变量可以在任意段中定义。标量和标号都有段地址、偏移地址和类型三种属性,变量的类型属性有:BYTE,WORD,DWORD几种。标号的类型有NEAR或者FAR两种。
4、操作数、表达式和操作符
(1)算术操作符:+ – * / 和MOD
&&&& 加减可以对地址进行操作
(2)逻辑操作符:AND,OR,XOR,NOT,SHL(左移),SHR(右移)
&&&& 和指令操作码方法一致,但只能对数值进行操作,不能对地址进行操作
(3)关系操作符:EQ(相等)、NE(不等)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)
&&&&& A、用0表示假,用0FFH或者0FFFFH表示真。
&&&&& B、可以比较数值也可以比较地址
(4)分析操作符:SEG,OFFSET,TYPE,LENGTH和SIZE
取偏移地址
取类型1:BYTE2:WORD4:DWORD
取变量中用DUP定义的数据的个数
LENGTH和TYPE的乘积
(5)属性操作符:HIGH、LOW、SHORT、PTR、THIS和段操作符共6个
改变变量类型
5、常用伪指令
(1)符号定义伪指令A、格式:
;使用EQU定义的名称可以进行修改名称 = 表达式
;不可以进行修改
&& 就是定义个符号常量的作用。
(2)数据定义伪指令
表达式,表达式,……;注释
DUP(表达式,表达式,……);注释
①其中变量和注释可有可无,然后定义数据的伪操作符有以下5个:DB(字节),DW(字)、DD(双字)、DQ(8个字节)和DT(10个字节)
②若要定义一组数是相同的,使用第二种方法
③若要预留地址空间,没有初始数值,则数据项可以写为”?“每一个”?“代表一个数据,占用的地址为由伪操作符决定
四、汇编成语上机过程,(使用寻址方式验证代码来书写)
1、DOSBox模拟器初始化
&&&&& 其中g:\汇编目录下有:
键入代码后回车。
edit xunzhi.asm
得到如上界面,进行书写代码,并保存。
如图键入代码,回车回车回车
这里会显示语法错误信息,如果有错就会报错
键入代码回车
没有错误,则进行调试
如图键入代码:然后回车就进入调试
(1)键入U回车
A、U命令是反汇编,将内存中的机器码反汇编成指令显示。
B、可能每次不能显示全部指令,所以再U可以继续显示,U0可以返回到代码段的首部
(2)在内存中查看数据段,扩展段和堆栈段中的数据
查看内存中的数据使用命令
D+地址:<span style="color: #D076A:0
再次键入D命令,会继续往下面显示
(3)单步运行程序,查看运行结果
t=0 从第一句开始,按t顺心执行
阅读(...) 评论()《IBM-PC汇编语言》 全书课件(3课时)_文档资料库
《IBM-PC汇编语言》 全书课件(3课时)
《IBM-PC汇编语言程序设计》巢湖学院计算机系教材主编:沈美名 温冬蝉 主讲教师:江家宝 主讲手机: 主讲Email:jjb12032@欢迎在座各位常与我交流! 课件总目录教学日历:第01讲(第01周):基础知识 第02讲(第02周):80×86计算机组织 第03讲(第03周):80×86的寻址方式 第04讲(第04周):数据传送类指令 第05讲(第05周):算术指令、逻辑指令和串处理指令 第06讲(第06周):控制转移指令和处理机控制与杂项操作指令 第07讲(第07周):汇编语言程序格式 第08讲(第08周):循环与分支程序设计方法 第09讲(第09周):循环与分支程序设计实例分析 第10讲(第10周):子程序设计方法 第11讲(第11周):子程序设计实例分析 第12讲(第12周):高级汇编技术 第13讲(第13周):I/O设备的数据传送方式一 第14讲(第14周):I/O设备的数据传送方式二 第15讲(第15周):键盘I/O和显示器I/O 清华大学计算机系列教材沈美名 温冬蝉 编著IBM―PC汇编语言 程序设计(第2版)总目录 参考资料1.80X86汇编语言程序设计沈美明 温冬婵清华大学出版社2.IBM PC 汇编语言与程序设计 PETER ABEL 编著 第4版 第5版 清华大学出版社.PRENTICE HALL 人民邮电出版社3. IBM PC 汇编语言与程序设计例题习题集 温冬婵 沈美明 清华大学出版社总目录 第01讲:基础知识计算机语言的发展FORTRAN BASIC COBOL PASCALC/C++JAVA ...第01讲(第01周):基础知识总目录 后一讲 汇编语言的特点① 面向机器的低级语言?通常是为特定的计算机或计算机系列专门设计的。② 保持了机器语言的优点?具有直接和简捷的特点。③ 可有效地访问、控制计算机的各种硬件设备?如:磁盘、存储器、CPU、I/O端口等。 ④ 高效的程序设计语言?目标代码简短; 占用内存少; 执行速度快;⑤ 经常与高级语言配合使用?应用十分广泛。第01讲(第01周):基础知识总目录 后一讲 汇编语言的特点举例1 例1:编程实现 c =a+b,并在屏幕上显示出结果。#include &stdafx.h& #include &stdio.h& int main(int argc, char* argv[]) { int a,b,c; 编译后的目标文件 a=1; 达到3.59KB b=2; c=a+b; printf(“c=%d\n&,c); return 0; }第01讲(第01周):基础知识(3课时)总目录 后一讲 汇编语言的特点举例2mov mov mov add mov lea mov int 汇编后的目标文件 add 只有208字节 mov code segment mov main proc far int assume cs:code, ds:data, mov es:data int start: mov push ds int sub ax,ax ret push ax main endp mov ax,data code ends mov ds,ax end mov es,ax 例2.编程实现 c =a+b,并在屏幕上 显示出结果。 data segment a db ? b db ? c db ? string db &#39;c=$&#39; data ends第01讲(第01周):基础知识(3课时)a,1 b,2 al,a al,b c,al dx,string ah,09 21h c,30h dl,c ah,2 21h dl,0ah 21h dl,0dh 21hstart总目录 后一讲 汇编语言的应用系统程序、高效率代码、I/O驱动程序? 70%以上的系统软件是用汇编语言编写的。? 某些快速处理、位处理、访问硬件设备等高效程序是用汇编 语言编写的。 ? 高级绘图程序、视频游戏程序一般是用汇编语言编写的。第01讲(第01周):基础知识(3课时)总目录 后一讲 教师建议 目标:●了解汇编语言的特性及其编程技术。 ●建立起“机器”和“程序”、“空间”和“时间”的概念。 建议: ●充分注意“汇编”课实践性强的特点。 ●多读程序,多写程序,多上机调试程序。 ●熟悉PC机的编程结构。 ●掌握汇编语言及其程序设计的基本概念、方法和技巧。第01讲(第01周):基础知识(3课时)总目录 后一讲 第1章、基础知识? ? ? ?数制 数制之间的转换 运算 数和字符的表示第01讲(第01周):基础知识(3课时)总目录 后一讲 预备知识存储容量1K = 1024 = 1M = 1024K = 1G = 1024M =210(Kilo) 220(Mega) 230(Giga)(比特) (字节) = 8bit ( 字) = 2Byte = 16bit1个二进制位:1bit 8个二进制位:1Byte 1Byte 2个字节: 1Word 1Word第01讲(第01周):基础知识(3课时)总目录 后一讲 §1.1、进位计数制与不同基数的数之间的转换 1.1.1、数制(1) R进制数?位权、基数、数码; 基数为R ,逢R进一an an ?1...a1a0 .b1b2 ...bm?1bm ? ai .bj进位记数制 二进制(Binary) 八进制(Octal ) 十进制(Decimal) 基数 2 8 10 0、1 0、1、2、3、4、5、6、7 0、1、2、3、4、5、6、7、8、9 数码 位权 2i,2-j 8i,8-j 10i,10-j十六进制(Hexadecimal)160、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F16i,16-j(2)八进制与二进制数码对应关系二进制 八进制 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7(3)十六进制与二进制数码对应关系二进制 十六进制10 10 01 00 11123456789ABCDEF第01讲(第01周):基础知识(3课时)总目录 后一讲 1.1.2、各数制之间的转换 (1)、任意进制R转化成十进制数Eg:11B = 92.71875D (2)、十进制数转换成其它进制数 整数部分 =& 除R倒取余; 小数部分 =& 乘R顺取整; Eg:125.63D =& 二进制和八进制第01讲(第01周):基础知识(3课时)总目录 后一讲 1.1.3、各数制之间的转换 二进制是桥梁? 二进制 ? 十进制 ? 十进制十六进制 二进制 十六进制 降幂法 除法第01讲(第01周):基础知识(3课时)总目录 后一讲 ? 二进制八进制011 101 111 110.011 100B ? ? ? ? ? ? 3 5 7 6. 3 4 ∴ .0111B =
1. 4 2O ? ?. ? ? 110 001 100 010 ∴ 61.42O = 01B第01讲(第01周):基础知识(3课时)总目录 后一讲 ? 二进制十六进制11
111B . B ? ? ? ? 3 5 B E ∴ 11110B = 35BEH A1 9 . CH A 1 9. C ? ? ? ? 01.1100 ∴ A19.CH = .11B第01讲(第01周):基础知识(3课时)总目录 后一讲 ? 二进制十进制1011B = 23+21+20=11D 降幂法 除法例: 27D = ? B 27 11 3 -? -? 2n 32 16 8 4 1 1 0 ∴ 27D = 11011B第01讲(第01周):基础知识(3课时)3 -? 2 11 -? 1 1总目录 后一讲 ? 十六进制十进制BF3CH = 11?163 +15?162 +3?161 +12?160 = 48956D 降幂法 除法例:399D = ? H 399 143 -? -? 16n 256 16? ?15 -? 1?399/16→24/16→1/16→ 0 ↓ ↓ ↓ F 8 118F∴ 399D = 18FH第01讲(第01周):基础知识(3课时)总目录 后一讲 §1.2、运算(算术运算和逻辑运算)1.2.1、二进制算术运算加法规则 0+0=0 0+1=1 1+0=1 1 + 1 = 0 (向高位 进1)逢二进一、借一为二减法规则 0-0=0 0 - 1 = 1(向高位 借1) 1-0=1 1-1=0 乘法规则 0?0=0 0?1=0 1?0=0 1?1=1第01讲(第01周):基础知识(3课时)总目录 后一讲 1.2.2、十六进制算术运算逢十六进一、借一为十六(1).加法规则:两个一位数之和S&16时同十进制加法,若S≥16时用S-16及进位1取代S;(2).减法规则:一位数a-c=S, S&0时同十进制减法,若S&0时向高位借1,然后(a+16)-c; (3).乘法规则:用十进制乘法规则计算,结果用十六进制表示;注意:若16进制数最高位为字母,记录时在前面补0 =& OA34DH,382FH;第01讲(第01周):基础知识(3课时)总目录 后一讲 §1.3、几种基本的逻辑运算(按位操作)第01讲(第01周):基础知识(3课时)总目录 后一讲 例:X=00FFH Y=5555H,求Z=X?Y= ? X= 11 1111 B ? Y= 01 0101 B Z= 10 1010 B? Z=55AAH第01讲(第01周):基础知识(3课时)总目录 后一讲 §1.4、计算机中数和字符的表示1.4.1、计算机中有符号数的表示 机器数?在机器中,把一个数连其符号在内数值化表示的数;第01讲(第01周):基础知识(3课时)总目录 后一讲 1.4.2、数的常用表示法 ―― 原码 原码表示法:符号 + 绝对值 例:n = 8bit [+3]原码 = 0 000,0011 [- 3]原码 = 1 000,0011 [+0]原码 = 0 000,0000 [- 0]原码 = 1 000,0000反码补码= = = =03H 83H 00H 80H? 0 的表示不惟一反码表示法:正数的反码同原码,负数的反码数值位与原码相反 例:n = 8bit [+5]反码 = 0 000,0101 = 05H [- 5]反码 = 1 111,1010 = FAH [+0]反码 = 0 000,0000 = 00H [- 0]反码 = 1 111,1111 = FFH ? 0 的表示不惟一第01讲(第01周):基础知识(3课时)总目录 后一讲 补码表示法: 正数的补码: 同原码 负数的补码:(1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一第01讲(第01周):基础知识(3课时)总目录 后一讲 例: 机器字长8位,[- 46]补码 = ? [46]补码 = 0 0 1 0 1 1 1 0 按位求反
末位加1 1 1 0 1 0 0 1 0 = D2H ∴机器字长8位时,[- 46]补码 = D2H [+0]补码 = 0 0 0 0 0 0 0 0 按位求反
末位加1 0 0 0 0 0 0 0 0 = [- 0]补码 ? 0 的表示惟一补码的符号扩展规则 =& 高位不足者补符号位 eg:[+46]补 =
= 2EH = 1110 = 002EH [-46]补 =
= D2H = 0010 = FFD2H第01讲(第01周):基础知识(3课时)扩展成8位 扩展成16位 扩展成8位 扩展成16位总目录 后一讲 N位二进制有符号数补码的表示范围:-2N-1≤X≤2N-1-1 十进制 +127 +126 ... +2 +1 0 -1 -2 ... -126 -127 -128 二进制 n=8 11 1110 ... 00 00 11 1110 ... 00 00 十六进制 7F 7E … 02 01 00 FF FE … 82 81 80 十进制 n=16 +3 … +2 +1 0 -1 -2 … -3 -32768 7FFF 7FFE ... 00 FFFF FFFE ... 00 十六进制N位二进制无符号数的表示范围:0≤X≤ 2N -1第01讲(第01周):基础知识(3课时)总目录 后一讲 1.4.3、补码的加法和减法: 机器数用补码表示的目的是为了运算方便,先看下面的一个例子: X = +32D、Y = -96D 求(X+Y)的值和补码? 显然: [X]原 =
B [X]原 + [Y]原 =
B 然而:[X]补 + [Y] 补 =
B 结果显示:[X+Y]补 = [X]补+[Y]补 求补运算 ? 对一个二进制数按位求反、末位加一 加法规则:[X+Y]补码 = [X]补码 + [Y]补码 减法规则:[X-Y]补码 = [X]补码 + [-Y]补码 补码减法可转换为补码加法例:第01讲(第01周):基础知识(3课时)总目录 后一讲 1.4.4、进位和溢出进位: 由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。 溢出:表示结果超出了字长允许表示的范围, 一般会造成结果出错。第01讲(第01周):基础知识(3课时)总目录 后一讲 1.4.5、字符的表示 (1).机器中字符分类(2).ASCII码:用一个字节来表示一个字符, 低7位为字符的ASCII值, 最高位一般用作校验位。第01讲(第01周):基础知识(3课时)总目录 后一讲 第01讲:作业布置Page14: 书面作业?1.1(3)、 1.2(1)、 1.3(4) 1.4(3)、 1.5(6)、 1.6(1)第01讲(第01周):基础知识(3课时)总目录 后一讲 总目录第02讲:80×86计算机组织? 计算机系统? 存储器? 中央处理机? 外部设备第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录§2.1、80×86微处理器简介2.1.1、80x86微处理器的发展P表2.1(1968年美国Intel公司成立) 补充:1999年初 32位 PentiumⅢ芯片;注意各种芯片的位数; 2002年后 32 /64位 PentiumⅣ芯片; 2.1.2、基本术语: 晶体管数、主频、三总线(数据、地址、控制)、总线宽度、主存储器(内存)、 高速缓冲存储器、外部存储器; 2.1.3、基本常识: (1)、地址总线宽度与寻址空间: 8位二进制数?1个字节B;2个字节?1个字W;2个字?双字D; 地址线?K根可寻址2个存储单元; 若按“字节”编址?2个字节(即2B); 若按“字”编址?2个字(即2×2B=2B); 若按“双字”编址?2个双字(即2×4B=2B); Eg:32位地址总线、按字节编址、则寻址2B=2KB=2MB=2GB=4GB; (2)、Chche容量: 80386?少许、80486?8KB Pentium?8KB指令cache、8KB数据cache; Petium Pro?8KB指令cache、8KB数据cache、356KB二级cache; PentiumⅡ、Ⅲ、Ⅳ更多;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录§2.2、基于微处理器的计算机系统组成硬件组成:2.存储器 1.中央处理 机 CPU 总线控制 逻辑 系 统 总 线 大容量 接 口 存储器. . .接 口. . .I/O设备 3.I/O子系统软件:系统软件 用户软件第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录软件组成:(1).系统软件?厂家提供给用户的一组程序、为用户程序服务; 主要有:操作系统、I/O驱动程序、文件管理程序、文本编辑程序、翻译程序(汇编程序、编译程序、解释程序);汇编语言 高级语言注意?汇编语言与硬件有关、高级语言与硬件无关; (2).用户软件?用户编写的程序及相关的文档;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录§2.3、中央处理器(CPU) 2.3.1、中央处理器CPU的组成 :运算器、控制器、寄存器组等 ①、运算器?算术逻辑部件(ALU):算术运算、逻辑运算; ②、控制器?产生控制信号、控制所有部件; ③、寄存器组?暂存指令运行所需的信息:操作数、地址、 中间结果、最终结果、预取指令等; 2.3.2、80x86寄存器组 1、寄存器组分类: ①、程序可见寄存器? “通用寄存器”、 “专用寄存器”、 “段寄存器” ②、程序不可见寄存器?用户不可操作、CPU专用;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录80x86的寄存器结构数据寄存器 指针寄存器 变址寄存器控制寄存器第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录2、通用寄存器组简介(8个)?分8位、16位、32位(1). 累加器 (EAX、AX 、 AH、AL)?除通用外、乘/ 除指令的操作数、算术运算 结果和操作数、I/O与CPU传送信息; (2).基址变址寄存器(EBX、BX、BH、BL)?除通用外、存放基址 (3).计数寄存器(ECX、CX、CH、CL)?除通用外、计数功能; (4).数据寄存器(EDX、DX、DH、DL)?除通用外、与累加器组合成双字或四字 长数(DX:AX,EDX:EAX)、存放I/O端口地址; (5).堆栈指针寄存器(ESP、SP)?除通用外,存放堆栈指针; (6).基址指针寄存器(EBP、BP)?除通用外、与SS联合确定”栈”中单元; (7).源变址寄存器(ESI、SI)?除通用外、与DS联用确定数据段中单元; (8).目的变址寄存器(EDI、DI)?除通用外、与DS联用确定数据段单元: 注意:变址寄存器(7)、(8)有自增自减功能。第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录3、专用存储器简介(3个)?16位/32位 (1).指令指针寄存器(EIP/IP)?存放即将运行的下一条指令偏移地址;它与段 存储器CS联合确定代码段中指令的物理地址; (2).堆栈指针寄存器(ESP/SP)?除通用外,存放堆栈指针; (3).标志寄存器(EFLAGS/FLAGS)?又名“程序状态寄存器”,存放条件运行时 的“条件码标志、控制标志、系统标志”(状态字) ?条件码标志 (6 个)?程序运行结果和状态信息,可作为程序转移与处理控制 的条件; ?溢出标志OF?溢出时为1(OV),不溢出时为0(NV); ?符号标志SF?标识结果正负,正为0(PL),负为1(NZ); ?零标志ZF?结果是否为0,是为1(ZR),否为0(NZ); ?半进位标志AF?运算时第3位是否发生进/借位,是为1(AC),否为0(NA); ?奇偶标志PF?结果中的1的个数是否为偶,是为1(PE),否为0(PO); ?进位标志CF?最高位是否发生进/借位,是为1(CY),否为0(NC); ?控制标志(方向标记DF)?DF=1则表明变址寄存器SI和DI递减; DF=0则表明变址寄存器SI和DI 递增; ?系统标志?用于I/O、中断屏蔽、程序调试、任务切换等;主要有: TF→陷阱标志;IF→中断标志;IO→PLI/O特权标志等;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录标志寄存器 ( FLAGS)符号 OF SF ZF CF AF PF条件码标志 标志名 值为1 值为0 溢出标志 OV NV 符号标志 NG PL 零标志 ZR NZ 进位标志 CY NC 辅助进位标志 AC NA 奇偶标志 PE PO符号 DF IF TF控制标志 标志名 值为1 值为0 方向标志 DN UP 中断标志 EI DI 陷阱标志 没定义例:ADDAX, BXJO / JC ERROR ?第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录4、段寄存器组(4个/6个)简介?都是16位: 代码段CS、数据段DS、堆栈段CS、附加段ES、附加数据段(FS和GS);第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录§2.4、存储器的存储单元地址和存储内容2.4.1、存储单元的物理地址: Def:为了便于读写信息,内存中按照字节编址即每个字节有一个唯一编号, 该编号位该单元的物理地址; 注意:字节编址、二进制表示、十六进制书写;参见图(2.5)?存储器以字节(8bit)为编程单位?每个字节单元都有唯一的地址编码?地址用无符号整数来表示(编程用十六进制表示) ?一个字要占用相继的两个字节?低位字节存入低地址,高位字节存入高地址?对字,双字,四字单元的地址一律以最低字节地址表示 ?机器以偶地址访问(读 /写)存储器第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录2.4.2、存储单元中的内容:Def:逻辑地址?段地址和偏移地址统称逻辑地址; 若:X单元存放的内容是Y单元的地址,则Y单元的内容表示为:(Y)=((X)) 字节,字,双字,四字长内容在存储器中的存储形式?低对低,高对高 字节内容(10000H)=9FH; (10001H)=26H 访问一次内存 字内容 (10000H)=269FH;(10001H)=4826H 访问两次内存 双字内容(10000H)=FH;(10001H)=5C83 4826H 访问四次内存第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录2.4.3、实模式存储器寻址(寻址?如何形成物理地址)(1)、def:实模式?采用16位段地址和16位地址偏移形成20位物理地址; 最大寻址空间1MB,最大分段为64KB的存储器寻址方式? def:保护模式?采用16位段地址和32位偏移地址形成32位物理地址; 最大寻址空间为4GB,最大分段为4GB的存储器寻址方式; (2)、存储器地址分段: 20 根地址线: 地址范围 00000H~FFFFFH (1MB) 机器字长16位:仅能表示地址范围 0000H~FFFFH(64KB) 小段:每16个字节为一小段,共有64K个小段 小段的首地址 00000 H ~ 0000F H 00010 H ~ 0001F H 00020 H ~ 0002F H ? ? ? ? ? ? FFFF0 H ~ FFFFF H 段起始地址(段基址)?每一小段起始地址的高16位(低4位为0); 偏移地址(有效地址:EA)?段内相对于段起始地址的偏移值; 64K 范围内的任意字节;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录(3)、实模式寻址方式: 16d?段基址 + 偏移地址(EA) = 物理地址(PA) 16位 16位 20位 即:16位段基址左移4位后加16位偏移地址形成20位物理地址(硬件自动实现) 例:(DS) = 2100H, (EA)=(BP) = 0500H 则:(PA) = 2H = 21500H (4)、段寄存器(16位)?专门存放段基址的寄存器; ①、CS?存放当前正在运行的程序段基址; ②、DS?存放当前正在运行的程序所用到的数据段基址; ③、SS?存放当前使用的堆栈段的栈底(高地址); ④、ES?存放附加的数据段基址; 注意:①、每个段寄存器定义的段可以独占64KB,也可重叠(见图2.9); ②、段寄存器与其对应存放偏移地址的寄存器之间有默认关系(见表2.3与表2.4)第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录2.4.4、保护模式下存储器寻址 16位选择器的值经过操作系统的地址转换操作变成32位的段地址,然后 加上32位的偏移地址而形成了32位的物理地址; 支持多任务处理功能支持虚拟存储器特性存 储 器段基地址32所选存储单元所选段逻辑地址选择器16 偏移地址 32描 述 符64描述符表保护模式下的存储器寻址第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录2.4.5、寄存器与存储器的比较:寄 存 器 在CPU内部 访问速度快 容量小,成本高 用名字表示 没有地址存 储 器 在CPU外部 访问速度慢 容量大,成本低 用地址表示 地址可用各种方式形成第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录§2.5、外部设备1、外部接口组成:由一组“寄存器”及相关“控制电路组成”; ①、数据寄存器?存放主机与外设交换的数据; ②、状态寄存器?存放外设和接口的当前状态信号; ③、命令寄存器?存放CPU给外的控制命令;2、Def:端口地址(又称“端口号” )外设寄存器的地址(即编号) ①、编址方式?独立编址、混合编址; ②、80x86I/O地址空间为64KB(即65536个B) 外设中每个寄存器有一个端口 (Port) 地址,构成一个独立于内存的 I/O 地址空间:0000H~FFFFH 3、外设的例行程序?通过中断方式转入的子程序,它完成一定的I/O功 能;分两种:BIOS和DOS;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录第02讲 作业布置Page33: 书面作业? 习题2.2、习题2.3、习题2.4、 习题2.5、习题2.8;第02讲(第02周):80×86计算机组织(3课时)前一讲 后一讲 总目录第03讲:80×86寻址方式第3章、80x86指令系统和寻址方式教学要求: 1.掌握一般指令系统的基本概念:指令格式、功能和 注意事项。 2.重点掌握指令系统中,各指令的格式、 寻址方式、指令类型 。3.了解其他(奔腾等)的寻址方式和指令类型。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录§3.1、指令系统的基本概念3.1.1、指令系统计算机的指令系统就是指该计算机能够执行的全部指令的集合。 每种计算机都有它支持的指令集合。16位8086指令系统是整个Intel 80x86 系列微处理器指令系统的基础。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3.1.2指令格式 指令由操作码和操作数两部分组成。 操作码 操作数 ????? 操作数操作码?说明计算机要执行哪种操作,如传送、运算、移 位、跳转等操作,它是指令中不可缺少的组成部分。 操作数?是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两个操 作数,也有个别指令有三个甚至四个操作数,通常称为一地 址指令、二地址指令、三?第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3.1.3学习指令的注意事项指令的功能――该指令能够实现何种操作。通常指令助记符 就是指令功能的英文单词或其缩写形式。 指令支持的寻址方式――该指令中的操作数可以采用何种寻 址方式。 指令对标志的影响――该指令执行后是否对各个标志位(OV、 ZF、CF、PF等)有影响,以及如何影响。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录§3.2、80x86寻址方式 3.2.1 寻址、寻址方式的概念 寻址就是寻找操作数的地址。 寻址方式就是寻找操作数的方法。 操作数可以跟随在指令操作码之后,称为立即数. 操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数. 绝大多数的操作数存放在内存储器中,称为存储器操作数. 指令指定操作数的位置,即给出地址信息,在执行时需要 根据这个地址信息找到需要的操作数.第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3.2.2 80X86的指令格式 指令助记符 [操作数1[,操作数2[,操作数3]]][;注释]指令助记符体现该指令的功能,它对应一条二进制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作数,也可以有一个、二个 或三个操作数。 80X86寻址方式分类: 寻址的中心问题如何确定“偏移地址”的值; 第一类:与数据有关的十种方式?①立即寻址、②寄存器寻址、③直接寻址、 ④寄存器间接寻址、⑤寄存器相对寻址、⑥基址变址寻址、⑦相对基址变址寻 址、⑧比例变址寻址、⑨基址比例变址寻址、⑩相对基址比例变址寻址; 第二类:与转移地址有关的四种寻址方式?①段内直接寻址、②段内间接寻址、 ③段间直接寻址、④段间间接寻址; 说明:同一指令的多个操作数可各自采用不同的寻址方式。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3.2.3与数据有关的寻址方式与寻址方式有关的基础知识简介: (1) 、有效地址 (EA)?指令直接或间接指明的存放操作数的内存单元的偏移 地址: EA = 基址+(变址*比例因子)+位移量 注意:上述公式中四种成分的不同组合形成八种寻址方式 ①基址(base)?存放在“基址寄存器”中;可正可负;主要用于存放数组或 字符串首址; 16位基址寄存器:BX、BP. 32位基址寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI. ②变址 (index)?存放在“变址寄存器”中;可正可负;主要用于访问数组 中某元素或字符串中某一元素. 16位变址寄存器:SI、DI. 32位变址寄存器:除ESP以外的七个32位通用寄存器. ③比例因子(scale factor)?只与变址寄存器联用;只能为1、2、4或8; 注意:只能是32位寻址,没有16位寻址; ④位移量 (displacement)? 存放在指令中的一个 8 位、 16 位、32 位地址偏移 部分;可正可负;第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录(2)、段超越前缀?形成物理地址时,段寄存器与访存类型之间有默认匹配 关系,但有时可以使用段超越前缀来改变默认关系(参见P39表3.2); 格式:MOV AX,ES:[2000H] 特别注意:但以下三种情况不允许使用段超越前缀 ①串处理指令的目的串?ES段; ②取指指令?CS段; ③PUSH的目的和POP的源?SS段;第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录以 MOV 指令为例: ① 立即寻址 ② 寄存器寻址 ③ 直接寻址 ④ 寄存器间接寻址 ⑤ 寄存器相对寻址 ⑥ 基址变址寻址 ⑦ 相对基址变址寻址 MOV MOV MOV MOV MOV MOV MOV AX , 3069H AL , BH AX , [2000H] AX , [BX] AX , COUNT[SI] AX , [BP][DI] AX , MASK[BX][SI]⑧ 基址比例变址寻址MOVEBX,[EAX][EDX*8]EAX,TABLE[EBP][EDI*4]⑨ 相对基址比例变址寻址 MOV第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录1)立即寻址方式→没有EA定义:操作数作为指令的一部分而直接写在指令中,这种操 作数称为立即数,这种寻址方式也就称为立即数寻址方式。 汇编格式:n(n为立即操作数,是用8位或16位二进制补码表 示的有符号数) 实列:MOV AH,5 MOV AH, 05H MOV AX,3064H MOV EAX,H 功能:操作数存放在存储器,指令下一单元的内容为立即操 作数n。 图形表示: 指令 操作数 n第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.1】MOVAX, 4576H执行后(AX)=?该例中源操作数为立即寻址方式,立即数为4576H,存放在 指令的下一单元。执行:4576H→AX 执行后:(AX)=4576H第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录2)寄存器寻址方式→没有EA 定义:指令所要的操作数已存储在某寄存器中,或把目标操作 数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助 记符)的寻址方式称为寄存器寻址方式。 汇编格式:R (其中R表示寄存器名,如AX、BX等。) 实例: MOV AX, BX 功能:操作数直接存放在寄存器R中。 图形表示:指令 寄存器寄存器 R操作数第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录指令中可以引用的寄存器及其符号名称如下:8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等; 32位寄存器:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP。 注意:由于指令所需的操作数已存储在寄存器中,或操作的结 果存入寄存器,这样,在指令执行过程中,会减少读/写存储器 单元的次数,所以,使用寄存器寻址方式的指令具有较快的执 行速度。通常情况下,提倡在编写汇编语言程序时,应尽可能 地使用寄存器寻址方式,但也不要把它绝对化。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.2】下列程序执行后,(AX)=?,(BX)=? MOV AX,1234HMOVADDBX,5678HAX,BX执行: AX←1234H 执行: BX←5678H 执行: AX←(AX)+(BX) 执行后:(AX)=68ACH,(BX)=5678H第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3)直接寻址方式→EA=位移量定义:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有 效地址,这种寻址方式为直接寻址方式。 汇编格式:含有变量的地址表达式。功能:指令下一字单元的内容是操作数的偏移地址EA。图形表示:指令 EA段基地址 存储器 + 操作数第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.3】执行指令:MOVBX ,[1234H]设(DS)=2000H。执行后:(BX)=?CS→ 34 OP H 12H DS:2000H + H执行:BX←(21234H)…执行后:(BX)= 5213H… ~ ~ DS→ 2H … 13H 52H5213第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但 如果使用段超越前缀,那么,操作数可存放在其它段。 例如:MOV ES:[1000H], AX第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录注意:立即寻址方式和直接寻址方式的书写格式不同,直接 寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通 常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存 字变量; 试比较下列指令中源操作数的寻址方式(VARW是内存字变量):MOV AX, 1234H MOV AX, [1234H] 前者是立即寻址,后者是直接寻址 两者是等效的,均为直接寻址MOV AX, VARW MOV AX, [VARW]第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录4)寄存器间接寻址方式→EA=基址/变址定 义:操作数在存储器中,操作数的有效地址用SI、DI、 BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间 接寻址方式。 汇编格式:[R] 格式示例:MOV AX,[BX] 或 MOV AX,ES:[BX] 功 能:寄存器R存放操作数的偏移地址EA。 图形表示:段基地址指令 基址或变址寄存器 寄存器 EA + 存储器 操作数第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.4】假设有指令:MOV BX, [DI],在执行时,(DS)=1000H, (DI)=2345H,存储单元12345H的内容是4354H。问执行指令后,BX 的值是什么?解:寄存器DI的值不是操作数,而是操作数的地址。 该操作数的物理地址应由DS和DI的值形成,即: PA=(DS)*16+DI=5H=12345H。该指令的执行效果是:把从物理地址为12345H开始的 一个字的值传送给BX。 BX 43 54DS:1000H +DI:HCS→ … OP … ~ ~ ~ ~DS→ 10000H12345H … 54H 43H第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录在不使用段超越前缀的情况下,有下列规定: ?若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;?若有效地址用BP来指定,则其缺省的段寄存器为SS(即: 堆栈段)。该寻址方式物理地址的计算方法如下:BX 物理地址PA=16×DS + 或 物理地址PA=16×SS+ BP第03讲(第03周):80×86寻址方式(3课时)SIDI前一讲 后一讲 总目录5)寄存器相对寻址方式→EA=基址/变址+位移量定 义:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄 存器(SI、DI)的内容和指令中的8位/16位偏移量之和。 汇编格式:X[R](位移量X,是8位或16位二进制补码表示的有符号数) 格式示例:MOV AX,COUNT[SI] 或 MOV AX,3000H[SI] MOV AX,[COUNT+SI] 或 MOV AX,[3000H+SI] MOV AX,ES:COUNT[SI] 或 MOV AX,ES:[COUNT+SI] 功能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。 图形表示: 指令 段基地址基址或变址寄存器 位移量存储器EA寄存器 地址++操作数第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.5】假设指令:MOV BX, [SI+100H],在执行它时,(DS)=1000H, (SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后,BX 的值是什么? 解:EA=(SI)+100H=H=2445H PA=(DS)×16+EA=1000H×16+H。 所以,该指令的执行效果是: 把从物理地址为12445H开始 的一个字的值传送给BX。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录6)基址变址寻址方式→EA=基址+变址定 义:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP) 和 一个变址寄存器(SI、DI)的内容之和。 汇编格式: [BR+IR] 格式示例:MOV AX,[BX][SI] 或 MOV AX,[BX+SI] MOV AX,ES:[BX][SI] 或 MOV AX,ES:[BX+SI] 功能:操作数存放在存储器,BR的内容加IR的内容是操作数的偏移地址EA。 图形表示: 指令基址寄存器 变址寄存器 变址寄存器 变址值 EA段基地址存储器 + +操作数基址寄存器 基址值第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【 例 3.6】 假 设 指 令 : MOV BX, [BX+SI] , 在 执 行 时 , (DS)=1000H , (BX)=2100H ,(SI)=0011H ,内存单元 12111H 的内容为1234H 。问该指令 执行后,BX的值是什么?解:操作数的物理地址PA为: PA =(DS)*16+ (BX)+(SI) =00H+0011H =12111H 所以,该指令的执行效果是: 把从物理地址为12111H开始 的一个字的值传送给BX。BX:2100H +SI:0011H EA:2111H + DS: 1000H PA = 12111HCS→ … OP … ~ ~BX12 34DS→ 10000H … 1H第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录7)相对基址变址寻址方式→EA=基址+变址+位移量定 义:操作数在存储器中,其有效地址是一个基址寄存器 (BX 、 BP) 的值、一个变 址寄存器(SI、DI)的值和指令中的8位/16位位移量之和。 汇编格式:var[BR+IR] 格式示例:MOV AX,COUNT[BX][SI] 或 MOV AX,-46H[BX][SI] MOV AX,COUNT[BX+SI] 或 MOV AX,0246H[BX+SI] MOV AX,[COUNT+BX+SI] 或 MOV AX,[-56H+BX+SI] MOV AX,ES:COUNT[BX][SI] 或 MOV AX,ES:[0246H+BX+SI] 功 能:操作数存放在存储器,BR内容加IR内容加位移量X是操作数的偏移地址EA。 图形表示:第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【 例 3.7】 假 设 指 令 : MOV AX, [BX+SI+200H] , 在 执 行 时 , (DS)=1000H , (BX)=2100H , (SI)=0010H ,内存单元 12310H 的内容为 1234H。问该指令执行后,AX的值是什么? 解:该操作数的物理地址应由DS和EA的值形成; 即:PA=12310H 所以,该指令的执行效果是: 把从物理地址为12310H开始 的一个字的值传送给AX。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录? 跨段越问题凡是使用寄存器为BX、SI、DI时,其默认段为DS,使用BP时,默认段为SS。 该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须 用跨段前缀指明操作数的段寄存器名。 汇编格式:段寄存器名:操作数地址。 功 能:冒号“:”之前的段寄存器名指明操作数所在的段。 【例3.8】 MOV AX,DS:[BP] MOV CX,SS:[SI] 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地 址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址 分别为: PA1 =(DS)左移4位+[BP] PA2 =(SS)左移4位+ [SI]第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录8)相对比例变址寻址→EA=变址×比例因子+位移量格式: MOV EAX,MASK[ESI*4] 讲解:eg3.12 或 MOV EAX,[MASK+ESI*4]9)基址比例变址寻址→EA=基址+变址×比例因子格式: MOV EBX,[EAX][EDX*8] 或 MOV EBX,[EAX+EDX*8] 或 MOV EBX,[ESP][EAX*2]10)相对基址比例变址寻址→EA=基址+变址×比例因子+位移量格式: MOV EAX,TABLE[EBP][EDI*4] 或 MOV EAX,[TABLE+EBP+EDI*4] 8位/16位/32位的位移量注意1:比例因子只能与32位变址寄存器:EAX、EBX、ECX、EDX、EBP、ESI、EDI联用;且比例因子只能为1、2、4或8;注意2: 8)、9)、10)只能是32位寻址,没有16位寻址;第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录3.2.4、与转移地址有关的寻址方式用来确定转移指令及转子 (call) 指令的转向地址。转移地址是由各种 寻址方式得到的有效地址和段地址相加而成的,有效地址存入 IP 寄存器中, 段地址指定为CS段寄存器内容。 ? 段内寻址 段内直接寻址 JMP NEAR PTR NEXT 段内间接寻址 JMP TABLE [ BX ] ? 段间寻址 段间直接寻址 段间间接寻址JMP JMPFAR PTR NEXT DWORD PTR [ BX ]第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录(1).段内直接寻址转向的有效地址 = 当前(IP) + 位移量(8bit/16bit) 格式: JMP SHORT QUEST?短跳转 8位位移量 JMP NEAR PTP PROGIA ?近跳转 16位位移量 即:CS不变 (IP)← 当前(IP)+ 位移量(8bit/16bit) 位移量EAIP寄存器 +第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.8】 (1).JMP SHORT QUEST其中QUEST表示转移的符号地址,操作符SHORT表示是个8位带符号数,数 的范围是80H~7FH,即-128~+127。它只能相对于当前IP(转移指令的下一条 指令的首地址)所指的位置作-128~+127范围内跳转,所以称为短跳转。(2).JMP NEARPTRPROGA其中PROGA表示转移的符号地址,操作符NEAR PRT表示是个16位带符号数,数的范围是8000H~7FFFH,即-32768~+32767。它只能相对于当前IP所指的位置作-32768~+32767范围内跳转,所以称为近跳转。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录(2).段内间接寻址转向的有效地址是一个寄存器或存储单元的内容。可用除立即数以外的 任何一种数据寻址方式得到,所得到的转向的有效地址取代IP寄存器的内容。 格式: JMP BX 即: (IP)←寄存器的内容 JMP WORD PTR[BP+TABLE] 即: (IP)←存储器的内容 JMP DWORD PTR[EBP+TABLE] 即: (IP)←存储器的内容 注意:指令EA中是除立即数以外的任何寻址方式取得的16/32位偏移地址;指令数据寻址方式根据数据寻址 方式计算得到 的EA值转向的有效地址寄存器或转向的有效地址 存储单元 存储器第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.9】 已知: TABLE=20A2H ,(BX)=1256H ,(SI)=528EH,(DS)=2000H ,(232F8H)= 3280H ,(264E4H)=2450HJMP BX JMP WORD PTR TABLE[BX] JMP WORD PTR [BX][SI] ; (IP)=1256H ; (IP)=3280H ; (IP)=2450H第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录(3).段间直接寻址用指令中提供的转向段地址和偏移地址取代CS和IP。 格式:JMP FAR PTRNEXT功能:(CS)? NEXT所在段的基址;(IP)? NEXT所在段的段内偏移;即转到NEXT所在位置;指令 IP寄存器偏移地址段地址 CS寄存器第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.9】 JMP FARPTRNEXTROUNT第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录(4).段间间接寻址用存储器中的两个相继字的内容取代CS和IP,存储单元的地址可用存储 器寻址方式得到。 格式: JMP DWORD PTR [BX] //32位寻址类同;[EBX] JMP DWORD PTR [BX+MARK] //32位寻址类同;[EBX] JMP DWORD PTR [BX+SI] //32位寻址类同;[EBX] 注意:EA是除立即数寻址和寄存器寻址以外的任一寻址方式获得的有效地址存储器中的两个相继字指令 数据寻址方式根据数据寻址 方式计算出 EA值转向的有效地址 转向的有效地址IP CS第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录【例3.10】JMP DWORD PTR[INTERS+BX]若:DS=3000H,BX=1200H,INTERS=0020H, 则:存储单元的物理地址PA=+H指令执行前:CS=0000H,IP=1000H;(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。 指令执行后:CS=1000H,IP=0140H: (31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录指令JMP DWORD PTR [INTERS+BX] 的存储和执行情况:第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录§3.2、程序的占用空间和执行时间3.2.1、程序占用空间→变长指令:指令长度取决于指令类型和寻址方式; 无段超越时:16位格式指令占1~7个字节;32位格式指令占1~14个字节; 3.2.2、程序运行时间→取决于以下各个因素: 主频、体系结构、总线速度、外设速度等等;第03讲:作业布置Page33: 书面作业?习题3.1、习题3.4、习题3.5;第03讲(第03周):80×86寻址方式(3课时)前一讲 后一讲 总目录第04讲:数据传送类指令§3.3、80x86的指令系统80X86指令系统分为以下6组: 数据传送指令 算术指令 串处理指令 控制转移指令逻辑指令处理机控制与杂项操作指令在学习汇编指令时,指令的功能是我们学习和掌握的重点,但要准确、有效 地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。因此,对指令要掌握以下几个方面内容:?指令操作数的寻址方式; ?指令对标志位的影响、标志位对指令的影响; ?指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令 。第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录3.3.1、数据传送指令数据传送指令负责把“立即数、地址、存储单元中的数据”传送到寄存器、 存储器或端口号寄存器。它相对于高级语言里的赋值语句。 分以下五种:?通用数据传送指令:①.XCHG(交换); ②.MOV(传送)、MOVSX( 带符号传送)、MOVZX(带零扩展传送); ③.PUSH(进栈)、POP(出栈)、 PUSHA/PUSHAD(所有通用寄存器入栈)、POPA/POPAD(所有通用寄存器出栈)?累加器专用传送指令(输入输出):IN(输入)、OUT(输出)、XLAT(换码);LDS(指针送寄存器和DS); LSS(指针送寄存器和SS); LGS(指针送寄存器和GS);?地址传送指令: ①.LEA(有效地址寄存器)、 ②.LES(指针送寄存器和ES)、 ③.LFS(指针送寄存器和FS)、?标志寄存器传送:①.LAHF(标志送AH)、SAHF(AH送标志寄存器);②.DUSHF/DUSHFD(标志入栈)、POPF/POPFD(标志出栈); ?类型转换指令: ①.CBW(字节转换成字)、 CWD/CWDE(字转换成双字); ②.CDQ(双字转换成四字)、BSWAP(字节交换);第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录(一)、通用数据传送指令1、普通传送指令 :MOV DST,SRC (不影响标志位) 具体格式? MOV Reg/Mem,Reg/Mem/Imm 其中:Reg-Register(寄存器),Mem-Memory(存储器),Imm-Immediate(立即数), 它们可以是8位、16位。 具体功能:把源操作数(SRC)的值传给目的操作数(DST)。指令执行后,目的操作 数的值被改变,而源操作数的值不变。若存储单元是该指令的一个操作数时,该 操作数的寻址方式可以是任意一种存储单元寻址方式。 在汇编语言中,主要的数据传送方式如下图所示。虽然一条MOV指令能实现 其中大多数的数据传送方式,但也存在MOV指令不能实现的传送方式。 段寄存器 CS、DS、SS、ES ⑥ 存储器 ④ ⑤ ① 通用寄存器 8位或者16位 ② 立即数 8位或者16位 ③第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录对MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。(1)两个操作数的数据类型要相同,要同为8位、16位,如:MOV BL,AX等是不正确的; (2)两个操作数不能同时为段寄存器,如:MOV ES,DS等; (3)代码段寄存器CS不能为目的操作数,但可作为源操作数, 如:指令MOV CS, AX等不正确,但指令MOV AX,CS等是正确的; (4)立即数不能直接传给段寄存器, 如:MOV (5)立即数不能作为目的操作数,如:MOV (7)两个操作数不能同时为存储单元: 如:MOV VARA,VARB等,其中VARA和VARB是同数据类型的内存变量。 (6)指令指针IP不能作为MOV指令的操作数; DS,100H等;100H,AX等;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录2、带符号扩展传送指令:MOVSX DST,SPC(不影响标志位) 具体格式: MOVSX REG1,REG2 ? REG1为16位时,REG2为8位; ? REG1为32位时,REG2为16位; MOVSX REG32,MEM16? REG32为32位,MEM16为16位; 具体功能:(DST)?符号扩展(SRC)//8位符号扩展成16位、16位符号扩展成32位, 符号扩展就是高8/16位一律补符号位; 实例分析?eg3.25,eg3.26 3、带零扩展传送指令:MOVZX DST SRC(不影响标志位) 具体格式:MOVZX REG1,REG2 ?REG1为16位时,REG2为8位; ? REG1为32位时,REG2为16位; MOVZX REG32,MEM16?REG32为32位,MEM16为16位; 具体功能:(DST)?零扩展(SRC)//8位零扩展成16位、16位零扩展成32位,零扩展 就是高8/16位一律补0; 实例分析:?eg3.25,eg3.26第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录4、入栈指令:PUSH SRC(不影响标志位) 堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的 返回地址。它主要有两大类操作:进栈操作和出栈操作。 具体格式:PUSH data/reg/segreg/mem ?mem允许任何寻址方式,但8086不允许 立即数寻址; 具体功能:16位指令(SP)?(SP)-2,((SP)+1 ,(SP) )? (SRC)32位指令(ESP)?(ESP)-4,((ESP)+3,(ESP)+2,(ESP)+1,(ESP))?(SRC)即:堆栈指针先减2/4,然后将寄存器、段寄存器或存储器中的单/双字数 据压入堆栈;是单/双字取决于操作数的长度。5、出栈指令:POP DST(不影响标志位) 具体格式:POP reg/segreg/mem ? DST不是“立即数”和“CS”即可; 具体功能:16位指令(DST)?((SP)+1,(SP)),(SP)?(SP)+2;32位指令(DST)?((ESP)+3,(ESP)+2,(ESP)+1,(ESP)),(ESP)?(ESP)+4;即:先将栈顶单/双字元素弹出送至某一寄存器、段寄存器(除CS外)或 存储器,然堆栈指针加2/4 ;是单/双字取决于操作数的长度。第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录【例】PUSHAXSS=5000H→50000SP=2500H→ 52502【例】POP AX 与PUSH AX 的操作恰好相反第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录总结:(1)、80286及及其后机型的堆栈指针ESP/SP在指令执行前后始终的栈顶,即最后一个入栈的元素,且栈顶指针≤栈底指针;指向当前(2)、栈操作只能允许“字”或“双字”出/入栈,是字还是双字出/入栈由操作数长度决定;(3)、80286中PUSH SP指令入栈的是SP的新值,而80386及其后机型的PUSH SP/ESP指令入栈的是SP/ESP的旧值; (4)、PUSH 和POP指令中操作数寻址如果采用ESP为基址寄存器时,PUSH指令 采用ESP的旧值,而POP指令采用ESP的新值 实例1:若(ESP)=H,(DS)=2000H(设段转换为H) 求:PUSH [ESP] 和 POP [ESP]访问哪里? 例题分析?Eg3.29 ~Eg 3.32;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录6、所有通用寄存器入栈指令:PUSHA /PUSHAD(不影响标志)功能?将八个通用寄存器的值全部入栈,入栈次序如下: 16位:AX、CX、DX、BX、SP、BP、SI、DI依次入栈,然后(SP)?(SP)-16; 32位:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI依次入栈,然后(SP)?(SP)-32; 注意:(SP/ESP)进入栈的是PUSHA/PUSHAD执行前的内容 例题:PUSHA 执行前(AX)=1200H,(CX)=3400H,(DX)=5600H,(BX)=7800H,(SP)=8A00H, (BP)=00ABH,(SI)=00BCH,(DI)=00DEH;执行后(SP)=8BF0H,栈如下:7、所有通用寄存器出栈指令:POPA / POPAD(不影响标志)功能?将当前堆栈中连续的8个字/8个双字内容出栈并给相应的通用寄存器,出栈次序与 入栈PUSHA/PUSHAD反序,最后(SP)?(SP)+16/32; 注意:当出栈给SP/ESP时,内容丢失不送入SP/ESP;8、交换指令:XCHG OPR1,OPR2(不影响标志位)具体格式:XCHG REG1,REG2 ?通用寄存器与通用寄存器交换 XCHG REG,MEM ?通用寄存器与内存单元交换; 注意:交换双方可以是“字节”,“字”或“双字”内容,但两个操作数的长度必须相同。第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录㈡、累加专用传送指令:3条指令,仅限于使用AL,AX,EAX,用于ACC与I/O端 口交换数据,(不影响标志位); 9、输入指令:IN 累加器,端口号(不影响标志位) ①长格式(PORT为8位端口号)? IN AL,PORT 字节操作:(AL) ? (PORT) IN AX,PORT 字操作:(AX) ? (PORT+1, PORT) IN EAX,PORT 双字操作:(EAX) ? (PORT+3, PORT+2, PORT+1, PORT) ②短格式(DX中存放16位端口号)? IN AL,DX 字节操作:(AL) ? ((DX)) IN AX,DX 字操作:(AX) ? ((DX)+1, (DX)) IN EAX,DX 双字操作:(EAX) ? ((EDX)+3, (EDX)+2, (DX)+1, (EDX)) 例题分析?eg36;eg37; 注意:该指令的作用是从端口中读入一个字节/字/双字,并保存在寄存器AL/AX /EAX中。如果某输入设备的端口地址在0~255范围之内,那么,可在指令IN中 直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来 给出其端口地址。第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录例1 : IN AL,60H;从端口60H读入一个字节到AL中; IN AX,20H;把端口20H、21H按“高高低低”组成的字读入AX; 例2 : MOV DX,2F8H IN AL,DX;从端口2F8H读入一个字节到AL中; IN AX,DX;把端口2F8H、2F9H按“高高低低”组成的字读入AX;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录10、输出指令:OUT 累加器,端口号(不影响标志位) ①长格式(PORT为8位端口号)? OUT PORT, AL 字节操作:(AL) ? (PORT) OUT PORT,AX 单字操作:(AX) ? (PORT+1, PORT) OUT PORT,EAX 双字操作:(EAX) ? (PORT+3, PORT+2, PORT+1, PORT) ②短格式(DX中存放16位端口号)? OUT DX,AL 字节操作:(AL) ? ((DX)) OUT DX, AX 单字操作:(AX) ? ((DX)+1, (DX)) OUT DX, EAX 双字操作:(EAX) ? ((EDX)+3, (EDX)+2, (DX)+1, (EDX)) 例题分析?eg38; 注意: ①.80×86的所有I/O端口与CPU通信必需用IN/OUT指令借助累加器(AL, AX, EAX)收发信息; ②.I/O端口最多65536个,当端口号小于256时既可以长格式又可用短格式,否则 必需用短格式; ③.是“字节” 、“字”还是“双字”操作,取决于累加器ACC的长度;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录例1: OUT 61H,AL;把AL的内容输出到端口61H中 OUT 20H,AX;把AX的内容输出到端口20H、21H中 例2: MOV DX,3C0H OUT DX,AL;把AL的内容输出到端口3C0H中 OUT DX,AX;把AX的内容输出到端口3C0H、3C1H中 11、换码指令:XLAT OPR 或 XLAT(不影响标志位) 若表格首地址的偏移已存入BX/EBX时OPR可省去 功能?16位指令:(AL) ?((BX) + 零扩展(AL)); 32位指令:(AL) ?((EBX) + 零扩展(AL)); 即:把BX的值作为内存字节数组首地址、下标为AL的数组元素的 值传送给AL。 用法?把一种代码转换为另一种代码,使用前把需要换的码存入AL中, 需要转换成的目标码存放于偏移地址为(BX/EBX)+(AL)的单元中; 实例分析?eg3.39;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录例:把AL中的一位数转换成对应的ASCII码 MOV BX,offset table ;指令执行后 (BX)=0040H MOV AL,3 XLAT ;指令执行后 (AL)=33HDS=F000H→ 数据段把BX的值作为内存字节数 组首地址、下标为AL的数 组元素的值传送给AL。table (BX)→ 30H 31H 32H 33H F F(AL)=3第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录㈢、地址传送指令:6条,(不影响标志位) 12、有效地址传送寄存器指令:LEA REG16/32,SRC 功能:(REG)?SRC;即把源操作数SRC的有效地址值EA送入通用寄存器。 注意:①.SRC可使用除“立即数寻址和“寄存器寻址”以外的任何一种寻址方式 eg:LEA AX,LIST ;执行的操作:(AX)?LIST的偏移 LEA AX,[BX+SI+0F62H] ;执行的操作:(AX)?(BX)+(SI)+0F62H ②.若计算得到的EA长度小于目的寄存器长度,则零扩展;若计算得到的EA 长度大于目的寄存器长度,则截取低16位; ③.MOV REG16/32,OFFSET LIST 等价于 LEA REG16/32,LIST 而 MOV REG16/32,SEG LIST 是取符号LIST所在段的段地址送给通用寄存器 实例分析?eg3.40和 eg3.41;13~17:指针送通用寄存器和段寄存器:LDS,LES,LFS,LGS,LSS 格式?LDS REG16/32,SRC //注意: SRC只能是“存储器寻址”,即取内存中内 容 功能?(REG16)?(SRC)单字;然后(DS)?(SRC+2)单字; (REG32)?(SRC)双字;然后(DS)?(SRC+4)单字; 实例分析?eg3.42、 eg3.43; 说明?LES LFS LGS LSS类同LDS;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录例:假设(DS)=3000H,(BX)=1000H,(SI)=019EH.内存如右图所示,则下列指令序列 的执行结果依次如下所示 MOV CX,TABLE MOV 执行后: DX,OFFSET TABLE 执行后: DX,TABLE 执行后: BX,[BX+SI+0063H] 执行后: SI,[1200H] 执行后: (CX)=0D0EH (DX)=11FFH (DX)=11FFH (BX)=1201H (SI)=0C0DH (DS)=0A0BHLEALEALDSLES DI,[BX] 执行后:(DI)=0302H (ES)=0504H第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录㈣、标志寄存器传送指令:4条 18、标志送AH指令:LAHF ;(不影响标志位) 功能:(AH)?(FLAGS低8位) 19、AH送标志寄存器指令: SAHF;(修改标志寄存器低8位) 功能:(FLAGS低8位)?(AH) 20、标志入栈指令: PUSHF/PUSHFD;(不影响标志位) 功能:PUSHF ?(SP)?(SP)-2, 然后((SP)+1,(SP))?(FLAGS)低16位; PUSHFD?(ESP)?(ESP)-4,然后VM和RF位清零,其他位不变后32位入栈 ((ESP)+3,(ESP)+2,(ESP)+1,(ESP))?(EFLAGS and OFCFFFFH) 21、标志出栈指令: POPF/POPFD; (修改FLAGS内容) 功能:POPF ?(FLAGS)16?((SP)+1,(SP)),然后(SP)?(SP)+2; POPFD?(EFLAGS)32?((ESP)+3,(ESP)+2,(ESP)+1,(ESP)), 然后(ESP)?(ESP)+4;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录㈤、类型转换指令:4条(不影响标志位) 22、字节转换为字指令:CBW 功能?(AX)?将(AL)符号扩展成字; 23、字转换为双字指令:CWD/CWDE 功能?(DX:AX)?将(AX)符号扩展成双字; (EAX) ?将(AX)符号扩展成双字;24、双字转换为四字指令:CDQ功能?(EDX:EAX)?将(EAX)符号扩展成四字; 25、字节交换指令(486及其后机型):BSWAP REG32功能?将32位通用寄存器REG32中四个字节反序:1、4字节交换,2、3字节交换实例分析?BSWAP EDX 执行前(EDX)=H,执行后(EDX)=H第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录第04讲、作业布置Page108: 书面作业?3.10、3.11、3.17(4);3.18、3.19;第04讲(第04周):数据传送类指令(3课时)前一讲 后一讲 总目录第05讲:算术指令、逻辑指令和串处理指令3.3.2、算术指令算术运算指令:反映CPU计算能力的一组指令,也是编程时常使用的一组指令。 包括:加、减、乘、除及其相关的辅助指令(共21条指令 )。 ?加法指令?ADD、ADC、INC、XADD(交换并相加) ; ?减法指令?SUB、SBB、DEC、NEG、CMP、 CMPXCHG(比较并交换) 、CMPXCHG8B(比较并交换8字节) ; ?乘法指令?MUL、IMUL; ?除法指令?DIV、IDIV; ?十进制调整指令?两类6条: ?.压缩BCD码调整指令:加法调整(DAA)、减法调整(DAS) ; ?.非压缩BCD码调整指令:①.ASCⅡ加调整(AAA)、ASCⅡ减调整(AAS)、 ②.ASCⅡ乘调整(AAM)、ASCⅡ除调整(AAD); 算术运算指令的操作数可以是8位、16位。当存储单元是该类指令的操作数时, 该操作数的寻址方式可以是任意一种存储单元寻址方式。寻址方式如下: ?.单操作数时:不能立即寻址,其他寻址均可; ?.双操作数除原操作数为立即数以外,必须至少有一个是寄存器寻址;第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录标志寄存器FLAGS的介绍1.指令运行对标志寄存器FLAGS有以下三种作用: ?.影响标志位?根据运行结果修改相应标志位; ?.不影响标志位?指令运行前后,标志位保持不变; ?.标志位无定义?指令运行后,标志位变化不定; 指令的执行与标志有很大关系。 2.标志分成两类: ?状态标志?用来记录程序运行结果的状态信息,许多指令的执行都将相应 地设置它。它们分别是: OF SF ZF AF PF CF (状态标志又称条件标志) ?控制标志?可由程序根据需要用指令设置,用于控制处理器执行指令的方 式。它们分别是:DF IF TF3.加/减法指令对各个状态标志的定义如下:第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录加/减法指令对6个状态标志的定义?.进位标志CF(Carry Flag)?当运算结果的最高有效位有进位(加法)或借位(减 法)时,进位标志置1,即CF=1;否则CF=0。 例如:3AH+7CH = B6H,没有进位:CF=0;9CH-7DH = 1FH,没有借位:CF=0; 0BAH+7CH= (1)36H,有进位:CF=1;12H-21H = (1)F1H,有借位:CF=1; ?.奇偶标志PF(Parity Flag)?当加减运算结果最低字节中“1”的个数为零或 偶数时,PF=1;否则PF=0。 例如:013AH+127CH=0110B,结果最低字节中有5个1,是奇数:PF=0 213AH-B,结果最低字节中有4个1,是奇数:PF=1 注意:无论是多少位操作,PF标志仅反映最低8位中“1”的个数是否为偶数。 ?.辅助进位标志AF(Auxiliary Carry Flag) ?运算时D3位(最低半字节)有进位 或借位时,AF=1;否则AF=0。 例如:3AH+7CH=B6H,D3有进位:AF=1; 111010B=B,D3无借位:AF=0; 注意:AF标志主要由处理器内部使用,用户不必关心;第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录?.零标志ZF(Zero Flag)?若加减运算结果为0,则ZF=1,否则ZF=0;即:ZF表 示加减运算结果是否为0; 例如:3AH+7CH=B6H,结果不是零:ZF=0 而 84H+7CH=(1)00H,结果是零:ZF=1; 8AH-7CH=0EH,结果不是零:ZF=0 而 84H+84H=00H,结果是零:ZF=1; ?.符号标志SF(Sign Flag)?加减运算结果最高位为1,则SF=1;否则SF=0。 例如: 3AH + 7CH=B6H,最高位D7=1:SF = 1 86H + 7CH=(1)00H,最高位D7=0:SF = 0 注意:有符号数利用最高有效位表示数据的符号。所以,最高有效位就是符号标 志的状态。 ?.溢出标志OF(Overflow Flag)?加减法定义不同: 加法定义:两操作数最高位相同,而结果最高位与其相反是OF=1,否则OF=0; 减法定义:两操作数最高位不同,而结果的最高位与减数的最高位相同,则 OF=1,否则OF=0; 例如:3AH + 7CH = B6H,OF = 1;AAH + 7CH =(1)26H,OF = 0; 3AH - 7CH =(1)BEH,OF = 0;AAH - 7CH =2EH,OF = 1; 问题:什么是溢出?溢出和进位有什么区别?如何判断是否溢出?第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录举例:n=8 bit 带符号数(-128~127),无符号数(0~255)超出此范围则溢出加减法溢出判断方法? 有符号数看OF位(OF =1溢出); 无符号数看CF位(CF =1溢出);第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(一)、加法指令 1、不带进位加法指令: ADD DST,SRC(影响flags的6个状态标志位) 功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不变 执行操作:(DST)←(SRC)+(DST) 2、带进位加法指令:ADC DST,SRC(影响flags的6个状态标志位) 功能:将目的操作数加源操作数再加低位进位,结果送目的地址。 执行操作:(DST)←(SRC)+(DST)+CF 3、加1指令:INC OPR(影响flags的CF以外的5个状态标志位) 功能:将目的操作数加1,结果送目的地址。 执行操作:(OPR)←(OPR)+1 4、交换并相加指令:XADD DST,SRC (影响flags的6个状态标志位) 功能:将目的操作数与源操作数交换后相加,再把结果存入目的地址中,源地址 的内容不再改变。 执行操作:第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录【例1】加1指令: 例如: INC DWORD PTR job //(job)←(job)+1;可能溢出 INC AL //(AL)←(AL)+1;可能溢出 【例2】双字加法运算,设目的操作数存放在DX和AX寄存器中,其中DX放高位字,源操作数存放在BX和CX寄存器中,其中BX放高位字,指令执行前:(DX)=0020H,(AX)=0F365H,(BX)=0005H, (CX)=0E024H。 ADD AX,CX ;执行后(AX)=0D389H,CF=1,(CX)=0E024HADCDX,BX ;执行后(DX)= 0026H,CF=0,(BX)= 0005H第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(二)、减法指令5、不带借位减法指令:SUB DST,SRC (影响flags的6个状态标志位) 功能:目的操作数减去源操作数,结果存于目的地址,源地址的内容不变。 执行操作:(DST)?(DST)-(SRC) 6、带借位减法指令: SBB DST,SRC (影响flags的6个状态标志位) 功能:目的操作数减源操作数再减低位借位CF,结果送目的地址 执行操作:(DST)?(DST)-(SRC)- CF 7、减1指令: DEC OPR (影响flags的CF以外的5个状态标志位) 功能:将目的操作数减1,结果送目的地址。 执行操作:(OPR)?(OPR)-1 8、求补指令:NEG OPR(影响flags的6个状态标志位,对CF的影响是: 若操作数OPR为0时,求补后CF=0,否则CF=1) 功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。 执行操作:(OPR)? -(OPR)或理解为(OPR)? 0-(OPR) 9、比较指令:CMP OPR1, OPR2(影响flags的6个状态标志位) 功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。 执行操作:(OPR1)-(OPR2) //OPR1不能是立即数寻址;OPR1与OPR2必须等长; 10、比较并交换指令:CMPXCHG DST,REG8/16/32(影响flags的6个状态标志位) 功能:DST与累加器AL/AX/EAX比较,即(DST)-(ACC)//DST不能是立即数寻址; DST与REG必须等长; 若(ACC)=(DST),则ZF=1且(DST)?(REG8/16/32) 若(ACC)≠(DST),则ZF=0且(ACC)?(DST) 11、比较并交换8字节指令:CMPXCHG8B MEM64(只影响flags的ZF位) 功能:(MEM64)与(EDX:EAX)比较,即(MEM64)-(EDX:EAX) 若(MEM64)=(EDX:EAX)则ZF=1且(MEM64)?(EDX:EAX) 若(MEM64)≠(EDX:EAX)则ZF=0且(EDX:EAX)?(MEM64)第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录【例1】求补运算。 MOV NEG DX,6780H DX;(DX)=9880HCF←1 0 0 0 0H-) 6780H9880H【例2】比较AL的内容数值大小。 CMP JB SUB INC AL,50 ;(AL)- 50 Bellow ;(AL)&50,转到Bellow处执行 AL,50 ;(AL)&=50, AL←(AL)-50 AH ;(AH)+1→AH ?Bellow:第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(三)、乘法指令:2条(只定义OF和CF位,其它没定义) 12、无符号数乘法指令:MUL SRC (被乘数ACC必须与乘数SRC等长) 功 能:字节操作?(AX)?(AL)×(SRC8) 单字操作?(DX:AX)?(AX)×(SRC16) 双字操作?(EDX:EAX)?(EAX)×(SRC32) ①.SRC寻址可采取“立即数”以外的任何寻址方式; ②.可实现字节、字或双字操作,具体选择由(SRC)类型决定; ③.对状态标志的影响?若结果的高半部分全为0.则CF=0,OF=0; 若结果的高半部分不全0.则CF=1,OF=1; 即:CF/OF是否为1仅说明结果的高半部分是否有“有效数”; 13、带符号数乘法指令:IMUL SRC IMUL REG,SRC IMUL REG,SRC,IMM ①.单操作数指令:IMUL SRC //被乘数、乘数、结果的存放位置、操作类型(字 节/字/双字)选择与MUL SRC相同;若结果的高半部分是低半部分的符号扩展,则 CF=OF=0;否则CF=OF=1;含义同MUL;第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(二)、乘法指令:2条(只定义OF和CF位,其它没定义) 13、带符号数乘法指令:IMUL SRC IMUL REG,SRC IMUL REG,SRC,IMM ②.双操作数指令:IMUL REG16/32,SRC16/32 //被乘数REG必须与乘数SRC等长 功能:单字操作?(REG16)?(REG16)×(SRC16); 双字操作?(REG32)?(REG32)×(SRC32); 说明:SRC寻址方式任意,若SRC为立即数且长度不足时机器自动符号扩展; OF与CF定义?若结果能够在REG16/32中放得下,则OF=CF=0; 若结果能够在REG16/32中放不下,则OF=CF=1,REG中的结果错误; ③.三操作数指令:IMUL REG,SRC,IMM 功能:单字操作?(REG16)?(SRC16)×(Imm16); 双字操作?(REG32)?(SRC32)×(Imm32); 说明:(SRC)为任何寻址方式得到的与目的操作数REG16/32等长的数;若SRC和Imm 都是8位立即数,则机器自动符号扩展成与DST等长; OF与CF定义?若结果能够在REG16/32中放得下,则OF=CF=0; 若结果能够在REG16/32中放不下,则OF=CF=1,REG中的结果错误; 总结: IMUL指令执行时存放乘积的ACC或REG只取乘积补码的低16/32位;第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录乘法指令实例分析 例1:无符号乘法: MOV AL,B ;AL=B4H=180 MOV BL,B ;BL=11H=17 MUL BL ;AX=OBF4H=3060,;OF=CF=1;AH不为0 例2:单操作数有符号乘法: MOV AL, B ;AL=B4H=-76 MOV BL, B ;BL=11H=17 IMUL BL ;AX=FAF4H=-1292,;OF=CF=1;AX高8位含有效数字 例3:双操作数有符号乘法: MOV BX,-128 ;BX = -128 MOV CX,256 ;CX = 256 IMUL BX,CX ;BX = -32768;OF=CF=0;BX能放得下乘积; 例4:三操作数有符号乘法: MOV CX,256 ;CX=256 IMUL BX,CX,-130 ;BX=7E00H;OF=CF=1; BX放不下乘积-33280; 因为: -130D×256D = -33280D = FFFF7E00H第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(四)、除法指令 (除法指令对状态标志位都没定义 ) 14、无符号数除法:DIV SRC //SRC除立即数以外的任何一种寻址方式 功能:字节操作 (AL)?(AX)/(SRC)8的商; (AH)?(AX)/(SRC)8的余数; 单字操作(AX)?(DX:AX)32/(SRC)16的商; (DX)?(DX:AX)32/(SRC)16的余数; 双字操作 (EAX)?(EDX:EAX)64/(SRC)32的商; (EDX)?(EDX:EAX)64/(SRC)32的余数; 注意: 被除数必须放在AX或(DX:AX)或(EDX:EAX)中,除数在SRE中,且被除数长度 必须是除数的两倍,实际运用过程中如果被除数位数不足除数位数的两倍时,用 类型转换指令(CBW/CWD/CWDE/CDQ)对被除数进行符号扩展; 15、带符号数除法:IDIV SRC //一切与DIV SRC相同 注意:带符号除法的余数符号和被除数符号相同。第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录除法错误处理: 当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。 如果存放商的寄存器AL/AX/EAX不能表达,便产生溢出,8086CPU中就产 生编号为0的内部中断――除法错中断。 (1)对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除 时商超过16位,或者在双字除时商超过32位,则发生除法溢出。 (2)对IDIV指令,除数为0,或者在字节除时商不在-128~127范围内, 或者在字除时商不在-3范围内,或者在双字除时商不在-~范围内,即超出存放商的寄存器表示范围,则发生除法溢出。例如: MOV AX,65535D MOV BL,2 DIV BL第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录除法指令实例分析无符号除法: MOV AX,0400H ;AX=400H=1024 MOV BL,0B4H ;BL=B4H=180 DIV BL ;商AL=05H=5;余数AH=7CH=124有符号除法: MOV AX,0400H ;AX=400H=1024 MOV BL,0B4H ;BL=B4H=-76 IDIV BL ;商AL=F3H=-13;余数AH=24H=36 注:带符号除法的余数符号和被除数符号相同。第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录例5:编写程序段,完成下面计算公式,并把所得的商和余数分别存入X和Y中; (其中:A,B,C,X和Y都是有符号的字变量)。(C - 120 + A*B) / C解: A B C X Y MOV SUB CWD MOV MOV MOV IMUL ADD ADC IDIV MOV MOV ? DW DW DW DW DW ? AX, AX, -12 36 -28 0 0 C 120D ;书写指令“ADD AX, -120D”也可以 ;(CX, BX)←(DX, AX),调度寄存器,为作乘法准备必要的寄存器 ;(DX, AX)←A*B ;计算32位二进制之和,为作除法作准备CX, DX BX, AX AX, A B AX, BX DX, CX C X, AX Y, DX ?;AX是商,DX是余数 ;分别保存商和余数到指定的字变量单元里第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录(五)、十进制调整指令 BCD码(8421码):用二进制编码的十进制数,又称二--十进制数。 压缩的BCD码:用 4 位二进制数表示 1 位十进制数。 例: (59)10 =()BCD 非压缩的BCD码:用 8 位二进制数表示 1 位十进制数 例:( 59 )10 =(00 1001 )BCD第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录十进制调整指令压缩的BCD码调整指令 ? DAA ? DAS 加法的十进制调整指令 减法的十进制调整指令非压缩的BCD码调整指令? AAA? AAS ? AAM加法的ASCII码调整指令减法的ASCII码调整指令 乘法的ASCII码调整指令? AAD除法的ASCII码调整指令第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录16、加法的十进制调整指令DAA语句格式:DAA 指令功能:如果AL寄存器中低4位大于9或辅助进位AF=1,则AL=AL+6且AF=1; 如果AL&=0A0H或CF=1,则AL=AL+60H且CF=1;同时,SF、ZF、PF均有影响 【例】压缩BCD码的加法运算。 MOV AL,68H MOV BL,28H ADD AL,BL DAA ;(AL)=68H,表示压缩BCD码68 ;(BL)=28H,表示压缩BCD码28 ;二进制加法:(AL)=68H+28H=90H ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录17、减法的十进制调整指令DAS语句格式:DAS 指令功能:如果AF=1或AL寄存器中低4位大于9,则AL=AL-6且AF=1; 【例】压缩BCD码的减法运算。 MOV MOV SUB DAS AL,68H BL,28H AL,BL ;(AL)=68H,表示压缩BCD码68 ;(BL)=28H,表示压缩BCD码28 ;二进制减法:(AL)=68H-28H=40H ;十进制调整:(AL)=40H ;实现压缩BCD码减法:68-28=40 注意:使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令如果AL&=0A0H或CF=1,则AL=AL-60H且CF=1.同时SF、ZF、PF均受影响。第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录18、加法的ASCII调整指令AAA语句格式:AAA 指令功能:如果AL的低4位大于9或AF=1, 则:AL=AL+6,AH=AH+1,AF=CF=1,且AL高4位清零。 否则:CF=AF=0,AL高4位清零。 【例】 MOV AX,0608H ;AX=0608H,非压缩BCD码表示真值68 MOV BL,09H ADD AL,BL AAA ;BL=09H,非压缩BCD码表示真值9 ;二进制加法:AL=08H+09H=11H ;十进制调整:AX=0707H;实现非压缩BCD码加法:68+9=77第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录19、减法的ASCII调整指令AAS语句格式:AAS 指令功能:如果AL的低4位大于9或AF=1, 则:AL=AL-6,AH=AH-1,AF=CF=1,AL高4位清零。 【例】 MOV AX,0608H ;AX=0608H,非压缩BCD码表示真值68否则:CF=AF=0, AL高4位清零。其他标志位OF、PF、SF、ZF不确定。MOV BL,09HSUB AL,BL AAS;BL=09H,非压缩BCD码表示真值9;二进制减法:AL=08H-09H=FFH ;十进制调整:AX=0509H;实现非压缩BCD码减法:68-09=59注意:使用AAA或AAS指令前,应先执行以AL为目的操作数的加法或减法指令。第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后一讲 总目录3.3.3、逻辑指令逻辑指令:包括逻辑运算指令和位操作指令两大类,21条。 ? 逻辑运算指令是一组重要的指令,逻辑运算指令也是经常使用的指令; 它包括以下五种: ①.逻辑与(AND) ②.逻辑或(OR) ③.逻辑非(NOT) ④.逻辑异或(XOR) ⑤. 逻辑测试(TEST) ? 位操作指令是另一组经常使用的指令,它包括以下三类: 1.位测试并修改?BT(位测试) BTC(位测试并变反) BTR(位测试并置0) BTS(位测试并置1) 2.位扫描? BSF(正向扫描) BSR(反向扫描) 3.移位指令? ?.逻辑移位:SHL(逻辑左移) SHR(逻辑右移) ?.算术移位:SAL(算术左移) SAR(算术右移) ?.循环移位: ROL(不带进位循环左移)ROR(不带进位循环右移) RCL(带进位循环左移) RCR(带进位循环右移) ?.双精度移位: SHLD(双精度左移) SHRD(双精度右移)第05讲(第05周):算术指令、逻辑指令和串处理指令前一讲 后

我要回帖

更多关于 汇编 ax bx 的文章

 

随机推荐