第一次汇编实验
- 格式:docx
- 大小:753.76 KB
- 文档页数:8
第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。
(2)1KB的存储器有1024个存储单元。
存储单元的编号从0到1023。
(3)1KB的存储器可以存储1024*8个bit,1024个Byte。
(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。
(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
第2章寄存器答案检测点2.1(1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。
单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。
例如将4000H开始的10个字节内容清零或全部赋值为33H。
注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
三、实验仪器微机、VW,WA VE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器MCS51实验四、实验步骤1、新建工程文件。
(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。
3、运行和调试过程。
外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。
同时,学习掌握汇编程序的编写和调试过程。
实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。
2 熟悉循环结构程序的编写,进一步熟悉指令系统。
3 熟悉编程环境和程序的调试。
二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。
实验心得体会(汇编15篇)实验心得体会1创新实验距今已经已有一年,时间虽然很短暂,但是却在这里学到了很多知识,掌握了不少技巧。
第一次用超净工作台,第一次配固体培养基,第一次培养愈伤组织……在这里留下了很多美好的记忆。
从查阅文献开始,一步一步的自己设计实验,自己操作实验进程,感觉到了实验原来是如此美妙。
以前在高中的生物课中,植物组织培养不过是那一个背的滚瓜烂熟的.名词而已。
在这里真真切切的感受到生命的力量。
大物、生化、概率论这些空洞的理论知识曾让我怀疑自己到底是不是学生物的,但这个创新实验感觉到我们是真正的在与生物学接触。
我们小组四个人可以为自己继代没有污染而欢欣鼓舞,也可以看着植物渐渐长而兴奋不已。
最后一次配的彩色培养基,装点上那含苞欲放的花骨朵,漂亮极了。
这些都让我们感受到了实验的快乐,训练了我们独立思考和团队合作的精神。
当然实验必然伴随失败,曾经培养基成了糊状,花种子久久不能发芽,继代三次还是没有开花等让人闹心的事情,但是在老师的帮助下,我们从实验步骤中寻找失败的原因,探寻解决办法,优化实验流程。
这个过程让我们学会了如何面对失败,如何正视困难。
这是对我们以后科研道路有着深远的影响。
最后,我非常感谢齐老师带我们的无私帮助和悉心教导,您在这一年里为我们付出了很多心血。
您是我们以后生物科学道路上的启蒙老师,谢谢您,让我在这一年里成长了很多!实验心得体会2刚开始时学大学数学实验的时候我都有一种恐惧感,因为对于它都是陌生的,虽然在学数值分析时接触过MATLAB,但那只是皮毛。
大学数学实验才让我真正了解到了这门学科,真正学到了MATLAB的使用方法,并且对数学建模有了一定的了解。
MATLAB在各个领域均有应用,作为数学系的学生对于MATLAB解决数学问题的.能力相当震惊,真是太强大了。
数学实验这门课让我学到了很多东西,收获丰硕。
第一节课我了解到了数学实验的一些基本发展史和一些基本知识。
通过这学期的学习,学完这门课,让我知道了原来数学与实际生活连接的是这么紧密,许多问题都可以借助数学的方法去解决。
单片机实验心得体会7篇单片机实验心得体会1三月七号下午我们做了第一次单片机实验,虽然对单片机还不是很了解,但在学长的带领下我们基本上了解了单片机的的开发环境,进行了简单的编程。
李老师的一番话令我很受启发。
实践出真知,这是永恒不变的真理。
只有将理论付诸于实践并在实践中纠正发展理论,我们才能算是得到了真正的知识。
实验开始,学长直接从具体的编译细节讲起。
没有太多的介绍和理论的空谈。
就像老师说的没有必要把人民币的各个细节都了解的很清楚后才开始用钱一样。
很多时候我们正是在那些细枝末节上浪费了太多不必要的时间和精力。
通过一个简单的程序的讲解,我们就对CVAVR和AVRStudio有了初步的掌握。
看着一闪一闪的1ED,我们小组感到了单片机的神奇和奥秘,一种难以言表的激动涌上心头。
我们就像看到了交通拥挤的路上因为有了我们设计的红绿灯而变得秩序井然一样欣慰。
接下来我们组稍微改了下程序,变为了同时控制四个灯,而且让它们依次亮起,只是延迟的时间比预定的要长一些。
这也应该是十字路口的交通灯的原理吧。
总结起来,本次试验还是比较成功的。
但对下一次的试验充满了期待,希望能做出更有用,更贴近生活的作品。
我想也正是在这种不断的自我期望中,人类才能不断的总结经验,阔步向前。
单片机实验心得体会2通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
汇编语言第3版答案【篇一:汇编语言习题答案 (3)】一、选择题(四选一)1.表示一条处理器指令所在存储单元的符号地址是a 变量b 常量c 标号d 偏移量2.汇编语言中的变量有多种类型属性,但错误的类型是a 字节型byteb 字符型charc 字型wordd 双字型dword3.执行mov bx,seg var指令,bx得到变量var的。
a 物理地址b 段地址c 偏移地址d 内容4.masm语句中,采用a 逗号b 分号c 冒号d 空格5.欲设定从偏移地址100h开始安排程序,可使用a org 100hb start=100hc start db 100hd start equ 100h6.与“mov bx,offset var”指令等效的指令是a mov bx,varb 1ds bx,varc les bx,vard 1ea bx,var.7.下条语句buf db l0 dup(3 dup(?,10),3,10)汇编后,变量buf占有的存储单元字节数是 b 。
a 100b 80c 40d 208.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的num1单元的内容是。
a 0b 0ffffhc 1d 0ffh9.要求将a、b两个字符的ascii码41h和42h顺序存放在连续两个字节存储单元中,可选用的语句是 a 。
a db`ab'b dw `ab'c db 0abhd dw 0abh10.在汇编语言程序中,对end语句叙述正确的是a end语句是一可执行语句b end语句表示程序执行到此结束c end语句表示源程序到此结束d end语句在汇编后要产生机器码11.下面的数据传送指令中,错误的操作是a mov ss:[bx+di],byte ptr 10hb mov dx,l000hc mov word ptr[bx],1000hd mov ds,2000h12.下面指令执行后,变量dab中的内容是daw dw 2a05hdab db 0fah?mov al,byte ptr dawsub dab,ala 0dahb 0fahc 0f5hd 0d0h13.根据下面的语句序列,ax寄存器的内容是。
不知是心血来潮,还是其它因素,突然又想起玩汇编语言了。
这几年也没少跟单片机打交道,包括51系列,430系列,ARM系列,但都是用C语言来开发。
不过由于使用C语言,实际上对这些CPU的了解还是不够深刻,当然除了51之外,因为那是我多年前曾经用汇编开发过的芯片。
尽管当今C语言已经在嵌入式产品的开发过程中成为主流,但我个人依然认为,要想真正了解CPU的特点,还得用汇编语言。
不知道这种观点是对还是错,也许是因为自己从硬件做起,写过机器码,用汇编语言做过优化,因此对汇编语音有一种特殊的偏爱。
51系列的芯片用多了,感觉有时写起程序来不太方便,因此总想寻找一些其它的8位单片机玩玩,正好手头有一个ST的三合一开发板,那是09年参加ST研讨会上买的,一直躺在那里,与其躺在那里,不如拿出来玩玩。
这几年,ST在国内推广STM32,力度不小,不过我一直没有用过,只是初步地看看资料。
原因在于在32位单片机方面,我一直在用Luminary公司的LM3S1138,感觉不错,一直都很顺利。
09年ST举办的研讨会上,ST除了介绍STM32外,也介绍了STM8,当时听了以后,觉得还行。
尤其是会上的低功耗演示给我留下了很深刻的印象。
基于这些,我决定好好地玩一下STM8芯片,并将玩的结果拿出来与大家共享。
STM8与汇编语言(2)第一次打开STM8的手册时发现,CPU中的寄存器只有6个,即A、X、Y、SP、PC 和CC。
这几个寄存器,看上去特象早年苹果机使用的微处理器6502。
在眼下都是多寄存器的RISC潮流下,不知ST推出的这种CPU架构有什么意图?这样的芯片能否与Microchip 或者Atmel的RISC结构的MCU竞争呢?在此我无意做评论,我只想了解这颗芯片。
通过仔细研究,我发现由于STM8采用了32位宽度的程序存储器结构,使得大部分的指令都能在一个周期内取出,并且采用了哈佛结构和流水线,相当多的指令也都是单周期完成的。
这样的话,虽然CPU是CISC架构的,但也基本上达到了单周期指令的效果,就像手册上说的,CPU的性能达到了20MISP◎24MHZ。
一、单项选择题(只有一个选项正确,共10道小题)1.十进制数-100的8位二进制数的补码为()。
(A) 10011100(B)11100100(C) 11001110(D) 011001002.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。
(A) 无符号十进制数136(B) 压缩型BCD码十进制数88(C) 8位二进制数-8的补码表示(D) 带符号十进制数-1203.指令MOV AX,[BX][SI]中源操作数采用的寻址方式是()。
(A) 寄存器(B) 基址变址(C) 寄存器间接(D) 寄存器相对4.下面有语法错误的指令是( )。
(A) ADD [BP+2],DA1(DA1是变量名)(B) ADD [BX+3],AL(C) ADD AL,AH(D) ADD AH,[DI]5.在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是( )(A) 12FAH(B) 1305FH(C) 015FH(D) 130FFH6.下列指令中,执行后,不改变标志位ZF的是()。
(A) AND AL,AL(B) TEST AL,0FFH(C) CMP AL,BL(D) ROR AL,CL7.DATA SEGMENTDA1 DB 32 DUP(?)DA2 DW 1456H,789AHDA3 DW DA2DATA ENDS…MOV BX, DA3上述指令执行后,BX中的内容是( )。
(A) 0031H(B) 0032H(C) 0020H(D) 0021H8.完成将累加器AX清零,下面错误的指令是()。
(A) OR AX,00H(B) AND AX,00H(C) XOR AX,AX(D) SUB AX,AX9.数据段有如下数据定义VAR DB 4 DUP(1,5 DUP(?)),1,2执行指令MOV AL,SIZE VAR后AX寄存器的值是多少()。
(A) 4(B) 1(C) 5(D) 2010.内存中(2000H)=3000H,(3000H)=A01FH,MOV BX,[2000H]MOV AX,[BX]执行上述指令AX的内容是()。
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语⾔实验报告汇编语⾔实验报告专业:班级:姓名:学号:2011年12⽉14⽇⽬录实验1 利⽤DEBUG调试汇编语⾔程序段 (3)实验2 初级程序的编写与调试实验(⼀) (11)实验3 初级程序的编写与调试实验(⼆) (20)实验4 汇编语⾔程序上机过程 (28)实验5 分⽀程序实验 (33)实验6 循环程序实验 (40)实验7 ⼦程序实验 (45)实验1 利⽤DEBUG调试汇编语⾔程序段⼀.实验⽬的1.熟悉DEBUG有关命令的使⽤⽅法;2.利⽤DEBUG掌握有关指令的功能;3.利⽤DEBUG运⾏简单的程序段。
⼆.实验内容1.进⼊和退出DEBUG程序;1)开始—运⾏,输⼊cmd,点确定进⼊命令窗⼝2)在命令窗⼝中输⼊dubug进⼊debug程序3)进⼊debug窗⼝后,输⼊q命令退出debug2.学会DEBUG中的1)D命令(显⽰内存数据D 段地址:偏移地址)例1:-D100 ;显⽰DS段, 0100开始的128个节内容说明: 指定要显⽰其内容的内存区域的起始和结束地址,或起始地址和长度。
① D SEGREG[起始地址] [L 长度];显⽰SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容.② D SEGREG[段地址:偏移地址];显⽰SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容-D ;默认段寄存器为DS,当前偏移地址(刚进⼊debug程序偏移地址为0100H)-D DS:100 ;显⽰DS段, 0100H开始的128个字节内容-D CS:200 ;显⽰CS段, 0200H开始的128个字节内容-D 200:100 ;显⽰DS段, 0200:0100H开始的128个字节内容-D 200 ;显⽰DS段, 0200H开始的128个字节内容-D 100 L 10 ;显⽰DS段, 100H开始的8H个字节内容2)E命令(修改指定内存)-E100 11 22 33 44 55 66 77 88-D 100结果:0AF1:0100 11 22 33 44 55 66 77 88例2:-E 100:E 地址数据表;从指定的地址开始⽤数据表给定的数据修改存储单元。
第一次汇编实验
一、实验目的
1.熟悉汇编语言源程序书写格式。
2.熟悉汇编语言源程序的编辑、汇编、连接、执行步骤。
3.练习DEBUG常用命令的使用。
4.练习常通用数据传送类指令的使用。
二、实验内容
1.编辑程序一,编写程序并用DEBUG命名保存,得出结果并用DEBUG单步调试。
2.编辑程序二,用DEBUG调试,查看DATA段中定义的数据在内存中的存放方式,
并单步执行查看每一语句执行后相关寄存器的内容。
3.编辑程序三,将立即数2AH送入内存数据段1000H开始的100个单元中,并单步
执行查看每一语句执行后相关寄存器的内容。
4.编辑程序四,练习压栈出栈指令,并单步执行查看每一语句执行后相关寄存器的
内容。
5.编辑程序五,练习交换指令XCHG,并单步执行查看每一语句执行后相关寄存器的
内容。
6.
三、实验步骤
<程序一>
1.编辑程序并命名为。
2.修改寄存器内容,写入文件总字符数.
3.查看程序并进行反汇编(-u)。
4.根据反汇编得到的机器码,用e写入内存。
<程序二>
1.编辑源程序并汇编成目标文件。
2.连接成可执行文件并运行输出结果。
3.检查寄存器内容(-r)。
4.反汇编(-u)。
5.单步调试(-t)。
<程序三>
1.编辑程序,将立即数2AH送入内存数据段1000H开始的100个单元中,并单步执
行。
可以看到mov di,1000mov cx,64mov al,2a执行后,寄存器DI=1000 CX=0064AX=002A,执行inc di,dec cx后,DI,CX里的值分别增加减少1。
2.反汇编(-u)。
3.执行三次mov [di],al后可以看到数据段1000H开始的3个单元中已存在2a。
<程序四>
1.编辑程序并单步执行,可以看到在执行MOV AX,9000MOV DX,38FF MOV
SP,E200后,AX=9000,DX=38FF,SP=E200;
2.PUSH操作后,可以发现SP=SP-2;POP操作后,发现SP=SP+2;根据堆栈的后进先
出的性质,在PUSH DX;PUSH AX后执行POP DX;POP AX,则AX与DX 里的值发生变化,我们可以从最后两个-t操作中发现AX与DX 的变化情况。
<程序五>
1.编辑程序并单步执行,可以看到在执行MOV AX,1000MOV BX,2EFF后,AX=1000,
BX=2EFF;在执行XCHG 后,BX=1000,AX=2EFF。
四、总结与心得
通过五个程序的汇编与执行,已经熟悉了汇编语言源程序书写格式,并熟悉了汇编语言源程序的编辑、汇编、连接、执行的过程,也就是编辑源文件(.asm),汇编(masm)生成目标文件(.obj),连接(link)生成可执行文件(.exe)。
通过运用DEBUG练习,已对程序的执行过程有稍许了解,对小型程序直接在DEBUG里汇编,执行,命名,保存也有了初步了解。
通过对程序三、四、五的编辑与单步调试,对命令MOV,XCHG,PUSH,POP有了初步的掌握能力,对单步执行命令t有了更深刻的理解,对各个寄存器的功能的认识进一步加强。
实验中,通过对程序的编辑,对字符串在存储单元的存储情况有了更深刻的认识,如f dw 'ab','c','$',,’ab’是看成一个整体的,’a’就是高字节,高字节放在连续两个字节单元的高地址单元,所以由低到高是42H、41H、43H,所以输出’bac’。
同时也了解到db是定义字节型的数据,dw定义字类型数据,dd定义双字类型的数据,lea和offset是取偏移地址,seg 是取段地址。