微机中断为什么把dsp 中断标志寄存器器入栈

博客访问: 38537
博文数量: 33
博客积分: 1400
博客等级: 上尉
技术积分: 325
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
第一章 基础知识1.汇编语言组成:(1)汇编指令:机器码的助记符,有对应的机器码,由机器执行&& &&& &&& &&& &&& & (2)伪指令:编译器执行&& &&& &&& &&& &&& & (3)其他符号:如+,-,*等,编译器识别,没有对应的机器码2.存储器以字节为最小单位3.cpu管脚上的三种总线:(1)地址总线,决定cpu的寻址能力&& &&& &&& &&& &&& &&& &&& &&& (2)数据总线,决定cpu一次传送的能力,通常与cpu位数一样&& &&& &&& &&& &&& &&& &&& &&& (3)控制总线,控制读写等4.内存地址空间:所有的存储器合称为cpu的内存地址空间,无论是各种RAM,ROM,端口第二章 寄存器1.8086cpu有14个寄存器,分别:AX,BX,CX,DX, SI,DI,SP,BP,IP, CS,SS,DS,ES, PSW&&& AX,BX,CX,DX为通用寄存器,常用来存放一般性的数据。&&& 为了兼容上一代cpu,AX,BX,CX,DX可分为两个独立使用的8位寄存器,分别为AH,AL......&&& 谨记:AH,AL是独立使用的,是无联系的2.常用的几条汇编指令&&& mov ax,18&&&&&&&& mov ah,78&&&&&&&& add& ax,8&& 注意在进行数据传送或运算时,两个操作对象的位数应当为一致3.数制的概念&& && 16进制表示的数据后面加H,2进制的后面加B&& 一个X进制的数据左移1位,相当于乘于X4.16位机的意思:&& &(1)运算器一次最多处理16位的数据&&& (2)寄存器最大宽度为16位&&& (3)寄存器和运算器之间通路为16位,即数据总线16条5.8086传送物理地址方法是:段地址*16+偏移地址=物理地址&& 段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数&& 偏移地址为16位,16位地址寻址能力为64KB,所以一个段最大长度为64KB6.段寄存器&& 4个段寄存器:CS,DS,SS,ES&& CS为代码段寄存器,IP为指令指针寄存器&&& 8086机中,任意时刻,cpu将CS:IP指向的内容当做指令执行&& 8086CPU加电启动或复位后,CS和IP被设置为CS=FFFFH,IP=0000H&& FFFF0H单元中的指令时8086PC机开机后执行的第一条指令7.修改CS,IP的指令&& 想同时修改CS,IP&& jmp 1000:0&& 则CS=1000H,IP=0000H&& 仅修改IP的内容&& jmp 某一合法寄存器8.8086cpu工作过程:& (1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;& (2)IP指向下一条指令& (3)执行指令。(转到步骤(1),重复这个过程9.DEBUG的功能&& (1)用R命令查看,改变cpu寄存器内容&&& 例子:r && &功能:查看寄存器&& &&& &&&& r ax & 功能:修改ax寄存器内容&& (2)用D命令查看内存中内容&&& 例子:d 1000:0&& &&& &&&& d 1000:0 f&& (3)用E命令改写内存中的内容&&& 例子:采用“e 起始地址 数据 数据 数据..."&&& e
1 2 3 4 5 6 7&&&&& 写机器码&& &&& &&&& 采用提问方式一个一个地改写内存的内容&&& e 1000:0&& &&& &&&& 可以向内存中写入字符 & e
'a' 2 'b' 3 'c'&&&&& 写机器码和字符&& (4)用U查看内存中机器码含义,用T执行内存中的机器码&& (5)用A以汇编指令形式在内存中写入机器指令&& (6)注意ROM的地址范围是无法改变其内容的& (7)用g命令跳到某指令&& 用t命令单步执行&&& 用p命令跳跃循环第三章 寄存器(内存访问)1.DS段寄存器,通常用来存放要访问数据的段地址&& [...] 表示一个偏移地址为...的内存单元,8位,其段地址默认在DS2.8086不支持将数据直接送入段寄存器,应该先将数据送入一个一般的寄存器,如AX,再将AX送入DS3.字的传送:只要在mov指令中给出16位的寄存器就可以进行16位的传送&& 在内存和寄存器之间传送字型数据时,高地址单元对应高8位寄存器,低地址单元对应低8位寄存器4.栈& 8086出入栈都是以字(16位)为单位进行的& SS:SP指向栈顶,改变SP后写内存的是入栈,读内存后改变SP的是出栈& push:SP=SP-2;向SP:SP指向的字单元中送入数据& pop:从SS:SP指向的字单元中读数据;SP=SP+2& 8086只记录栈顶,栈空间的大小要我们自己管理5.段&& 数据段:段地址在DS&& 代码段:段地址在CS,偏移地址在IP&& 栈段:&& 段地址在SS,偏移地址在SP6.一段内存,可以使用代码段,数据段,栈段,关键是各寄存器的设置,即CS,IP,SS,SP,DS第四章 一个程序1.debug 将可执行程序加载入内存后,cx中存放的是程序的长度2.可执行程序加载入内存时,会有一个psp,即进程描述符,占用256(100H)字节。第五章 [BX]和loop指令1.cx寄存器是存放循环次数,与loop相配合2.在汇编源程序中,数据不能以字母开头,如mov ax,0ffffh3.在dos下,一般情况,0:200-0:2ff空间中没有系统或其他程序的数据或代码4.mov指令 不支持内存到内存的数据传送,必须要借助寄存器 & (这是当然的,硬件是这么设计的)
5.cpu 在读取指令的时候更改IP寄存器的值,而不是在执行指令后;(在cpu读指令时,程序计数器会加1,也即是ip寄存器,这在组成原理上)而jmp指令是用来更改指令地址的,所以当jmp指令刚刚执行完毕,ip更改两次。
第六章 包含多个段的程序1.段名相当于标号,只代表段地址2.在汇编语言用assume将cs与code联系起来,只不过是要告诉编译器,对机器执行时没有影响的,必须在机器指令中将code标志的地址送进cs才有用。要记住,assume只是伪代码,只是在源程序存在的信息,编译后就灭有3.cpu到底如何处理我们定义的段中的内容,是当做指令或数据,还是栈空间,完全是靠程序中具体的汇编指令,和汇编指令对cs:IP,ss:sp,DS等寄存器的设置第七章 更灵活的定位内存地址的方法1.and 按位与&& and al,B& 通过该指令可将操作对象的相应位设为0&& or 按位或&&&& or al,B&&& 通过该指令可将操作对象的响应位设为12.以'....'的方式指明数据是以字符的形式给出的& 如db 'unix'3.大小写转换可用按位或转换4.SI,DI是8086与bx功能相近的寄存器,SI,DI不能够分成两个8位寄存器来使用5.寻址方式[bx(或si,di)+idata],[bx+si或di],[bx+si(或di)+idata] 的意义6.二重循环或数组等表示方法第八章 数据处理的两个基本问题&&& 数据在哪与数据多长1.bx、si、di、bp 只有这4个寄存器可以在[..]中进行内存单元的寻址&& 在[...],这4个寄存器可以单独出现,或以4种组合出现:bx和si,bx和di,bp和si,bp和di&& 如果使用bp,段地址默认在ss中2.不同的寻址方式p164,有数组,结构体等,解决了数据在哪的问题3.指令处理的数据的长度& 8086cpu只能处理byte或word& (1) 通过寄存器指明& (2) 在没有寄存器名存在的情况下,用word ptr 或 byte ptr& &&&&&& mov word ptr ds:[0],1&&&&&& mov byte& ptr ds:[0],1& (3)有些指令默认了访问的字单元还是字节单元,如push4.div& 除法指令5.dd& 定义dword 双字型数据,伪指令,db,dw6.dup& 是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复7.寻址方式的综合运用& p166的例子说明了如何合理的利用寻址方式第九章 转移指令的原理1.可以修改IP,或同时修改CS和IP的指令统称为转移指令& && &只修改IP,称为段内转移,段内分为短转移,-128~127 近转移-&& && 同时修改CS和IP,称为段间转移2.offset 符号&&& 伪指令,功能是取得符号的偏移地址,即与IP为0的偏移3.jmp&&& 所对应的机器码中,不包含转移的目的地址,而是转移的位移jmp short 标号& 功能是(IP)=(IP)+8位位移&& 范围为-128~127,补码表示& 位移的机器码占1个字节 jmp near 标号 功能是(IP)=(IP)+16位位移&& 范围为-,补码表示& 位移的机器码占2个字节4.jmp far ptr 标号& 实现段间转移,包含转移的目的地址而jmp 标号 编译器会根据标号的不同位置,进行以上三种不同编译5.jmp 16位register 功能(ip)=(16位reg)6.jmp word ptr 内存单元(段内转移)&&& 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址=(ip)& jmp dword ptr 内存单元(段间转移)&& &功能:从内存单元地址处开始存放着两个字,是转移的目的偏移地址,高地址处的字是(CS),低地址的字是(IP)7.有条件转移指令 jcxz& 短转移,包含的机器码中是转移的位移,对ip的修改范围:-128~127&&& 功能相当于if((cx)==0)jmp short 标号8.循环指令 loop 短转移& 包含的机器码中是转移的位移,对ip的修改范围:-128~127&&& 功能相当于 (cx)--;if((cx)!=0) jmp short 标号9. jmp short 标号&&& jmp near ptr 标号&&& jcxz 标号&&& loop 标号&&& 等几种汇编指令,它们对IP的修改是根据目的地址和转移起始地址之间的位移来进行的,在它们对应的机器码中不包含转移的目的地址,而包含的是目的地址的位移,这种设计,方便了程序段在内存中的浮动装配&&& 如果转移位移超界,在编译时,编译器会报错。10.一个nop指令预留了一个字节的空间第十章 call和ret指令&& 都是转移指令 call即是调用,ret即是返回& call和ret是进行子程序设计的1. ret 功能是 pop ip&& 近转移&&& retf 功能是pop ip& pop cs& 远转移2.call 标号 根据位移进行转移功能是 push ip&& &&& & jmp near ptr 标号&& call far ptr 标号& 根据目的地址进行转移功能是 push cs&& &&& & push ip&& &&& & jmp far ptr 标号3.call 16位 reg&& push ip&& jmp 16位reg4.call word ptr 内存单元地址&& push ip&& jmp word ptr 内存单元地址5. call dword ptr 内存单元地址&&& push cs&&& push ip&&& jmp dword ptr 内存单元地址6.mul 乘法指令7.模块化程序设计&&& 对于批量参数的传递,有两种&&& (1)将批量的数据放到内存,然后将他们所在的内存空间的首地址放在寄存器,传递给需要的子程序&&& (2)利用栈来进行。C语言就是用栈传递参数8.编写子程序&&& 注意,开始时保存现场,即把子程序使用的所有寄存器入栈,结束时恢复现场& 子程序的标准框架:& 子程序开始:子程序使用的寄存器入栈&&&&&&&&&&&&&&&& 子程序内容&&&&&&&&&&&&&&&& 子程序中使用的寄存器出栈&&&&&&&&&&&&&&&& 返回(ret,retf)第十一章 标志寄存器1.zf标志,zero flag 执行结果为0,这zf=1,否则zf=0&&& 大多运算指令会影响标志寄存器,而传送指令mov,push,pop等不会影响,在使用一条指令时,要注意这条指令执行结果会对标志寄存器产生什么影响2.pf&& parity flag 奇偶标志位&& 结果bit位1的个数为偶(0,2...),则pf=1,否则pf=03.sf&& symbol flag 符号标志位& 结果为负,则sf=1.& 主要进行有符号数运算时进行判断4.cf&& carry flag& 进位标志位& 在进行无符号数运算的时候,有进位或借位,cf=15.of&& overflow flag 溢出标志位& 进行有符号数运算6.adc 指令& 带进位加法指令&&& 2个数相加再加进位&&& 作用& 可以对更大的数据进行加法运算7.sbb& 带借位减法指令&&& 对任意大的数据进行减法运算8.cmp& 比较指令,相当于减法运算,不保存结果,只对标志寄存器影响&&& cmp指令主要用于条件转移&& je& jne& jb& jnb& ja& jna&& equal&&& below&& above9.df标志和串传送&&& direction flag& 方向标志位&&& cld&& &&& sld && &&&& 设置字符串的传输方向&&& rep movsb10.pushf和popf&&& 用于标志寄存器的入栈与压栈第十二章 内中断1.对于8086cpu,内中断分为以下4类:(1)除法错误,比如除法溢出&&& 中断类型码为0(2)单步执行&&&&&&&&&&&&&&&&&&&&& 中断类型码为1(3)执行into指令&&&&&&&&&&&&&&&& 中断类型码为4(4)执行int指令&&&&&&&&&&&&&&&&& int n&& n即为中断类型码2.TF标志位为单步中断,IF标志位为中断屏蔽& if为1,执行,if为0,不执行内中断所引发的中断过程:(1)取中断类型码n;(2)标志寄存器入栈,IF=0,TF=0(3)CS,IP入栈(4)(IP)=(n*4),(CS)=(n*4+2)注意:上面的过程是cpu在响应中断时一次性完成的,设置IF,tf为0的目的是防止在执行相应的中断响应程序时再发生中断事件3.中断类型码为1个字节型数据,可以表示256种中断信息内存到0000:03ff的1024个单元存放着中断向量表即每4个单元存放1个表项,即相应的中断响应程序的地址,高地址字存放段地址,低地址字存放偏移地址4.TF是单步中断的标志,IF是内中断屏蔽对TF的设置命令是stt,clt对IF的设置指令是sti,cli利用对这两个标志位的设置,可保证程序在运行中不接受中断,防止在一些必须一次性完成某过程的程序段出错,这是非常重要的程序设计方法5.中断的应用主要是自己安装中断例程,然后用程序调用它,或者用程序直接调用BIOS或DOS所提供的中断例程6.在执行完向ss寄存器传送数据的指令后,cpu会接着执行下一条指令,而不会响应中断,这是因为ss:sp指向栈顶,对它们的设置必须连续完成,所以设置ss和sp的指令应该连续存放。第十三章 int指令1.内中断的一种:intah为参数,表示n号中断例程里面的子程序的编号int n n为中断类型码,功能是引发n号中断例程int 指令的功能与call相似,都是调用一段程序,返回时用iretiret功能是 pop IP &&&&&&&&&&&& pop CS&&&&&&&&&&&& popf2.BIOS和DOS所提供的中断例程&&&&&& BIOS是固化在系统板ROM上的一套程序& BIOS包含:(1)硬件系统的检测和初始化程序&&&&&&&&&&&&&&& (2)外部中断和内部中断的中断例程&&&&&&&&&&&&&&&& (3)用于对硬件设备进行I/O操作的中断例程&&&&&&&&&&&&&&&& (4)其他和硬件系统相关的中断例程& DOS也提供了中断例程& BIOS和DOS的中断例程安装到机器上P259第十四章 端口端口,即各种接口卡上的芯片上的寄存器,cpu对这些寄存器当做端口,进行统一编址,从而建立了一个统一的端口地址空间,cpu通过对这些端口的访问与各种外设进行连接。外设的输入不直接送入内存和cpu,而是送入相关的借口芯片的端口,cpu向外设输出也是端口1.CPU可以直接读写以下3个地方的数据&&& (1)cpu内部的寄存器 (2)内存单元 (3)端口(各芯片上的寄存器)2.端口的读写指令只有两条:in和out 用于从端口读取数据 和 往端口写入数据&&& 注意:在in和out指令中,只能使用ax和al来存放从端口中读入的数据或要发送到端口中的数据3.shl 逻辑左移指令& shr 逻辑右移指令4.CMOS芯片存放着实时钟和系统配置信息,供系统启动时BIOS程序读取。第十五章 外中断1.外中断源:(1)可屏蔽中断当cpu检测到可屏蔽中断信息时,如果IF=1,则cpu在执行完当前指令后响应中断,引发中断例程;如果IF=0,则不响应可屏蔽中断(2)不可屏蔽中断其中断类型码固定为22.键盘输入的处理过程(1)键盘产生扫描码;(2)扫描码送入60h端口;(3)引发9号中断;(4)cpu执行int 9中断例程处理键盘输入重要知识点:在编程时对于一些必须一步完成的过程应该注意屏蔽中断,可使用cli sti进行设置见例题p280第十六章 直接定址表&& 即哈希表地址标号:地址标号即那些只是表示地址的标号,有“:”数据标号:即包含地址,又包含对单元长度的描述,没有“:”主要用于直接定址表第十七章& 使用BIOS进行键盘输入和磁盘读写int9中断例程是对键盘输入的处理,将其输入送进键盘缓冲区int16中断例程是从键盘缓冲区取出键盘输入的扫描码及ASCII码综合研究&& 在C语言中,编程都要用到变量要从main函数开始printf函数接受的参数数量不定1.我们可以使用寄存器存储数据,而不需要用到变量2.不用main函数编程,C语言中对于main函数是采取调用,编译后就是汇编调用子程序,一定要采用main函数是因为C开发系统提供的一个obj文件里的程序要对main函数进行调用,这个文件将会连接在main函数的前面,这个文件时对C程序的初始化3.C函数接受不定数量的参数是采用栈。
阅读(4879) | 评论(0) | 转发(0) |
上一篇:没有了
给主人留下些什么吧!~~
请登录后评论。------解决方案--------------------2.理解正确
3.当产生中断,cpu就自动把TF与IF清0,不需要你自己用POPF等指令进行设置------解决方案--------------------1&一般情况下TF=0,除非调试器将他置位,你说的都对,TF用于调试软件,利用TF和INT&3,结合调试寄存器完全可以自己写调试器
2&确实是,中断清TF是为了加快中断例程实时性和高效性,但同时又不能影响其他机制,于是先入栈,再清TF,中断返回后弹出TF,不影响调试异常的处理,详细资料看保护模式下的调试寄存器资料
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
第一章_3 微处理器及存储器结构、堆栈
下载积分:2000
内容提示:第一章_3 微处理器及存储器结构、堆栈
文档格式:PPT|
浏览次数:78|
上传日期: 06:08:54|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2000 积分
下载此文档
该用户还上传了这些文档
第一章_3 微处理器及存储器结构、堆栈
关注微信公众号以下试题来自:
填空题CPU响应中断后将()寄存器入栈保存,然后自动将()标志和()标志复位。若要实现中断嵌套,必须在中断服务子程序中执行一条()指令。
Flags;IF;TF;开中断
为您推荐的考试题库
您可能感兴趣的试卷
你可能感兴趣的试题
1.填空题 256;0FFH;1K2.填空题 IRET;IP;CS;Flags3.填空题 入口地址;4;IP内容;CS内容4
A.允许中断
B.当前指令执行结束
C.CPU工作在最大模式下
D.不处于DMA操作期间65C02汇编指令集
<h1 STYLE="CoLor: #C02
(pinokio 译、编 )
65C02有16位(64K)的地址空间分成256个页面,每个256字节。
0 页面($0000-$00FF)有一些很特别的性质,例如寻址模式,它是非常重要的。
1 页面($0100-$01FF)是堆栈。
$FFFA-$FFFB字节是NMIB中断向量。
$FFFC-$FFFD字节是复位向量。
$FFFE-$FFFF字节是IRQ/BRK向量。
65C02有3个寄存器,栈指针,标志位(P)和计数器。寄存器是累加器(A),X变址寄存器,和Y变址寄存器,每一个都是8位的,大多数指令把结果留在累加器里;栈指针是一个8位的寄存器用来指示栈(1
页面)的偏移量,当使用push和pull指令时它自动增加和减少,你也可以用TSX和TXS指令直接访问和修改它的值。P标志包含下面这些占用1个位的标志:
符号Negative
当操作结果高位被设置(为负),该位被设置,否则被清除
溢出Overflow
当操作发生借位或进位时,该位被设置
遇到‘BRK’指令时,该位被设置
十进制Decimal
当该位被设置时,所以的算术操作都是BCD
(例如:09+01=10)。当该位被清除时,所有的算术操作都是以二为补码的二进制 (例如: 09+01=0A)
中断禁止Interrupt
当该位被设置时,不会发生中断
当操作结果为零时,该位被设置。否则被清除
当发生进位时,该位被设置
这些位按这个顺序排列(从7 [最高]到0 [最低]):
读取(load)&储存(store)指令
load accumulator将数据读入累加器
load X index将数据读入变址寄存器X
load Y index将数据读入变址寄存器Y
store accumulator储存累加器的数据
store X index储存变址寄存器X的数据
store Y index储存变址寄存器Y的数据
store zero储存零
push accumulator累加器入栈
push X index变址寄存器X入栈
push Y index变址寄存器Y入栈
push processor flags 标志位P入栈
pull (pop) accumulator累加器出栈
pull (pop) X index变址寄存器X出栈
pull (pop) Y index变址寄存器Y出栈
pull (pop) processor flags标志位P出栈
transfer stack pointer to X传送栈指针到X
transfer X to stack pointer传送X到栈指针
递增(increment)&递减(decrement)操作
increment accumulator累加器递增
increment X index变址寄存器X递增
increment Y index变址寄存器Y递增
decrement accumulator累加器递减
decrement X index变址寄存器X递减
decrement Y index变址寄存器Y递减
increment memory location指定的内存单元递增
decrement memory location指定的内存单元递减
arithmetic shift left, high bit into carry算术左移,高位移入进位标志
C&--A7,A&--(A&&1)
logical shift right, low bit into carry逻辑右移,低位移入进位标志
C&--A0,A&--(A&&1)
rotate left through carry通过进位标志循环左移
C&--A7,A&--((A&&1)+C)
rotate right through carry通过进位标志循环右移
C&--A0,A&--(A7=C+(A&&1))
and accumulator与累加器
or accumulator或累加器
exclusive-or accumulator异或累加器
test bits against accumulator测试累加器的某个位 ()
Z&--!(A&M),N&--M7,V&--M6
N=M7 V=M6 Z
compare with accumulator与累加器比较
compare with X index与X变址寄存器比较
compare with Y index与Y变址寄存器比较
test and reset bits对位进行测试和清除
test and set bits对位进行测试和设置
reset memory bit对内存位进行清除
set memory bit对内存位进行设置
add accumulator, with carry加累加器(带进位)
subtract accumulator, with borrow减累加器(带借位)
A&--A-M-~C
流程控制 指令
unconditional jump无条件跳转
PC&--Address
jump Subroutine跳到子程序
Stack&--PC,PC&--Address
return from Subroutine由子程序返回
PC&--Stack
return from Interrupt由中断返回
P&--Stack,PC&--Stack
From Stack
branch Always转移
PC=PC+offset
branch on equal (zero set)相等(零标志被设置)时转移
if Z=1,PC+=offset
branch on not equal (zero clear)不相等(零标志被清除)时转移
if Z=0,PC+=offset
branch on carry clear进位标志被清除时转移()
if C=0,PC+=offset
branch on carry set进位标志被设置时转移()
if C=1,PC+=offset
branch on overflow clear溢出标志被清除时转移
if V=0,PC+=offset
branch on overflow set溢出标志被设置时转移
if V=1,PC+=offset
branch on minus负数时转移
if N=1,PC+=offset
branch on plus正数时转移
if N=0,PC+=offset
branch on bit reset (zero)某位被清除时转移
branch on bit set (one)某位被设置时转移
处理器状态指令
clear carry flag清除进位标志
clear decimal mode清除十进制模式
clear interrupt disable bit清除中断禁用
clear overflow flag清除溢出标志
set carry flag进位标志
set decimal mode十进制模式
set interrupt disable bit中断禁用
transfer accumulator to X index传送累加器到X变址寄存器
transfer accumulator to Y index传送累加器到Y变址寄存器
transfer X index to accumulator传送X变址寄存器到累加器
transfer Y index to accumulator传送Y变址寄存器到累加器
no operation空操作
force break强行中断
Stack&--PC,PC&--$FFFE
BIT指令拷贝bit 6到V标志,bit 7到N标志(例外的是在直接寻址模式的时候V
& N没有触及)。累加器和操作数进行与操作
,Z标志将被适当地设置。(的说明:测试数如01…80应先被装入累加器,该指令应该不改变累加器)
& BCS指令:指令分别对应于BLT (大于时跳转) 和BGE (小于时跳转)。
一共有15种寻址模式,如下:
隐式寻址 [隐式] Implied
Addressing [Implied]在隐式寻址模式里,
包含操作数的地址被隐含在指令的操作码里。
累加器寻址 [累加器]
Accumulator Addressing
[Accumulator]这种寻址模式表现为只有一个操作数,另一个操作数隐含为累加器。
直接寻址 [直接]
Immediate Addressing
[Immediate]在直接寻址模式里,操作数被包含在指令的第二个字节里,不需要其他内存寻址。
绝对寻址 [绝对] Absolute
Addressing
[Absolute]在绝对寻址模式里,指令的第二个字节指定了有效地址的低八位,第三个字节指定高八位。因此,这种寻址模式允许访问全部的64K可寻址内存。
0页面寻址 [0页面] Zero
Page Addressing [Zero
Page]0页面寻址允许只取指令的第二字节并假设高位地址为0,以得到较短的代码和执行时间。小心地使用0页面寻址能有效地增加代码的效率。
绝对变址寻址 [绝对,X 或 绝对,Y]
Absolute Indexed Addressing [Absolute,X or
Absolute,Y]绝对变址寻址联合X或Y变址寄存器使用,以“绝对, X”和“绝对,
Y”的形式出现。有效地址由X或Y的内容加上指令的第二或第三字节包含的地址得到。这种模式允许变址寄存器包含变址或计数值而指令包含基址。这种寻址模式允许定位任何位置并且可以用变址修改多个地方,用以减少代码和指令时间。
0页面变址寻址 [0页面,X 或
0页面,Y] Zero Page Indexed Addressing [Zero Page,X or Zero
Page,Y]0页面变址寻址联合X或Y变址寄存器使用,以“0页面, X”和“0页面,
Y”的形式出现。有效地址由指令的第二个字节加上变址寄存器的内容得到。因为这是一个“0页面”寻址,所以第二字节的内容定位于0页面。另外,因为“0页面”寻址模式的特性,所以不会有进位加到高位内存,也不会发生跨页边界的问题。
相对寻址 [相对] Relative
Addressing
[Relative]相对寻址只用在转移(branch)指令指令中;它指定了条件转移的目标。指令的第二个字节变成一个操作数,作为偏移加到指向下一条指令的指令指针上。偏移范围从-128到127字节,相对于下一条指令。
0页面变址间接寻址 [(0页面,X)]
Zero Page Indexed Indirect Addressing [(Zero
Page,X)]0页面变址间接寻址(通常参考为 间接
X)指令的第二个字节加到X变址寄存器的内容上;进位被舍弃。加法运算的结果指向0页面的一个内存单元,而这个内存单元是有效地址的低8位。下一个0页面单元是有效地址的高8位。指向有效地址的高8位和低8位都必须在0页面内。
绝对变址间接寻址 [(绝对,X)]
Absolute Indexed Indirect Addressing
[(Absolute,X)](只用在跳转(Jump)指令) &
在绝对变址间接寻址中,指令的第二和第三字节的内容被加到X
寄存器。加法运算的结果指向一个内存单元,而这个内存单元是有效地址的低8位。下一个内存单元是有效地址的高8位。
变址间接寻址 [(0页面),Y]
Indexed Indirect Addressing [(Zero Page),Y]这种寻址通常参考为
间接,Y。指令的第二个字节指向0页面的一个内存单元,这个内存单元的内容被加到Y变址寄存器,结果是有效地址的低8位。加法的进位被加到0页面的下一个内存单元,结果是有效地址的高8位。
0页面间接寻址 [(0页面)]
Zero Page Indirect Addressing [(Zero
Page)]在0页面间接寻址模式里,指令的第二个字节指向0页面的一个内存单元,单元的内容是有效地址的低8位,下一个0页面单元的内容是有效地址的高8位。
绝对间接寻址 [(Absolute)]
Absolute Indirect Addressing
[(Absolute)](只用在跳转(Jump)指令)指令的第二个字节包含了一个内存单元的低8位地址,第三个字节包含了同一个内存单元的高8位地址。而这个内存单元是有效地址的低位,下一个内存单元是有效地址的高位,最后有效地址被装入16位的指令指针。
(pinokio的说明:[xxxx]表示地址为xxxx的内存数据,xxxx即指针;(yyyy)表示[yyyy]所指向的地址的内存数据,yyyy即指针的指针。下表中,#Oper表示以一个实际的数为操作数,其余为地址)
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
ADC (Zpg,X)
(Zero Page),Y(零页面),Y
ADC (Zpg),Y
(Zero Page)(零页面)
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
AND (Zpg,X)
(Zero Page),Y(零页面),Y
AND (Zpg),Y
(Zero Page) (零页面)
accumulator累加器
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Relative相对
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Relative相对
Relative相对
Relative相对
Relative相对
Implied隐含
Relative相对
Relative相对
Implied隐含
Implied隐含
Implied隐含
Implied隐含
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)( 零页面,X)
CMP (Zpg,X)
(Zero Page),Y(零页面),Y
CMP (Zpg),Y
(Zero Page) (零页面)
Immediate直接
Zero Page零页面
Absolute绝对
Immediate直接
Zero Page零页面
Absolute绝对
accumulator累加器
Zero Page&
Zero Page,X&
Absolute,X绝对,X
Immediate&
Zero Page&
Zero Page,X&
Absolute,X&
Absolute,Y&
(Zero Page,X)&
(零页面,X)
EOR (Zpg,X)
(Zero Page),Y&
(零页面),Y
EOR (Zpg),Y
(Zero Page) (零页面)
accumulator累加器
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Implied隐含
Implied隐含
Absolute绝对
(Absolute) (绝对)
(Absolute,X) (绝对,X)
JMP (Abs,X)
Absolute绝对
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
LDA (Zpg,X)
(Zero Page),Y(零页面),Y
LDA (Zpg),Y
(Zero Page)(零页面)
Immediate直接
Zero Page零页面
Zero Page,Y 零页面,Y
Absolute绝对
Absolute,Y绝对,Y
Immediate直接
Zero Page零页面
Zero Page,Y 零页面,Y
Absolute绝对
Absolute,Y绝对,Y
accumulator累加器
Zero Page 零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Implied隐含
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
ORA (Zpg,X)
(Zero Page),Y(零页面),Y
ORA (Zpg),Y
(Zero Page)(零页面)
Implied隐含
Implied隐含
Implied隐含
Implied隐含
Implied隐含
Implied隐含
Implied隐含
Implied隐含
accumulator累加器
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
accumulator累加器
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Implied隐含
Implied隐含
Immediate直接
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
SBC (Zpg,X)
(Zero Page),Y(零页面),Y
SBC (Zpg),Y
(Zero Page)(零页面)
Implied隐含
Implied隐含
Implied隐含
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Absolute,Y绝对,Y
(Zero Page,X)(零页面,X)
STA (Zpg,X)
(Zero Page),Y(零页面),Y
STA (Zpg),Y
(Zero Page)(零页面)
Zero Page零页面
Zero Page,Y 零页面,Y
Absolute绝对
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Zero Page零页面
Zero Page,X零页面,X
Absolute绝对
Absolute,X绝对,X
Implied隐含
Implied隐含
Zero Page零页面
Absolute绝对
Zero Page零页面
Absolute绝对
Implied隐含
Implied隐含
Implied隐含
Implied隐含
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 堆栈寄存器 的文章

 

随机推荐