当前位置:文档之家› 计算机硬件基础实验报告1(单片机结构&寻址方式和指令系统)

计算机硬件基础实验报告1(单片机结构&寻址方式和指令系统)

实验2 单片机结构
姓名 孙叶城
学号 2011011700 实验班号 33
机器号
35
一、 实验目的
1. 了解MSP430F1XX 单片机结构
2. 掌握P1~P6基本输入/输出有关寄存器功能 3. 掌握计算机中数的表示和编码 4. 掌握汇编语言指令格式 二、 实验基本任务
1. 了解MSP430F1XX 单片机结构 1) 了解MSP430F149单片机结构
a) PC 当前的初值 0x1100
b) 记录MSP430F149的外围模块
8 bits:Special Function , Port1/2/3/4/5/6 , USART 0 UART/SPI Mode , USART 1 , System Clock , Comparator A ,SFR , RAM , INFO , FLASH.
16 bits: Watchdog Timer , Multiplier , Timer A3 , Timer B7 , ADC12 ,Flash . c)
d) 绘制e) 思考为什么实验板的硬件系统对MSP430F13X 、MSP430F14X 和MSP430F16X 是
兼容的?
FFFFh
1100h
09FFh
0200h
0000h
01FFh
2)了解MSP430F135单片机结构 a) PC 当前的初值 0xC000
b) 记录MSP430F135的外围模块
8 bits: Special Function , Port1/2/3/4/5/6 , USART 0 UART/SPI Mode , System Clock , Comparator A ,SFR , RAM , INFO , FLASH .
16 bits: Watchdog Timer, Timer A3 , Timer B3 , ADC12 ,Flash . c) 记录SFR 、RAM 、FLASH 的起始地址和末地址,并计算各空间大小
d) 绘制
e) 比较与MSP430F149的存储系统空间分配图有何不同
RAM 的末地址和FLASH 的起始地址不同。

进而RAM 和FLASH 的大小不同。

2. 了解端口P1~P6的选择PXSEL 、方向PXDIR 、输入PXIN 、输出PXOUT 各寄存器功能
FFFFh
C000h
03FFh
0200h 0000h
01FFh
2)
3.了解程序计数器PC(即R0寄存器)的变化规律
1)
a) 0x FFFE~0xFFFFH的值0x1100
b) 程序执行的第一条指令40B2 5A80 0120MOV.W #5A80H , &WDTCT
2)能否将FFFE~FFFFh内存的内容改为1200h?为什么?
在连接实验板时不行,simulator时可以。

不过执行会出问题,因为地址1200h处没有相应的指令
3)在simulator下把FFFE~FFFFh的内容改为1200h,在DEBUG下用reset复位后,PC 的变化变成了0x1200,再GO命令执行程序,结果User error: Illegalopcode found on address 0x1200 ,原因地址1200h处没有相应的指令。

4.掌握计算机中数的表示和编码(可在simulator方式下完成)
1)0XFF06看作无符号数65286,看作带符号数-32518。

2)如何利用DEBUG下命令知道表示一条什么指令?
在Disassembly窗口下,机器码右侧和上方都有相应的汇编指令。

3)0x5439看作无符号数21561,看作带符号数21561,看作一条指令的机器码ADD.W @R4+ , R9,看作ASCII码T9。

4)如何理解存放在内存中的内容?
在Disassembly中输入内存地址,即可在相应机器码旁看到对应的汇编指令——反
汇编
思考:
1)为什么查看0XFF06是一条什么指令的机器码时,按顺序修改存储单元的内容时输入的是0x06,0XFF,而不是0XFF,0x06?
MSP430F1XX采用小端模式,高位放在高地址中,低位放在低地址中。

