第六讲 数据传送指令
- 格式:ppt
- 大小:746.00 KB
- 文档页数:23
数据传送指令数据传送指令包括数据的传送、交换、堆栈数据的压入与弹出,是最基本、使用率最高的一类指令。
助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共八种。
1.MOV类指令及功能(16条)这类指令的功能是从源操作数到目的操作数的数据传送。
MOV A, Rn ;Rn→A,寄存器Rn的内容送到累加器AMOV A, direct ;(direct)→A,直接地址中的内容送AMOV A, @Ri ;(Ri)→A,Ri间址的内容送AMOV A, #data ;data→A,立即数送AMOV Rn,, A ;A→Rn,累加器A中的内容送寄存器RnMOV Rn, direct ;(direct)→Rn;直接地址中的内容送RnMOV Rn, #data ;data→Rn;立即数送RnMOV direct, A ;A→(direct),A中的内容送入直接地址中MOV direct, Rn ;Rn→(direct),寄存器内容送入直接地址中MOV direct, direct ;(direct) →(direct),源操作数直接地址的内容送入;目的操作数的直接地址中MOV direct, @Ri ;(Ri)→(direct),Ri间址内容送入直接地址中MOV direct, #data ;data→(direct),立即数送入直接地址中MOV @Ri, A ;A→(Ri),A中内容送到Ri间址单元中MOV @Ri, direct ;(direct)→(Ri),直接地址中内容送入Ri间址单元中MOV @Ri, #data ;data→(Ri),立即数送入Ri间址单元中MOV DPTR, #data16 ;data16→DPTR,16位常数送入数据指针DPTR中,高8;位送入DPH,低8位送入DPH,低8位送入DPL中从上述指令可以看出目的操作数有A累加器、Rn寄存器、直接地址direct及间接地址@Ri,源操作数除此之外还多一种立即数data。
汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。
它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。
汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。
下面将详细介绍汇编语言中常用的基本指令。
1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。
MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。
例如,MOV AX, BX可以将BX的值传送给AX。
ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。
格式为ADD 目标操作数, 源操作数。
例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。
SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。
格式为SUB 目标操作数, 源操作数。
例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。
MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。
格式为MUL 目标操作数, 源操作数。
例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。
2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。
ADD指令在前面已经提到,用于将两个操作数相加。
SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。
MUL指令在前面已经提到,用于将两个操作数相乘。
DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。
格式为DIV 操作数。
例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。
AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。
格式为AND 目标操作数, 源操作数。
例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。
数据传送指令
1.MOV 目的,源将源操作数送到目的操作书中,源操作数不变
1源,目的操作数不能同为存储器操作数
2数据类型一致
3CS和立即数不能为目的操作数立即数不能直接传给段寄存器
2.压栈指令PUSH 源操作数将存储器或寄存器操作数压入堆栈
3.出栈指令POP 字数据将字数据弹到寄存器或存储单元
4.交换指令XCHG 目的,源将源操作数目的操作数互换段寄存器的内容不能互换
输入输出指令
1.输入指令IN
1直接寻址输入指令IN AL,PORT AL<---(PORT)
IN AX,PORT AL<---(PORT+1,PORT)
2间接寻址输入指令IN AL,DX AL<----(DX)
IN AX,DX AX<---(DX+1,DX)
从DX寄存器指定端口读入一个字节送给AL,首先应把端口地址送给DX
2.输出指令OUT
1直接寻址输出指令OUT PORT,AL OUT PORT,AX
2间接寻址输出指令OUT DX,AL OUT DX,AX
地址传送指令
1.取有效地址指令LEA 16位目的,源把源操作数有效地址EA1送到16位目的寄存器中
2.装入DS和有效地址指令LDS 16位目的,源
3.装入ES和有效地址指令LES 16位目的,源
4.。
传送指令
1〕数据〔字节、字、双字、实数〕传送指令
数据传送指令把输入端〔IN〕指定的数据传送到输出端〔OUT〕,传送过程中的数据值保持不变。
数据传送指令按操作数的数据类型可分为字节传送〔MOVB〕、字传送〔MOVW〕、双字传送〔MOVD〕、实数传送〔MOVR〕指令,如表1所示。
表1数据传送指令
字节传送字传送双字传送实数传送
数据传送指令的使用如图1所示。
当I0.0闭合时,变量存储器VW100中的内容将传送到VW200中。
图1数据传送指令的使用
2〕数据块传送指令
数据块传送指令把输入端〔IN〕指定地址开始的N个连续字节、字、双字的内容传送到从输出端〔OUT〕指定地址开始的N 个连续字节、字、双字的存储单元中,传送过程中各存储单元的内容不变,N为1~255。
数据块传送指令按操作数的数据类型可分为字节块传送〔BMB〕、字块传送(BMW)、双字传送〔BMD〕指令,如表2所示。
它们均为无符号数操作。
表2 数据块传送指令
字节块传送字块传送双字块传送
3〕传送字节立即读、写指令
传送字节立即读指令BIR,读取输入端〔IN〕指定字节地址的物理输入点〔IB〕的值,并写入输出端〔OUT〕指定字节地址的存储单元中。
传送字节立即写指令BIW,将输入端〔IN〕指定字节地址的内容写入输出端〔OUT〕指定字节的物理输出点〔QB〕。
两种指令如表3所示,其操作数的数据类型为字节〔BYTE〕型。
表3 传送字节立即读、写指令
传送字节立即读传送字节立即写。
数据传送指令1. 通⽤数据传送指令 MOV,PUSH,POP,XCHG,XLAT(1)MOV①MOV DS, 2000H ; //语法错误,不能⽤⽴即数给段寄存器赋值。
应该为:MOV AX, 2000MOV DS, AX② MOV WORD PTR[DI], 2000HPTR 是属性运算符,功能为修改操作数的类型。
WORD PTR 的作⽤是将操作数的类型设置为字类型。
③MOV [DI], 04AH ; //语法错误:源和⽬的操作数的类型都不确定,产⽣⼆异性。
因为[DI]代表的仅是⾸地址,不能确定它具体有多少个地址;⽽04AH也不能确定它前⾯有多少个0,占的字节数⾃然也不确定。
注意:① MOV 指令不影响标志寄存器的任何标志位②源和⽬的操作数必须等长,即同时为字节类型或字类型。
③不允许给 CS(代码段寄存器)赋值。
④ MOV 指令不能访问 IP 和 Flags(2)PUSH,POPPUSH 和 POP 是堆栈操作指令助记符。
堆栈是程序在内存中开辟的⼀个数据区,⽤以保存寄存器或存储器中暂时不⽤⽽⼜必须保存的数据。
程序中堆栈是⽤段定义语句在内存中定义的⼀个堆栈段,堆栈段的段基址存放在 SS 寄存器,段内偏移地址存放在 SP 寄存器中, SP 也常称为堆栈指针,它总是指向栈顶。
例如:设 SS=2000H,SP=102H,AX=623EH,执⾏下⾯指令后:PUSH AXAX 的数据 62H 存⼊ 20101H 单元,3EH 存⼊ 20100H 单元,SP=0100H注意:1. 堆栈指令的操作数必须是字类型,可以是 16 位的通⽤寄存器或段寄存器,也可以是两个连续的内存单元,可以采⽤任何寻址⽅式。
2. CS 不能作为出栈指令的操作数。
3. 堆栈指令不影响任何标志位。
2. 输⼊输出指令 IN,OUT8086CPU 对所有输⼊输出端⼝统⼀管理,提供了⼀个与内存储器地址空间分开的、完全独⽴的地址空间,I/O 端⼝的地址有 8 位和 16 位两种形式。
单片机指令大全单片机(Microcontroller)是一种集成了微处理器、存储器和输入/输出接口等功能的芯片,广泛应用于各种电子设备中。
在单片机的编程过程中,指令起到了至关重要的作用,指令的正确使用能够充分发挥单片机的性能和功能。
本文将详细介绍单片机常用的指令,并提供相应的格式和示例,以便读者更好地理解和运用。
一、数据传送指令数据传送指令用于从一个位置传送数据到另一个位置,常见的指令有MOV(Move)和LDR(Load Register)等。
1. MOV指令MOV指令用于将一个数据从一个位置复制到另一个位置。
格式如下:MOV 目的操作数,源操作数示例:MOV A, B ; 将寄存器B的值赋给寄存器AMOV R1, #10 ; 将立即数10赋给寄存器R12. LDR指令LDR指令用于将数据从存储器中加载到寄存器中。
格式如下:LDR 目的寄存器,来源地址示例:LDR R0, 0x1000 ; 将存储器地址0x1000处的数据加载到寄存器R0二、算术运算指令算术运算指令用于进行数值运算,如加法、减法、乘法和除法等。
常见的指令有ADD(Addition)和SUB(Subtraction)等。
1. ADD指令ADD指令用于进行加法运算,并将结果保存到指定的目标操作数中。
格式如下:ADD 目的操作数,源操作数示例:ADD A, B ; 将寄存器A和寄存器B的值相加,并将结果保存到寄存器A2. SUB指令SUB指令用于进行减法运算,并将结果保存到指定的目标操作数中。
格式如下:SUB 目的操作数,源操作数示例:SUB A, B ; 将寄存器A的值减去寄存器B的值,并将结果保存到寄存器A三、逻辑运算指令逻辑运算指令用于进行与、或、非、移位等逻辑操作。
常见的指令有AND(And)、OR(Or)和NOT(Not)等。
1. AND指令AND指令用于进行与运算,并将结果保存到指定的目标操作数中。
格式如下:AND 目的操作数,源操作数示例:AND A, B ; 将寄存器A和寄存器B的值进行与运算,并将结果保存到寄存器A2. OR指令OR指令用于进行或运算,并将结果保存到指定的目标操作数中。
数据传送指令3.数据传送指令将数据从⼀个位置复制到另⼀个位置的指令。
最简单形式的数据传送指令——MOV类指令。
指令格式指令功能效果movb S,D传送⼀个字节(8位)S->Dmovw S,D传送⼀个字(16位)S->Dmovl S,D传送双字(32位)S->Dmovq S,D传送四字(32位扩展为64位)S->Dmovabsq I,R传送绝对的四字(64位)I->R源操作数可以为以下类型⽴即数,例如$0x100寄存器,例如%bp存储器,例如(%rdi,%rcx)⽬的操作数可为寄存器或存储器。
x86-64限制:传送指令源操作数及⽬的操作数不能都指向内存位置。
movabsq能够以任何64位数(⽴即数、寄存器、存储器)作为源操作数,但只能以寄存器作为⽬的操作数。
MOVZ类指令MOVZ类指令将较⼩的源值复制到较⼤的⽬的中去,将⽬的中剩余字节填充为0零扩展,格式为movz#&(#为源操作数的⼤⼩,&为⽬的操作数的⼤⼩):movzbwmovzblmovzbqmovzwlmovzwq注:⽆movzlq指令,movzlq可利⽤以寄存器位⽬的的movl实现(因为movl会将寄存器⾼位四字节置零)MOVS类指令MOVS类指令将较⼩的源值复制到较⼤的⽬的中去,将源操作的最⾼为复制⽤于填充⽬的剩余字节,即传送符号扩展的字节符号扩展,格式为movs#&(#为源操作数的⼤⼩,&为⽬的操作数的⼤⼩):movsbwmovsblmovsbqmovswlmovswqmovslqcltq 把%eax符号扩展到%rax(eax为rax寄存器的低32位)类似于movslq %eax,%rax程序栈程序栈是⼀种数据结构,具有“后进先出(Last In First Out)”的特性。
在x86-64中,程序栈存放在内存中的某个区域,栈顶元素的地址是所有栈中元素地址最低的,栈指针%rsp保存栈顶元素的地址。