MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。
1)、两个操作数的数据类型要相同,要同为8位、16位或32位;如:MOV BL, AX等是不正确的;
2)、两个操作数不能同时为段寄存器,如:MOV ES, DS等;
3)、代码段寄存器CS不能为目的操作数,但可作为源操作数,如:指令MOV CS, AX等不正确,但指令MOV AX, CS等是正确的;
4)、立即数不能直接传给段寄存器,如:MOV DS, 100H等;
5)、立即数不能作为目的操作数,如:MOV 100H, AX等;
6)、指令指针IP,不能作为MOV指令的操作数;
7)、两个操作数不能同时为存储单元,如:MOV VARA, VARB等,其中VARA和VARB是同数据类型的内存变量。
8)、往存储单元写值时要指定大小,如:MOV dword [L6], 1。:
BYTE(字节),WORD(字),QWORD(四字)和TWORD(十字节)。
标志位寄存器(Flag/EFlag)
16位CPU标志位寄存器有9个二进制位发挥了作用,分别是:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
32位CPU标志位寄存器有13个二进制位发挥了作用,分别是:
31 … 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
… … VM RF NT IOPL OF DF IF TF SF ZF AF PF CF
这些标志位的作用是反映处理器的状态和运算结果的某些特征。标志位对指令的执行会产生影响,指令的执行也会影响标志位。
一 运算结果标志位
1. CF 进位标志位 Carry Flag
反映运算是否产生进位或者借位的操作,如果运算结果的最高位产生了一个进位或错位,那么,其值为1,否则为0。
使用该标志为的情况:多字(字节)数(无符号数
)的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等
2. PF 奇偶标志位 Parity Flag
奇偶标志PF用于反映运算结果中"1"的个数的奇偶性。如果"1"的个数为偶数,则PF为1,否则为0。
利用PF可进行奇偶效验检查,或产生奇偶效验位。在数据传输的过程中,为了提供传送的可靠性,如采用奇偶效验的方法,可使用该标志位。
3. AF 辅助进位标志 Auxiliary Carry Flag
发生以下情况时辅助进位标志为1,否则为0:
1) 字操作时,发生低字节向高字节进位或借位。
2)字节操作时,发生低4位向高4位进位或借位。
4. ZF 零标志 Zero Flag
零标志用来反映运算结果是否为0,如果结果为0,其值为1,否则其值为0,在判断运算结果时,可以使用该标志位。
5. SF 符号标志 Sign Flag
符号标志SF用来反映运算结果的符号位,与运算结果的最高位是相同的,在PC系统中,有符号数用补码表示,所以SF也就反映运算结果的正负号。运算结果为整数,SF为0,负数SF为1。
6. OF 溢出标志 Overflow Flag
溢出标志OF用于反映有符号数
加减运算所得结果是否溢出,如果运算结果超过当前运算位数所能表示的范围,则成为溢出,OF的值被设置为1,否则OF的值被清为0。 溢出和进位是两个不同的概念
。
以上六个标志位中,PF,AF很少使用,ZF OF CF SF常用。
二 状态控制标志位
状态控制标志位是用来控制CPU操作的,要通过专门的指令才能改变这些标志位。
1. TF 追踪标志 Trap Flag
当追踪标志TF设置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求,这种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF的值,但可以通过其它方法改变。
2. IF 中断允许标志 Interrupt-enable Flag
中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的请求。当IF为1时,CPU可以响应CPU外部的可屏蔽中断请求,当IF为0时,CPU不响应CPU外部的可屏蔽中断请求。
对于不可屏蔽的CPU外部中断以及CPU内部产生的中断,无论IF标志位为何值CPU都会响应。
3. DF 方向标志 Direction Flag
方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
三 32位寄存器增加的标志位
1. IOPL I/O特权标志 Input/Output Privilege Level
I/O特权标志用两位二进制位表示,也成为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值该I/O指令可执行,否则将引发一个保护异常。
2. NT 嵌套任务标志 Nested Task
嵌套任务标志NT用来控制中断返回指令IRET的执行,具体规定如下:
1) 当NT=0时,用堆栈中保存的值恢复EFLAGS,CS和EIP,执行常规的中断返回操作;
2) 当NT=1时,通过任务转换实现中断返回。
3. RF 重启动标志位 Restart Flag
重启动标志位RF用来控制是否接受调试故障,规定:RF=0时,表示接受调试故障,否则拒绝,在成功执行完一条指令后,处理机制把RF设置为0,当接受到一个非调试故障时,处理机就把他设置为1。
4. VM 8086方式标志 Virtual 8086 Mode
如果该标志为1,则表示处理器处于虚拟的8086方式下的工作状态,否则,处理器处于一般保护方式的工作状态。
进位与溢出
溢出与进位是针对加法而言,在计算机里,减法会被转化为加法来进行运算:
x-y => x+(-y) => x+~y+1
5-3 => 5+(-3) => 0000 0101 + 1111 1100 + 1 = 0000 0010
0000 0101:5 的补码
1111 1100:-3的反码,加1后变成 -3 的补码
1111 1101:在计算机里,-3 就是这样表示的
溢出
当要判断运算是否溢出时,cpu 总是把寄存器里面的数据当成 有 符号数来处理
正数和负数相加不会溢出
两个正数相加,如果结果为负数(符号位为 1),表明发生溢出
两个负数相加,如果结果为正数(符号位为 0),表明发生溢出
设:
x 为第一个加数的符号位
y 为第二个加数的符号位
r 为结果的符号位
那么:
xy = 00 r=1,溢出,r=0,未溢出
xy = 11 r=0,溢出,r=1,未溢出
xy = 10 \
不会溢出
XY = 01 /
进位
当要判断运算是否进位时,cpu 总是把寄存器里面的数据当成是无符号数来处理
将两个寄存器的内容相加,如果两个数的最高位都为0,则不论结果的最高位是什么都不会进位
如果两个数的最高位都为1,则不论结果的最高位是什么都一定会进位,
如果两个数的最高位不相同,而结果的最高位却是0,那么一定是产生了进位,反之则是未进位
设:
x 为第一个加数的符号位(准确点,这时应叫做最高位)
y 为第二个加数的符号位
r 为结果的符号位
那么:
xy = 00 决不会产生进位
xy = 11 一定会进位
xy = 10 \
r = 0 ,有进位,r = 1,无进位
XY = 01 /
分享到:
相关推荐
2. **指令系统**:不同的处理器架构有不同的汇编指令,如x86/x64架构的Intel汇编,或者ARM架构的汇编。了解这些指令的具体功能和使用方式是学习汇编的关键。 3. **寄存器使用**:汇编语言中,数据处理往往依赖于...
以上软件为网上收集来的反汇编专用软件 PIC16FDisAsm.exe 为pic16fxxx单片机反汇编软件 u51V12.rar为mcs51单片机反汇编软件 EMCdasm.exe为emc单片机反汇编软件 reavr.rar为AVR单片机反汇编软件 STM8反汇编.rar为stm8...
教材是intel 汇编语言程序设计,书上说在vs2005编译汇编源代码,很麻烦。作者官网上有说明,我搜集了翻译的版本。另外附上masm32 和 语法亮亮的usertype.dat文件。 注意我在masm32的配置好了intel 汇编语言程序设计...
AT&T汇编语法和Intel汇编语法的主要区别在于它们表示指令的方式。AT&T语法通常更加冗长,但更符合人类阅读,而Intel语法则更接近机器代码。在AT&T语法中,操作数的顺序与Intel相反,而且地址和寄存器的表示方式也...
资料收集自互联网,欢迎...内容:[官方]Intel 8086 完整指令编码(https://download.csdn.net/download/im_a_little_boy/10683572)+ 其他收集的关于intel 8086指令编码的英文文档,是深入学习intel 8086汇编的好材料。
**三、AT&T与Intel汇编语法差异** 1. **寄存器前缀**:AT&T使用`%`前缀,Intel则无前缀。 2. **立即数表示**:AT&T使用`$`前缀,Intel无前缀。 3. **操作数顺序**:AT&T中,目标操作数在右,源操作数在左,Intel相反...
【汇编语言保护模式编程】涉及的是在计算机硬件环境下,特别是Intel 80x86系列处理器上,使用汇编语言进行程序设计的一种高级技术。80x86系列CPU,如80486,引入了保护模式,极大地扩展了处理器的功能和安全性。 在...
80386汇编教程是针对Intel 80386处理器的,这款处理器是x86架构的重要里程碑,引入了32位数据处理能力,为后来的Windows操作系统提供了基础。学习80386汇编,你需要理解基本的指令集,如数据传输、算术运算、逻辑...
51汇编是针对Intel 8051微控制器系列的一种低级语言,而C语言是一种中级语言,广泛应用于各种软件开发,包括嵌入式系统。这篇内容将深入探讨这两种语言及其在实际应用中的角色。 首先,51汇编语言是与硬件直接交互...
2. **32位汇编语言**:32位汇编语言是针对32位处理器(如Intel的x86系列)的低级编程语言,它直接对应于处理器的指令集。汇编语言中的每条指令都与CPU的一个或多个操作相对应,这使得汇编语言具有高效性和精确控制...
2. `读者调查表.doc`:可能是作者为收集读者反馈而设计的文档,了解读者对书籍内容的理解和评价,以便改进和完善。 3. `附录A-C.pdf`:附录通常包含补充信息或详细解释,这本书的附录可能涵盖了汇编语言的特定概念、...
- **硬件**:包括微处理器(如Intel的80x86系列,从8086到奔腾系列,再到IA-64的安腾),存储器(内存和外存),以及各种外部设备。 - **软件**:分为系统软件(操作系统、驱动程序等)和应用软件(如办公软件、...
这个系统设计用于收集、处理和分析学生成绩,特别是对分数范围进行统计。8086是Intel公司在1978年推出的一种16位微处理器,广泛应用于早期个人计算机系统,至今仍被用于理解计算机底层工作原理的教学。 在描述中,...
它支持Intel x86架构,并提供了丰富的宏功能,方便程序员编写复杂的程序。MASM.EXE是这个工具的可执行文件。 2. **LINK (Microsoft Linker)**:链接器的作用是将汇编器生成的.obj目标文件与其他库文件合并,形成可...
它支持Intel x86架构,并提供了丰富的指令集和宏功能,使得编写和调试汇编程序变得更加方便。MASM提供了一个高级的语句语法,包括伪指令、宏指令和条件编译,这使得程序员能够创建复杂的程序结构。 2. **LINK ...
在Intel Pentium 4 CPU 2.66GHz的环境下,比较优化前后的程序运行时间,可以直观地看到优化效果。Debug模式下,编译器未做过多优化,这为分析和优化提供了良好的基础。通过对比不同指令执行时间,可以找出优化空间,...
- **慧净电子会员收集整理的51单片机汇编语言教程**提供了28课的详细讲解,适合初学者快速入门。 - **慧净51实验板**: 推荐使用的实验平台,支持HL-1、HJ-C52、HJ-3G等多种型号。 - **51学习网**: WWW.HJMCU.COM,...
44. 数据处理是通过计算机进行数据收集、存储和查询的应用。 45. 信息是计算机系统中数值、文字、语言和图像等内容的统称。 46. 计算机硬件系统包括中央处理器(CPU)、内存、存储设备、输入设备和输出设备等。