2)若存储系统内顺序存放了0xB4,0x40,0x00,0x04,0x20,0x00 六个字节数据,请问这
六个字节看作一条指令的机器码,是一条什么指令?指令中用到了哪些寻址方式?
mov.w #0x400 , 0x20(R4)
把立即数0x400放到以“R4中的内容加0x20”为地址的内存中
寻址方式:立即数寻址,寄存器相对寻址
5.指令格式学习(可在simulator方式下完成)
#include“msp430.h” ;错误:include后面要加一个空格,引号应为英文标点ORG0FFFEh
DC16 main
ORG1100H
main: MOV.W #5A80h, &WDTCTL ;关闭看门狗,此句不能删除,可暂不分析
MOV.B #256,R5 ;错误:应以字为操作单位
MOV #0200H, R6 ;正确:把立即数0200放入R6中
MOV #10, @R6 ;错误:寄存器间接寻址不能用于目的操作数,应把@R6改为0(R6) MOV R5, @R6+;错误:寄存器间接增量寻址不能用于目的操作数,应把@R6+改为2(R6)
SUB R7, #1A;错误:立即数不能作为目的操作数,应把二者颠倒或先把1A放入某寄存器中再相减,且1A错误,应改为1AH
MOV &R8, R9;错误:没有& R8这种寻址方式,应修改为其他寻址方式
MOV #main, R10;正确:把main的地址放入R10中
MOV main, R10;正确:把main代表的数放入R10中
jmp $ ;此句不能删除,可暂不分析
END
思考:程序中指令MOV #main, R10 和指令MOV main, R10有什么不同?如何
在DEBUG下查看符号main 所指向的存储单元的地址和存储单元的内容?
不同:MOV #main, R10是把main的地址放到R10里,MOV main, R10是把main的内容放到R10
里。

在Disassembly输入main即可看到main所指向的存储单元的地址和存储单元的内容。

三、已完成的选做任务
1.理解计算机取指令执行指令的工作原理、以及取非法指令的结果
Simulator下
0000H : ????
单步执行:User error: Illegalopcode found on address 0x400
实验3寻址方式和指令系统
姓名孙叶城学号2011011700实验班号33机器号35
一、实验目的
1. 学习MSP430 的寻址方式和指令系统
2. 了解计算机取指令、执行指令的工作过程
3. 掌握DEBUG 下的运行命令、调试程序的方法
二、实验基本任务
1. 学习寻址方式和指令系统(可在simulator 方式下完成)
1)寻址方式:立即数寻址,寄存器寻址,寄存器间接寻址,寄存器相对寻址
2)程序的功能:把从300h开始的六个单字节的数字相加,把结果放在R14中
3)如何查看程序执行的结果:View/Register/CPU Register/R14
4)如果将程序中的ADD.B @R14,R15 和INC R14 两条语句改为一条ADD.B @R14+,R15 语句,采用了什么寻址方式?程序执行的功能是否改变?
寄存器间接增量寻址;程序执行功能不变
5)在4)的基础上将程序中的ADD.B @R14+,R15 改为ADD.W @R14+,R15,将MOV.B
R15, 0(R14)改为MOV.W R15, 0(R14), 重新执行程序,执行的结果有什么不同?
将以字为操作单位,把从300h开始的六个字的数字相加,结果变为8A84 6)思考:如果程序中的INC R4 写成了INC.B R4, 执行的结果一样吗?为什么?
不一样,INC.B R14将把0001h传给R14,而0001h上的内容为00.
因为以字节为单位时,高位清零。

2.调试程序练习(断点设置、调试、查看结果,需在FET Debbuger下完成)
问题:
第7行:应在0xFF前加#
第10行:应在delay前加#
第14行:应把3改为一个较大的数,如0xFFFF
3. 比较step into 和step over 的不同(可在simulator 下完成)
1)记录用step over(F10)执行程序中的call 指令后,SP 的变化
SP指针不变
2)记录用step into(F11) 执行程序中的call 指令后, SP 的变化
由0A00变成09FE再变成0A00
三、已完成的选做任务
1.(选做,可在simulator下完成)理解CPU对存储器进行字操作遵循的“对准偶地址”原则
注:为了使老师看清楚报告,我回答的问题用红色注明。

相关主题