32位微机原理上机实验报告:7种寻址方式指令编程
微机原理及应用实验(题目)
微机原理及应用实验实验一开发环境的使用一、实验目的掌握伟福开发环境的使用方法,包括源程序的输入、汇编、修改;工作寄存器内容的查看、修改;内部、外部RAM内容的查看、修改;PSW中个状态位的查看;机器码的查看;程序的各种运行方式,如单步执行、连续执行,断点的设置。
二、实验内容在伟福开发环境中编辑、汇编、执行一段汇编语言程序,把单片机片内的30H~7FH 单元清零。
三、实验设备PC机一台。
四、实验步骤用连续或者单步的方式运行程序,检查30H-7FH 执行前后的内容变化。
五、实验思考1.如果需把30H-7FH 的内容改为55H,如何修改程序?2.如何把128B的用户RAM全部清零?六、程序清单文件名称:CLEAR.ASMORG 0000HCLEAR: MOV R0,#30H ;30H 送R0寄存器MOV R6,#50H ;50H 送R6寄存器(用作计数器)CLR1: MOV A,#00H ;00 送累加器AMOV @R0,A ;00 送到30H-7FH 单元INC R0 ;R0 加1DJNZ R6,CLR1 ;不到50H个字节,继续WAIT: LJMP WAITEND实验二数据传送一、实验目的掌握MCS-51指令系统中的数据传送类指令的应用,通过实验,切实掌握数据传送类指令的各种不同的寻址方式的应用。
二、实验内容1.编制一段程序,要求程序中包含7中不同寻址方式。
2.编制一段程序,将片内RAM30H~32H中的数据传送到片内RAM38H~3AH中。
3.编制一段程序,将片内RAM30H~32H中的数据传送到片外RAM1000H~1002H 中。
4.编制一段程序,将片内RAM40H~42H中的数据与片外RAM2000H~2002H中的数据互换。
三、实验设备PC机一台。
四、实验步骤逐段编制程序,汇编无误后,用连续或者单步的方式运行程序,检查程序的运行结果,看是否达到预期的效果。
五、实验思考1.如何把片外RAM中1000H~100FH单元中的数传送到片外RAM中2000H~200FH单元中?2.如何把ROM中0200H~0207H单元的数传送至片外RAM0000H~0007H单元中?实验三数码转换一、实验目的掌握采用软件方法进行不同形式数据之间的转换,如十进制数与二进制数的转换、十六进制数与BCD码的转换、BCD数与ASCII码之间的转换、非压缩BCD码与压缩BCD码之间的转换。
32位微机原理上机实验报告:各种逻辑指令的编程
西北工业大学明德学院实验报告实验项目微机原理及应用班级 121204姓名田家豪王辰硕学号 121566 121567指导老师伍明高时间 2015-3-31实验题目各种逻辑指令的编程实验目的1、掌握在PC机上各种逻辑指令的用法2、熟悉各种逻辑指令的用法实验内容在上次编辑七种寻址方式实验的中加入各种逻辑指令的运算,并且调试。
程序如下:STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDDATA SEGMENTMSR DB 'HELLO,WORLD!$'LEN EQU $- MSRDDATA ENDSEXDA SEGMENTMSD DB LEN DUP(?)EXDA ENDSCODE SEGMENTASSUME CS:CODE,DS:DDATA,ES:EXDASTART: MOV AX,DDA TAMOV DS,AXMOV AX,EXDAMOV ES,AXMOV SI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOV BX,0NEXT: MOV AL,MSR[BX]MOV ES:MSD[BX],ALINC BXLOOP NEXTPUSH ESPOP DSMOV DX,OFFSET MSDMOV AH,9INT 21HMOV AX,2233HMOV DX,3344HADD AX,DXADD AL,DLADD AX,5566HADC AL,DHDIV BLMOV BX,6677HMUL BXSBB AX,DXMOV AX,4C00HINT 21HCODE ENDSEND START实验步骤1. 运行编译器,编译程序。
2. 单击编译,保存。
3. 调试程序。
实验总结1. 通过实验,熟悉了各种逻辑指令的用法,了解了其程序的编译。
2. 调试程序的过程中需要不断地发现问题、解决问题。
3. 实验过程中,各指令的用法十分复杂,需要不断练习,熟悉指令的运行目的。
32位微机原理指令汇总
注意:::红笔写的为根据课本该写的,可能有错!!!一、数据传输指令作用:它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSH把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHA 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器. PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次. 移位一次时, 可直接用操作码. 如SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数. 如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序(控制)转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )一测试无符号整数运算的结果(标志C和Z).JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于或者进位为0转移.JB/JNAE 小于等于或者进位为1转移.JBE/JNA 小于或等于转移.二测试带符号整数运算的结果(标志S,O和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.三根据单个条件标志位转移的条件转移指令。
32位微机原理与接口技术
32位微机原理与接口技术冯·诺伊曼机具有基本特点;1.计算机由运算器、控制器、存储器、输入设备与输出设备五部分组成。
2.采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
3.数据以二进制码表示。
4.指令由操作码和地址码组成。
8086微处理器的功能结构指令周期=取指周期+执行周期1.执行部件EU1)4个16位通用寄存器AX BX CXDX2)4个16位专用寄存器SP(堆栈指针)BP(基址指针)SI (源变址寄存器)DI(目的变址寄存器)3)16位标志寄存器状态标志有6个:CF、PF、AF、ZF、SF和OF进位标志CF 奇偶标志PF 辅助进位标志AF 零标志ZF符号标志SF 溢出标志OF控制标志有3个:TF、IF和DF跟踪标志TF 中断允许标志IF 方向标志df4)算术逻辑单元ALU 可以完成多种运算,包括加、减、乘、除等算术运算和与、或、非等逻辑运算。
2.总线接口部件BIU1)6字节的指令队列2)4个16位段地址寄存器CS、DS、SS、ES。
3)16位指令指针寄存器IP4)20位地址加法器由16位段地址寄存器和某个16位偏移地址相加,形成20位的地址,访问外部存储器。
U流水线和V流水线每条流水线都有自己的地址生成器、ALU。
U流水线可执行所有的整数和浮点指令(浮点指令会被提交给浮点单元实现);V流水线只能能执行简单的整数指令和一条异常的FXCH 指令。
IA-32微处理器的工作模式1.实地址模式32位微处理器完全模仿16位微处理器,只是功能稍强、速度更快。
通过修改控制寄存器CR0中的PE控制位,可以切换到保护模式。
2.保护模式该模式是处理器的原生模式,可访问4GB字节的物理存储空间,支持段、页两级保护机制,段有4个特权级,页面有2 个特权级。
0级为最高特权级,3为最低特权级。
可防止特权级低的程序或任务访问特权级高的段。
3.虚拟8086模式该模式不是一种专门的处理器工作模式,而是保护模式下的一种功能。
Win32汇编语言-寻址方式
2020/2/17
18
例:mov esi, offset array
直接
寻址
array的 地址
2020/2/17
19
2020/2/17
19
例:mov al, [esi]
寄存器间接 寻址
esi=00404000
地址00404000的 内容
2020/2/17
20
2020/2/17
20
例:mov al, [esi+4]
.data var1 BYTE 10h, 20h, 30h .code MOV esi, offset var1 INC BYTE PTR [esi]
2020/2/17
12
数组求和
.386
.model flat, stdcall
.data
W1 WORD 1234h, 5678h, 4321h, 8765h
2020/2/17
7
32位存储器寻址有效地址
32位有效地址=基址寄存器+变址寄存器+8/16/32位位移量
其中: • 位移量是8/16/32数值或者常量 • 任何32位通用寄存器都可以作为基址寄存器(默
认ESP/EBP使用SS;其他默认使用DS) • 任何除ESP之外的32位通用寄存器都可以作为变
.code
start:
mov ebx, offset array1
mov esi,1
mov al, [ebx+esi] ;也可以写成 mov al, [ebx][esi]
mov ebx, offset array2
mov al, [ebx+esi]
ret
;返回操作系统
end start
微机原理-实训-寻址方式
suogr@ 教学群号:31696867教9楼C506实验室西北师范大学计算机科学与工程学院 微机原理及汇编寻址方式索国瑞2014春选课班实训题目2014年3月24日星期一2西北师大计算机学院索国瑞:suogr @ 实训目的⏹初步了解指令的转移寻址方式⏹初步了解操作数的寻址方式⏹体验8086CPU 的物理地址和有效地址计算过程⏹进一步学习观察计算机运行状况⏹进一步学习分析计算机运行情况2014年3月24日星期一3西北师大计算机学院索国瑞:suogr @ 知识准备⏹寻址方式:就是确定操作对象的方式⏹ 依据操作对象的不同性质,寻址方式可分为: 与数据有关的寻址方式 与转移有关的寻址方式 隐含寻址⏹一般计算机系统中数据来源主要有以下四项 立即数:操作数在指令中 寄存器:操作数保存在寄存器中存储器:操作数保存在存储器中,一般就指内存 端口: 操作数在端口2014年3月24日星期一4西北师大计算机学院索国瑞:suogr @ 立即寻址⏹操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起存放在代码段区域。
取指令时与操作码一起被取入CPU的指令队列,不需要在指令执行时再访问存储器⏹例如 MOV AX, 1234H指令中的1234H就是立即数,其所对应的寻址方式就是立即寻址方式⏹立即数不能作为目的操作数使用,只能作为源操作数。
⏹8086指令系统中超过8位的立即数在存放时也遵循“低前高后”原则。
2014年3月24日星期一5西北师大计算机学院索国瑞:suogr @ 立即寻址例程分析⏹设有如下代码 MOV AL, 99H MOV BX, 1234H MOV CX, 5678H⏹这三条指令的源操作数都是立即数,都是立即寻址方式。
区别在于第一条指令的立即数是8位字节类型,而后两条指令的立即数都是16位字类型。
存储在内存中时要注意按照“低前高后”规则去理解⏹8086 CPU 指示将要执行的下一条指令的寄存器是CS 和IP ,前者提供段基址,后者提供段内偏移。
微机原理寻址方式
微机原理寻址方式
一、直接寻址
直接寻址是指微处理器从指令队列直接检索出一个指令,而另一种方法是间接寻址。
在直接寻址中,指令的参数是指令中内置的,指令的地址也是内置的。
这意味着,如果需要加载参数或者变更指令的地址,需要在另外的单元中完成。
因此,直接寻址是最简单易用的一种寻址方式,只要执行指令即可,不需要进行其他的复杂计算。
在微机原理中,直接寻址的一些指令如下:MOV,XCHG,JMP,CALL,RET等。
二、间接寻址
间接寻址是指微处理器从指令队列检索出的指令中,指令的参数可以在指令本身外面的处显示,而指令的地址可以在指令本身内部显示。
这意味着,在间接寻址中,需要计算参数和指令的地址,以便执行指令。
在微机原理中,一些间接寻址指令是:MOV[BX],M[BX]等。
三、基址寻址
基址寻址是一种特殊的间接寻址。
这种形式的寻址方式用于将一切基本操作符(包括引用操作数,存取操作码及一些常数)映射到一个寻址空间中。
这种寻址方式在微机原理中很常见,例如:MOVAL,[BX+SI],MOV[BX+SI],AL等。
四、索引寻址
索引寻址是一种特殊的间接寻址,这种寻址方式允许微处理器以索引(例如指令中的一些寄存器)来定位操作数。
32位微机原理03
负数求补运算,等效于用带借位的0 负数求补运算,等效于用带借位的0作减法
真值: 00H 08H 真值:-8,补码:[-8]补码=00H-08H=F8H 补码: 补码:11111000,真值: 00H H)= 08H 补码:11111000,真值:-(00H-F8H)=-08H=-8
+8 = 00001000 11110111 + 1 -8 = 11111000 0= -(8= -8 = 00000000 00001000) 11111000
定点格式( 定点格式(第3章) 浮点格式( 浮点格式(第9章)
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
1. 定点整数
定点格式: 定点格式:固定小数点的位置表达数值 定点整数: 定点整数:小数点固定在机器数的最右侧 定点小数: 定点小数:小数点固定在机器数的最左侧 无符号整数(无符号数) 无符号整数(无符号数)
示意图
十进制小数的转换
返回
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
二进制和十六进制数的相互转换
二进制和十六进制数之间具有对应关系 以小数点为基准 整数从左向右, 整数从左向右,小数从右向左 每4个二进制位对应一个十六进制位 00111010B 00111010B=3AH 11110010B F2H=11110010B
[X+ [X]补码+[Y]补码=[X+Y]补码 [X- [X]补码-[Y]补码=[X]补码+[-Y]补码=[X-Y]补码
微 机 原 理 与 接 口 技 术 · 第 4 版 机 械 工 业 出 版 社
4. 原码和反码
正数的原码、 正数的原码、反码和无符号数一样 求负数的原码、 求负数的原码、反码和补码
微机原理第三章寻址方式
MOV AX, 1000 ADD AL, [DI+2000]
02 85 00 20
C6 06 00 30 12
C7 06 00 30 34 12
MOV BYTE PTR[3000], 12
MOV WORD PTR[3000], 1234
操作码场 操作数场
操作数存在方式
在微型计算机中,操作数可能以以下三种方式存在:
二.立即寻址方式
这种寻址方式所提供 的操作数直接放在指令 MOV AL, C3H AL C3H
中,紧跟在操作码的后
面,与操作码一起放在 代码段区域中。立即数 可以是8位的,也可以 是16位. 立即寻址主要是用来 给寄存器赋初值.
MOV AX, 2050H
AH
AX 20H
AL
50H
三.寄存器寻址
操作数包含在CPU的内部寄存器中,
低地址
操作码 00H CS段
DS +
5000 0
3000 53000 50000 53000
30H
34H 12H
DS段 高地址
AX 12H 34H
如果操作数在DS以外的其他段(SS,ES)中,指令中必须指明 段寄存器(指定段超越前缀) MOV AX, ES:[3000H] 低地址 操作码
00H
ES + 2000 0 3000 23000 20000 23000 AX 12H 34H 34H 12H 30H
2.3 指令执行时间
总时间=基本执行时间+计算EA的时间+执行总线读/写
周期的时间
若存取的字操作数是从偶地址开始存放的规则字,其 存取可在一个总线周期完成,若存取的字操作数是从奇
地址开始存放的非规则字,其存取需在两个总线周期完
32位指令及其编程
;定义过程
checksumd PROC c USES bx cx,countp:word,arrayp:word mov bx,arrayp ;BX←数组的偏移地址 mov cx,countp ;CX←数组的元素个数 xor al,al sumd: add al,[bx] ;求和:AL←AL+DS:[BX] inc bx loop sumd ret checksumd endp 6.11
Visual C++的嵌入式汇编
格式 _ _asm { 指令 } 举例 _ _asm { mov eax,01h mov dx,0xD007 out dx,eax }
6.6
模块连接的注意事项
必须遵循共同的约定规则
命名约定 声明约定 寄存器使用约定 存储模式约定 参数传递约定
简单概括,略知一二
什么是混合编程
多种程序设计语言间,通过相互调用、参数 传递、共享数据结构和数据信息而形成程序 的过程就是混合编程
程序的大部分采用高级语言编写,以提高程 序的开发效率;在某些部分,利用汇编语言 编写,以提高程序的运行效率
6.1
混合编程方法
嵌入式汇编—— 在C/C++语言中直接使用汇编语言语句, 简洁直观、功能较弱 模块连接—— 两种语言分别编写独立的程序模块,分别产 生目标代码OBJ文件,然后进行连接,形成一 个完整的程序 使用灵活、功能强,要解决参数传递问题
供C语言程序调用的过程 .model small,c ;采用C语言类型 public min .code min proc ,var1:word,var2:word mov ax,var1 ;取第1个参数var1 cmp ax,var2 ;与第2个参数var2比较 jle minexit mov ax,var2 ;保存返回值 minexit: ret min endp end
7 种寻址方式及其基本 指令
7 种寻址方式及其基本指令寻址方式是计算机中指令执行时,计算需要访问内存地址的方式。
不同的寻址方式决定了如何计算出内存地址。
下面将介绍七种常见的寻址方式及其基本指令。
1.直接寻址:直接寻址是最简单的寻址方式,指令中直接给出了要访问的内存地址。
指令的操作数直接指向了存储器中的某个地址。
例如,"LOAD A, 100"表示从地址100加载数据到寄存器A中。
2.立即寻址:立即寻址方式是将常数直接作为指令操作数使用。
指令中给出了要操作的具体数值,而不是内存地址。
例如,"ADD A, 10"表示将寄存器A的值加上10。
3.间接寻址:间接寻址是通过间接寻址寄存器来确定要访问的内存地址。
指令中给出了要操作的寄存器,而不是具体的内存地址。
例如,"LOAD A,(B)"表示从存储器中加载B寄存器中的值作为内存地址,并将该地址处的内容放入寄存器A中。
4.寄存器寻址:寄存器寻址方式是将寄存器作为指令的操作数。
指令中给出了要操作的寄存器,而不是具体的内存地址或数值。
例如,"ADD A, B"表示将寄存器B的值加上寄存器A的值。
5.寄存器间接寻址:寄存器间接寻址方式是通过寄存器中的地址来确定要访问的内存地址。
指令中给出了要操作的寄存器,该寄存器中存储了内存地址。
例如,"LOAD A, (B)"表示从存储器中加载B寄存器中存储的内存地址处的内容,并将该内容放入寄存器A中。
6.相对寻址:相对寻址是通过指令中的相对偏移量来计算要访问的内存地址。
指令中给出了指令执行时相对于当前指令地址的偏移量。
例如,"JUMP 10"表示程序跳转到当前指令地址加上10的位置。
7.基址寻址:基址寻址方式是通过基址寄存器中存储的基地址加上一个偏移量来确定要访问的内存地址。
指令中给出了基址寄存器和偏移量。
例如,"LOAD A, (B+10)"表示从存储器中加载B寄存器中存储的基地址加上10的偏移量处的内容,并将该内容放入寄存器A中。
经典:7种寻址方式
15.12.2020
7
的确,这两条指令执行的结果是完全相同的, 都是将00H单元中的内容送到A中去,但是执行的过 程不同,执行第一条指令需要2个机器周期,而第二 条则只需要1个机器周期,第一条指令变成最终的目 标码要两个字节(E5H 00H),而第二条则只要一个 字节(E8H)就可以了。
15.12.2020
15.12.2020
6
3.2.3 寄存器寻址
Register Addressing
对选定的工作寄存器R0~R7、累加器A、通用寄存器B、 地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。
MOV AL,BL (8086CPU的寄存器寻址方式)
提一个问题:我们知道,工作寄存器就是内存单元 的一部分,如果我们选择工作寄存器组0,则R0就 是RAM的00H单元,那么这样一来,MOV A,00H 和 MOV A,R0不就没什么区别了吗?
寄存器间接寻址
变址寻址 相对寻址
位寻址
15.12.2020
寻址空间(操作数存放空间) 程序存储器
片内RAM低128字节、SFR 工作寄存器R0~R7,A,B,DPTR 片内RAM:@R0,@R1,SP 片外RAM:@R0 ,@R1,@DPTR 程序存储器:@A+PC,@A+DPTR 程序存储器256字节范围内:PC+偏移量 片内RAM的位寻址区(20H~2FH字节地址) 某些可位寻址的SFR
第三章 MCS-51指令系统 Instruction Set
§3.1 概述
7种寻址方式,111条指令
字节数
单字节指令:49条 双字节指令:45条 三字节指令:17条
运算速度
7 种寻址方式及其基本 指令
7 种寻址方式及其基本指令1. 立即寻址(Immediate Addressing)立即寻址方式是将操作数直接嵌入到指令中作为常数,指令执行时直接使用该常数作为操作数。
例如,一条指令可以是“ADD R1, #5”,表示将寄存器R1中的值与常数5相加。
2. 直接寻址(Direct Addressing)直接寻址方式是将操作数的地址直接指定在指令中,指令执行时直接使用该地址读取操作数。
例如,一条指令可以是“LOAD R1, 1000”,表示将地址1000处的内容加载到寄存器R1中。
3. 寄存器寻址(Register Addressing)寄存器寻址方式是将操作数的值存储在寄存器中,指令执行时直接使用该寄存器作为操作数。
例如,一条指令可以是“ADD R2, R3”,表示将寄存器R2中的值与寄存器R3中的值相加。
4. 间接寻址(Indirect Addressing)间接寻址方式是将操作数的地址存储在一个寄存器或内存单元中,指令执行时先读取该地址,再根据该地址读取操作数。
例如,一条指令可以是“LOAD R1, (R2)”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中。
5. 寄存器间接寻址(Register Indirect Addressing)寄存器间接寻址方式是将操作数的地址存储在一个寄存器中,指令执行时先读取该地址,再根据该地址读取操作数。
例如,一条指令可以是“LOAD R1, (R2)+”,表示先从寄存器R2中读取一个地址,再根据该地址将内容加载到寄存器R1中,并将寄存器R2的值增加。
6. 相对寻址(Relative Addressing)相对寻址方式是将操作数的地址与指令的地址相加或相减得到实际的操作数地址,指令执行时直接使用该地址读取操作数。
例如,一条指令可以是“LOAD R1, label”,表示将标签label的地址与指令的地址相加得到实际的地址,并将该地址处的内容加载到寄存器R1中。
32位微机原理
32位微机原理一、引言32位微机是一种计算机架构,它具有32位数据总线和32位地址总线。
本文将介绍32位微机的基本原理和工作方式。
二、32位微机的组成部分1. 中央处理器(CPU):32位微机的CPU是其核心部件,负责执行指令和控制计算机的运行。
它包括运算器、控制器和寄存器等组件。
2. 存储器:32位微机的存储器主要包括随机存取存储器(RAM)和只读存储器(ROM)。
RAM用于临时存储数据和程序,而ROM用于存储固化的程序和数据。
3. 输入输出设备:32位微机通过输入输出设备与外部环境进行交互。
常见的输入设备包括键盘、鼠标和触摸屏,而输出设备包括显示器、打印机和扬声器等。
4. 总线系统:32位微机的各个组件通过总线进行数据和控制信号的传输。
总线系统包括数据总线、地址总线和控制总线。
三、32位微机的工作原理1. 指令执行过程:32位微机的CPU按照指令的顺序逐条执行。
它从存储器中读取指令,并根据指令的操作码和操作数执行相应的操作。
2. 数据传输过程:32位微机的数据传输可以分为内部数据传输和外部数据传输。
内部数据传输是指CPU内部寄存器之间的数据传输,而外部数据传输是指CPU与外部设备之间的数据交换。
3. 中断处理过程:32位微机可以响应外部设备的中断请求。
当外部设备发生中断时,CPU会立即暂停当前任务,保存现场并执行中断服务程序,然后返回到原来的任务继续执行。
四、32位微机的特点和优势1. 大内存寻址能力:32位微机的32位地址总线可以寻址的内存空间达到4GB,远远超过16位微机的64KB寻址能力,可以处理更大规模的程序和数据。
2. 高精度运算能力:32位微机的32位数据总线可以进行高精度的运算,提供更准确的计算结果。
3. 并行处理能力:32位微机的指令集架构支持并行处理,可以同时执行多条指令,提高计算机的运行效率。
4. 多任务处理能力:32位微机的操作系统支持多任务处理,可以同时执行多个任务,提高计算机的利用率。
七种寻址方式举例例题
七种寻址方式举例例题:
1. 立即寻址:指令直接包含操作数,不需要经过任何地址计算。
例:MOV AL, 5 //把5赋值给AL寄存器。
2. 寄存器寻址:操作数在寄存器中,不需要经过任何地址计算。
例:MOV AX, CX //把CX寄存器的内容(即计数器的值)赋给AX寄存器。
3. 寄存器间接寻址:操作数需要经过地址计算才能取出,常用于寄存器间接寻址。
例:MOV DX, 8000H //把偏移地址8000H处的数据(即偏移地址加起来,实质是访问内存地址)赋给DX寄存器。
4. 直接寻址:指令直接给出操作数,需要经过地址计算。
例:MOV AL, [DX] //把偏移地址为DX的数据赋给AL寄存器。
5. 零页寻址:对于某一段指令来说,0页至1页的1024个字节被作为一个整体来处理,称这一段地址为零页。
例:MOV AX, [0F00H] //把偏移地址为0F00H的数据(即偏移地址加起来,实质是访问内存地址)赋给AX寄存器。
6. 间接寻址:指令给出的是内存地址,需要经过地址计算才能取出操作数。
例:MOV AX, [ES:DX] //把ES段的偏移地址DX(即ES段中偏移地址为DX的数据)处的数据赋给AX寄存器。
7. 偷窥寻址:在X86指令集中,有些指令后面可以跟一个“偷窥”码,该码指示该指令后面紧跟的某一条指令(即偷窥指令)被执行时,其内容被自动设置为零。
例如,在8086微处理器的汇编语言中,LOP指令用于循环执行一段指令,当执行LOP时,LOP后面的指令被执行,其内容被自动设置为零。
微机原理寻址方式实验总结
微机原理寻址方式实验总结嘿,朋友们!咱来聊聊微机原理的寻址方式实验。
这寻址方式啊,就像是在一个大宝藏库里找宝贝。
你得知道怎么找才能最快最准地拿到你想要的那个宝贝。
直接寻址,这就好比你直接知道宝贝放在哪个柜子的哪个格子里,你一伸手就能拿到。
比如说,地址就在指令里明明白白地写着,多干脆!
寄存器寻址呢,就好像宝贝在你身边的几个小箱子里,你不用到处跑,打开身边的小箱子就行。
寄存器里存着数据或者地址,直接用,方便得很!
间接寻址就有点绕啦。
这就像是有个中间人知道宝贝在哪,你得通过他才能找到。
比如通过寄存器间接找到地址,再去拿宝贝。
基址加变址寻址,这就像是有个基础的大柜子,然后再根据一些变化的因素去找到具体的小格子。
是不是有点复杂?但搞明白了,那可就厉害了!
相对寻址呢,就好比你知道宝贝在离你现在位置不远处,按照相对的距离就能找到。
在做这个实验的时候,我可是费了不少心思。
一开始,那真叫一个晕头转向,感觉这些寻址方式就像一群调皮的小精灵,到处乱跑,我怎么都抓不住。
可咱不能认输啊!我就一个一个慢慢琢磨,反复试验。
做着做着,突然就有了那种“柳暗花明又一村”的感觉。
你说,如果连这寻址方式都搞不定,以后怎么去驾驭更复杂的微机世界?就像盖房子,基础不打牢,能盖出结实的大楼吗?
所以啊,朋友们,好好掌握这些寻址方式,这可是通往微机原理深处的关键钥匙。
只有把这钥匙握在手里,咱们才能在微机的世界里畅行无阻,发现更多的精彩!。
七种寻址方式
b.位名称的表示方法。例如:PSW.5是F0标志位,可使用 F0表示该位。 c.单元地址加位数的表示方法。例如 :(0D0H).5。 d.特殊功能寄存器符号加位数的表示方法。例如:PSW.5。 例 SETB 3DH ;将片内RAM位地址3DH即27H 单元的第5位置“1”。
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 0 0 0 0 0 0 38 3F 3E 3D 3C 3B 3A 39
例
MOV
A, 3AH
程序存储区
;把3AH单元的内容送A。
500 501
E5 3A 3A
片内RAM区 10 10
ACC
MOV
A, 3AH执行示意图
3. 寄存器间接寻址方式 寄存器中存放的是操作数的地址 在寄存器的名称前面加前缀标志“@” 访问内部RAM或外部数据存储器的低256个字节时,只 能采用R0或R1作为间址寄存器。例如: MOV A,@Ri ;i=0或1 其中Ri中的内容为40H,把内部RAM中40H单元的内容送 到 A。 寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如: MOVX A,@DPTR
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
MOV A, #3AH
微机原理寻址方式
微机原理寻址方式1、立即寻址(immediate addressing )双字节指令,第一个字节是操作码,第二个字节是操作数,操作数在指令中直接给出,故称为立即数。
在立即数前面必须加上前缀“#”。
如:MOV DPTR,#1234H1234H是立即数,指令功能是把16位立即数1234H送到数据指针DPTR中,如图。
注意:立即寻址只能用于源操作数。
MOV A,#12H (√)MOV DPTR,#1200H (√)MOV #1200H,DPTR (×)2、直接寻址(direct addressing)在指令中直接给出操作数单元的地址。
如:MOV A,3AH指令功能:把片内RAM中3AH单元内的数据传送给累加器A。
如图所示:直接寻址方式只能给出8位地址,限于片内RAM:(1)低128单元,在指令中直接以单元地址形式给出。
(2)特殊功能寄存器,在指令中直接以单元地址形式给出,还可以寄存器符号形式给出。
如:PUSH DPH==PUSH 83H。
直接寻址访问累加器A时,用ACC表示累加器,以便与寄存器寻址方式区别。
3、寄存器寻址(register addressing)在指令中将指定寄存器的内容作为操作数。
寄存器寻址方式中,用寄存器名表示寄存器。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器( A, B, DPTR,)。
如:INC R0指令功能:把寄存器R0的内容加1,再送回R0中。
4、寄存器间接寻址(register indirect addressing )在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。
在该寻址中,寄存器的名称前需加前缀“@”。
例如,指令MOV A,@R0指令功能:若R0寄存器的内容是3AH,指令的功能是以3AH为地址,将3AH地址单元的内容送到累加器A中。
如下图:寄存器间接寻址的寻址范围:(1)片内RAM的低128单元,只能采用R0或R1为间接寻址寄存器。
七种寻址方式
七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二操作数。
该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
图是指令“MOV AX, 4576H”存储形式和执行示意图。
二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。
把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下: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等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
1、源操作数是寄存器寻址方式如:ADD VARD, EAX ADD VARW, AX MOV VARB, BH等。
其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。
在第4章将会学到如何定义它们。
2、目的操作数是寄存器寻址方式如:ADD BH, 78h ADD AX, 1234h MOV EBX, 12345678H等。
3、源和目的操作数都是寄存器寻址方式如:MOV EAX, EBX MOV AX, BX MOV DH, BL等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西北工业大学明德学院
实验报告
实验项目微机原理及应用
班级 121204
姓名田家豪王辰硕
学号 121566 121567
指导老师伍明高
时间 2015-3-24
7种寻址方式指令编程
实验目的
通过对传送和算术运算类指令的实验结果的观察和分析,加深对各指令完成操作功能的理解,并了解各指令对于相关标志位的影响。
实验内容
7种寻址方式指令的编程包括:
(1)MOV传送类;
(2)堆栈操作传送;
(3)交换传送;
(4)输入/输出传送;
(5)串传送指令等。
(6)在指令后面注释源操作数和目的操作数的寻址方式。
程序如下:
DA TA SEGMENT
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA
STADA TA
SEGMENTRT:MOV AX,DATA
MOV DS,AX
MOV AL,04H
MOV DX,2000H //立即寻址
MOV AX,99AAH
MOV BX,1257H
SUB AX,BX //寄存器寻址
MOV AX,5000H
MOV SI,3000H
MOV AX,DS:[SI] //寄存器间接寻址
PUSH AX
PUSH EBX
PUSH[SI]
PUSH DOWRD PTR[DI]
PUSHW 0A124H
PUSHD 20H //堆栈操作指令
MOV AX,3000H
XCHG AX,1000H
MOV 3000H,AX //交换传送指令
IN DX,7000H
IN AX,DX //输入指令
1. 建立文件,编写源程序。
2. 编译、连接生成EXE可执行文件。
3. 行调试,分析每条指令的寻址方式,验证操作数所在的地址空间。
实验总结
1. 通过本次实验,可以正确的编写传送类指令与算术运算类指令、逻辑运算类指令的应用实验,并了解了编译链接调试的过程,检查程序结果的正确与否,会观察分析。
2. 更加清楚的能分析各种运算指令,并对其有了更深的理解。
3. 实验过程中必须认真仔细,特别是在应用逻辑运算指令时,不然一旦有一点错误,实验就无法正常进行,必须返回去查找错误,费时费力。