AT+CNMI指令详解

AT+CNMI指令详解
AT+CNMI指令详解

AT+CNMI指令详解

2011-01-05 08:58

GSM Modem一般都支持一条“AT+CNMI”指令,用于设定当有某类短消息到达时,如何处理它——只储存在制定的内存(易失的/非易失的)中;先储存后通知TE;直接转发到TE,等等。

AT+CNMI指令语法为:

AT+CNMI=<mode>,<mt>,<bm>,<ds>,<bfr>

<mode>控制通知TE的方式。

0——先将通知缓存起来,再按照<mt>的值进行发送。

1——在数据线空闲的情况下,通知TE,否则,不通知TE。

2——数据线空闲时,直接通知TE;否则先将通知缓存起来,待数据线空闲时再行发送。

3——直接通知TE。在数据线被占用的情况下,通知TE的消息将混合在数据中一起传输。

<mt>设置短消息存储和通知TE的内容。

0——接受的短消息存储到默认的内存位置(包括class 3),不通知TE。

1——接收的短消息储存到默认的内存位置,并且向TE发出通知(包括class 3)。通知的形式为:

+CMTI:”SM”,<index>

2——对于class 2短消息,储存到SIM卡,并且向TE发出通知;对于其他class,直接将短消息转发到TE:

+CMT:[<alpha>],<length><CR><LF><pdu>(PDU模式)

或者+CMT:<oa>,[<alpha>,]<scts>[,<tooa>,<fo>,<pid>,<dcs>,<sca>,<tosca>,<length>]<CR><LF><data>(text模式)

3——对于class 3短消息,直接转发到TE,同<mt>=2;对于其他class,同<mt>=1。

<bm>设置小区广播

0——小区广播不通知

2——新的小区广播通知,返回

+CBM:;length;;CR;;LF;;pdu;

3——Class3格式的小区广播通知,使用bm=2格式

<ds>状态报告

0——状态报告不通知

1——新的状态报告通知,返回:

+CDS:;length;;CR;;LF;;pdu;

2——如果新的状态报告存储到ME,则返回:

+CDSI:;mem;,;index;

<brf>

1——始终为1

由于SIM卡只有1万到10万次的读写次数和10-15条短消息的存储空间,而且SIM卡上短消息读写需要一定的时间才能完成,因此最好使短信息不经过SIM卡读写,直接发送至TE终端,可以设置:

AT+CNMI=2,2,0,1,1

短消息类(class)的概念:根据指定存储的位置,短消息分为class0-3四个类,也可以不指定类别(no class),由移动设备按默认设置进行处理,存储到内存或者SIM卡中。在TPDU的TP-DCS 字节中,当bit7-bit4为00x1、1111时,bit1-bit0指示消息所属类。

00——class 0,可直接显示。

01——class 1,默认储存在ME内存中。

02——class 2,储存在SIM卡中。

03——class 3,可直接传输到终端设备TE。

默认的短消息存在SIM卡中,无类别的短消息通常也存在SIM卡中。

如果AT+CSMS=1,接收到短信时,TE需在一定的时间内发送反馈消息至模块;若超时,

<mode>和<mt>的值会强制复位到0。那么,再有新的短信将不能被正确处理,需要用“AT +CNMI”指令重新设置参数才行。这增加了程序处理的复杂性。AT+CSMS=0时,省去了这些麻烦。

8086指令系统精析解析

8086指令系统精析 3.1基本数据类型 1.IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字 (64位,486中引入的)和双四字(128位,Pentium3中引入的)。 2.低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-1 3.字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的 地址,双字和四字的自然边界地址要分别能被4和8除尽。 4.数据结构要尽可能在自然边界上对齐 5.对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访 问,只要进行一次存储访问操作。 6.数字数据类型(学生自学)PPT 3.28086的指令格式 一、指令格式 Label(标号):mnemonic(助记符)argument1(参数1),argument2(参数2),argument3(参数3)其中: 1.标号是一个标识符,后面跟有冒号 2.助记符是一类具有相同功能的指令操作码的保留名 3.操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取 决于操作码 4.操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程 序的另一部分声明的赋予数据项的标识符。 5.在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数 是目的。例如:LOADREG: MOV AX, SUBTOTAL 功能是把由SUBTOTAL表示的源操作数传送至AX寄存器。 3.38086/8088指令的操作数寻址方式

寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。 1.立即数 用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。 立即数可以是8位或16 例1 MOV AX , 2056H 结果( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果( AL ) = 78H 2.寄存器操作数 操作数在寄存器中,指令中指定寄存器名 8 位操作数,用8 位寄存器: AH、AL、BH、BL、CH、CL、DH、DL 16 位操作数,用16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例1 MOV AX , 2056H 执行后:(AX)=2056H 例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H ▲立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。 ▲以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。 3. 内存操作数 ▲指令MOV DS: [ DI ] , CL 完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中。例编程将CL寄存器的内容传送到21000H单元中。PPT 地址21000H=2000:1000H ,编程时,DS 存放段地址2000H,DI 存放偏移地址1000H MOV AX, 2000H MOV DS, AX ; (DS) = 2000H

8086指令总结

8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

第三章8086CPU指令系统

第三章 8086CPU指令系统 本章重点: 1.寻址方式: 立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。 2.8086指令系统: 数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。 学习目标: 1.掌握寻址方式; 2.掌握常用指令的功能和用法。 难点: 区别指令的正确与错误。

§1.寻址方式 指令在存储器中是顺序存放的,而操作数的存放没有规律,因此操作数的寻址方法相对比较复杂。 一、指令的基本格式 1.组成: 一条指令包括操作码和操作数两部分。 操作数:源操作数,目标操作数。 2.寻址方式: 寻找指令中操作数的方法。 3.操作数类型:(8086系统) 寄存器操作数,存储器操作数,立即数(在指令代码中)和I/O端口操作数。 二、寻址方式 1.立即数寻址 ⑴方式: 指令中所需的操作数直接包含在指令代码中(即由指令直接提供),立即数可以是8位,也可以是16位。 例:MOV AL,80H ;将十六进制数80H送入AL MOV AX,1090H;将1090H送AX:90H→AL ,10H→AH ⑵说明: ●采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以从 指令中直接取得,不需要运行总线周期,所以,其显著特点就是速度快。 ●规定:立即数只能是整数,不能是小数,变量或者其他类型的数据;另 外,立即数只能作为源操作数。 2.寄存器寻址 ⑴方式: 如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出,这种寻址方式就叫寄存器寻址。 对16位操作数来说,寄存器可以为AX,BX,CX,DX,SI,DI,SP或BP,而对8位操作数来说寄存器可以为AH……DH,AL……DL。 例:INC CX ;将CX内容加1

8086/8088指令系统

CH02 8086/8088指令系统 习题与思考题 1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?源操作数在哪里?如在存储器中请写出其物理地址是多少? (1)MOV AX,0ABH (2)MOV AX,[100H] (3)MOV AX,V AL (4)MOV BX,[SI] (5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI] (7)MOV V AL[SI],BX (8)MOV [BP][SI],100 解答: (1)MOV AX,0ABH 寻址方式:立即寻址;物理地址:无 (2)MOV AX,[100H] 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+100H=2000H*16+100H=20100H (3)MOV AX,V AL 寻址方式:直接寻址;源操作数在存储器中;物理地址:DS*16+V AL=2000H*16+0050H=20050H (4)MOV BX,[SI] 寻址方式:寄存器间接寻址;源操作数在存储器中;物理地址:DS*16+SI=2000H*16+00A0H=200A0H (5)MOV AL,V AL[BX] 寻址方式:变址寻址;源操作数在存储器中;物理地址:DS*16+V AL+BX=2000H*16+0050H+0100 =20150H (6)MOV CL,[BX][SI] 寻址方式:基址加变址寻址;源操作数在存储器中;物理地址:DS*16+BX+SI=2000H*16+0100H+00A0H =201A0H (7)MOV V AL[SI],BX 寻址方式:寄存器寻址;源操作数在寄存器中;物理地址:无 (8)MOV [BP][SI],100 寻址方式:立即寻址;物理地址:无 2.设有关寄存器及存储单元的内容如下: DS=2000H,BX=0100H,AX=1200H,SI=0002H,[20100H]=12H,[20101H]=34H,

emu8086介绍解析

emu8086 EMU8086是学习汇编必不可少的工具,它结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug 的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。 目录 软件简介 使用方法 如何运行 十进制系统 二进制系统 十六进制系统 十进制到另外进制的换算 有符号数 汇编语言

通用寄存器 段寄存器 寻址方式 MOV 指令 数组 常量 中断 运算与逻辑指令 程序控制转移 堆栈 展开 软件简介 使用方法 如何运行 十进制系统 二进制系统 十六进制系统 十进制到另外进制的换算有符号数 汇编语言 CPU内部

通用寄存器 段寄存器 寻址方式 MOV 指令 数组 常量 中断 运算与逻辑指令 程序控制转移 堆栈 展开 编辑本段软件简介 EMU8086是你学习汇编必不可少的工具! Emu8086-MicroprocessorEmulator结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具。这对刚开始学组合语言的人会是一个很有用的工具。它会在模拟器中一步一步的编译程序码并执行,视觉化的工作环境让它更容易使用。你可以在程序执行当中检视暂存器、旗标以及

记忆体。模拟器会在虚拟PC中执行程序,这可以隔绝你的程序,避免它去存取实际硬体,像硬碟、记忆体,而在虚拟机器上执行组合程序,这可以让除错变得更加容易。这个软件完全相容於Intel的下一代处理器,包括了PentiumII、Pentium4,而相信Pentium5也会继续支援8086的。这种现象让8086程序码的可携性相当高,它可以同时在老机器以及现代的电脑是执行,8086的另一个优势是它的指令比较小且相当容易学习。 该软件包含了学习汇编语言的全部内容。Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,此外,还有循序渐进的教程。这套软件对于刚开始学习汇编语言的朋友非常有帮助.它能够编译源代码,并在模拟器上一步一步的执行。可视化界面令操作易如翻掌.可以在执行程序的同时可观察寄存器,标志位和内存.算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况. 这个模拟器是在一台"虚拟"的电脑上运行程序的,它拥有自己独立的“硬件”,这样你程序就同诸如硬盘与内存这样的实际硬件完全隔离开,动态调试(DEBUG)时非常方便.8086的机器代码同INTEL下一代微处理器完全兼容,包括Pentium II 和Pentium 4,我相信Pentium 5同样也会支持8086指令.这意味着8086代码具有很广泛的应用范围,它在老式的和最新的计算机系统上都能工作. 8086指令的另外一个优点是它的指令集非常小,这样学起来会容易得多.Emu8086同主流汇编程序相比,语法简单得多,但是它能生

习题3-8086指令系统

习题三8086指令系统 主要内容:8086指令系统。主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 3.1 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS,AX (?) MOV [BX],[1000] (?) PUSH CS (√) POP CS (?) IN BX,DX (?) 3.2 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV WORD PTR [BP], 2000 MOV WORD PTR [BX], 2000 3.3 设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSH BX 指令后,栈 顶地址和栈顶2个字节的内容分别是什么? 【答】当前栈顶指针(SP)=2FF00H,物理地址=20100H+FE00H=2FF00H 当执行PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FDFEH,栈顶2个字节的内容分别57H,34H。 3.4 已知(DS)= 091DH,(SS)= IE4AH,(AX)= 1234H,(BX)= 0024H,(CX)= 5678H, (BP)= 0024H,(SI)= 0012H,(DI)= 0032H,[09226]= 00F6H,[09228]=1E40H, [lE4F6]=091DH,试求单独执行下列指令后的结果? (l)MOV CL ,20H [BX][SI]; 【答】由于源操作数有效地址EA=20H+0024H+0012H=0056H, 其物理地址PA=DS*16+EA=091DH*16+56H=09226H, 因此(CL)= F6H (2)MOV [BP][DI],CX; 【答】由于目的操作数有效地址EA= 0024H+0032H=0056H, 目的操作数物理地址PA= SS*16+EA=1E4A0H+0056H=1E4F6H, 因此[1E4F6]=5678H (3)LEA BX ,20H[BX][SI] MOV AX ,2[BX] 【答】第一条指令:源操作数物理地址PA=091D0H+(20+0024H+0012H)=09226H,因此(BX)=0056H 第二条指令:源操作数物理地址PA=091D0H+(2+0056)=09928H, 因此(AX)=1E40H (4)LDS SI ,[BX][DI] MOV [SI],BX 【答】第一条指令: 源操作数物理地址PA=091D0H+(0024H+0032H)=09226H 因此(SI)= 00F6H, (DS)=1E40H 第一条指令:目的操作数物理地址PA=1E400H+00F6H=1E4F6H 因此1E4F6H单元的内容为0024H, 即[1E4F6H]=0024H (5)XCHG CX,32H[BX] XCHG 20[BX][SI] ,AX 【答】同理可得:(CX)= 00F6H(AX)= 00F6H,[ 09226H]= 1234H 3.5 单选题: (1)执行下面指令序列后,结果是( )。 MOV AL,82H CBW A、AX=0FF82H B、AX=8082H C、AX=0082H D、AX=0F82H

8086指令系统

通用寄存器: 数据寄存器:累加器AX,基址寄存器BX,计数器CX,数据寄存器DX 变址寄存器:源地址寄存器SI,目的变址寄存器DI 指针寄存器:基址指针BP,堆栈指针SP 段寄存器: 代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS,附加段寄存器ES 标志寄存器:FLAGS,指令指针:IP 数据寄存器 8086有4个16位数据寄存器:AX,BX,CX,DX;它们都可以分为两个独立的8位寄存器:AH/AL,BH/BL,CH/CL,DH/DL;对其中的某8位操作,并不影响另外对应8 位寄存器的数 据.数据寄存器是通用的,用来存放计算结果和操作数, 但每个寄存器又有它们各自专用目的,主要是: AX称为累加器,使用程度最高,用于算术,逻辑运算及与外设传送信息等; BX称为基地址寄存器,常用做存放存储器的地址; CX称为计数器,作为循环和串操作等指今中隐含的计数器; DX称为数据寄存器,常用来存放双字节长数据的高16位,或存放外设端口地址. 指针及变址寄存器 指针及变址寄存器包括SI,DI,BP,SP四个16位寄存器,常用于存储器寻址时提供地址.SI源变址寄存器,DI 目的变址寄存器,一般与DS联用确定数据段中某一存储单元地址.SP堆栈指针寄存器,指示栈顶的偏移地址;BP基址指针寄存器, 表示堆栈段中的基地址.IP16位指令指针寄存器,指示代码段中指令的偏移地址,它与代码段寄存器CS 联用,以确定下一条指令的物理地址.处理器利用CS:IP取得下一条要执行的指令,然后修改IP的内容,使之指向下一条指令的存储器地址.

标志寄存器(FLAGS) 也称为状志标志寄存器PSW 0 CF(Carry Flag) 进位标志 1 2 PF(Parity Flag)零标志 3 4 AF(Auxiliary Carry Flag)辅助进位标志 5 6 ZF(Zero Flag)零标志 7 SF(Sign Flag)符号标志:运算结果最高有效位的状态就是符号位的状态. 8 TF(Trap Flag)陷井标志 9 IF(Interrupt-enable Flag)中断允许标志 10 DF(Direction Flag)方向标志 11 OF(Overflow Flag)溢出标志 12 13 14 15 状态标志:CF,ZF,SF,PF,OF,AF 控制标志:DF,IF,TF 8086的字长是16位的,但其地址线是32位的. 8086处理器将1M存储器空间分成许多逻辑段(Segment),每个段的最大限为16KB. 这样,每个存储单元就可以用"段地址:段内偏移地址"表达其准确的物理位置."段地址:偏移地址"的形式称为逻辑地址 .将逻辑地址中的段地址左移4位(这是对二进制而言,若是十六进制,只要左移一位),加上偏移地址就得到20位物理地址. 例如逻辑地址"1460H:100H"表示物理地址14700H, 同一个物理地址可以有多个逻辑地址形式. 8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL

微机原理:EMU8086使用及指令系统熟悉

[公司名称] 实验一 EMU8086使用及指令系统熟悉微机原理上机实验 [日期]

一、实验要求 1.熟悉并掌握EMU8086 汇编语言调试环境; 2.学习8086的指令系统,输入简单的指令,观察各寄存器、内存相关单元以及处理器标志位的变化(数据传送类指令,算数运算类指令,逻辑运算类指令,标志处理和CPU控制类指令,移位和循环移位类指令,处理器控制类指令等,要求每类指令至少一个用例。具体用例自行设计,可参考教材用例); 3.学习汇编语言程序设计的基本步骤和方法; 4.学会使用EMU8086 debug调试程序; 5.编写一个简单的程序:将“This is my first ASM program-姓名(汉语拼音各人的姓名)”放在DS=1000H,BX=0000H开始的存储器单元中,然后将该内容搬移到BX=0100H开始的单元中,最后将该字符串通过DOS功能调用显示在屏幕上。 二、实验目的 1.学习EMU8086仿真开发环境的使用,理解和掌握汇编语言编程的基本步骤; 2.熟悉8086指令系统; 3.熟悉变量、常量及伪指令的使用; 4.熟悉内存单元的存储结构,字符串的处理以及简单的编程。 三、实验过程(调试分析) 3.1熟悉并掌握EMU8086汇编调试环境

此为EMU8086新建汇编源程序的界面,对应有四种模板可以挑选: ①COM——无需分段,所有内容均放在代码段中,程序代码默认从ORG 0100H开始 ②EXE——需要分段,内容按代码段、数据段、堆栈段划分,编译器自动完成空间的分配 ③BIN——二进制文件,适用于所有用户定义的结构类型 ④BOOT——适用于在软盘中创建的文件 ⑤empty workspace可以创建空的文档 此为一个EXE的模板

8086指令系统汇编实训实例

8086指令系统实训实例 一、80x86微处理器中的寄存器 图1-1 80x86微处理器的基本结构寄存器 标志寄存器对照表 标志名称 设置 未设置 标志名称 设置 未设置 溢出 OV(溢出) NV(未溢出) 零位 ZR (为0) NZ(不等于零) 方向 UP(增加) DN (减少) 辅助进位 AC (有进位)NA(无进位) 中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇) 符号 NG(负) PL(正) 进位 CY (有进位) NC(清除进位) 累加器基址寄存器 计数寄存器 数据寄存器 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器 指令指针寄存器 标志寄存器 代码段寄存器 段寄存器 附加段寄存器 堆栈段寄存器 数据寄存器 地址指针和 变址寄存器 控制寄存器 通用寄存器 数据段寄存器

二、用DEBUG软件学习汇编语言 DEBUG的几点规则说明: 1.所有数据默认为16进制数,后缀“H”不用加; 2.DEBUG命令都是一个字母,字母大小写不分,后面的参数可以用空格分开, 也可以不用;命令与数字之间可以不分开,但是两个十六进制数字之间必须分开,如: L100 = L 100;100 110 ≠100110 ; 3.DEBUG中的地址表示格式有如下几种: 1)段寄存器:偏移量,如:cs:100 2)段地址:偏移量,如:04ba:100 或4ba:100 3)默认段寄存器不写,只写偏移量,如:100; 4)确定地址范围可以有两种表示方式: a)段地址:起始地址的偏移量结束地址的偏移量,如:cs:100 110; b)段地址:起始地址的偏移量L(长度),如:cs:100 L10; DEBUG软件基本指令用法一览表

相关文档
最新文档