实验一指令与寻址方式认知实验
微型计算机原理实验1-数据传送
实验一数据传送一、实验目的1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.利用Turbo Debugger调试工具来调试汇编语言程序。
二、实验预习要求1.复习8086指令系统中的数据传送类指令和8086的寻址方式。
2.预习Turbo Debugger的使用方法:a如何启动Turbo Debugger;b如何在各窗口之间切换;c如何查看或修改寄存器、状态标志和存储单元的内容;d如何输入程序段;e如何单步运行程序段和用设置断点的方法运行程序段。
3.按照题目要求预先编写好实验中的程序段。
三、实验任务1.通过下述程序段的输入和执行来熟悉Turbo Debugger的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:MOV BL,08HMOV CL,BLMOV AX,03FFHMOV BX,AXMOV DS:[0020H],BX2.用以下程序段将一组数据压入(PUSH堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX1、POP DXPOP CXPOP BXPOP AX2、POP AXPOP BXPOP CXPOP DX3、POP CXPOP DXPOP AXPOP BX3.指出下列指令的错误并加以改正,上机验证之。
(1 MOV [BX],[SI]原因:两个操作数不能同时为存储器操作数修改:改为MOV BX,[SI](2 MOV AH,BX原因:MOV操作指令中两个操作数字长必须相同修改:改为MOV AX,BX(3 MOV AX,[SI][DI]原因:源操作数中同时出现两个变址寄存器修改:改为MOV AX,[BX][DI](4 MOV BYTE PTR[BX],2000H原因:MOV操作指令中两个操作数字长必须相同修改:改为MOV WORD PTR[BX],2000H(5 MOV CS,AX原因:一般情况下,代码寄存器CS不能作为目标操作数修改:改为MOV AX,CS(6 MOV DS,2000H原因:不能用立即数直接给段寄存器赋值修改:改为MOV DX,2000HMOV DS,DX4. 设置各寄存器及存储单元的内容如下:(BX=0010H,(SI=0001H(10010H=12H,(10011H=34H,(10012H=56H,(10013H=78H(10120H=0ABH,(10121H=0CDH,(10122H=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。
实验二、 寻址方式与运算指令实验
实验二、寻址方式与运算指令实验
一、实验目的
1、掌握与数据有关的寻址方式,进一步加深对存储器组织的认识;
2、掌握算术与逻辑运算指令,掌握运算指令对主要标志位的影响;
3、掌握在Turbo Debugger的CPU视图中查看内存数据的不同方法。
二、实验要求
1、运行Turbo Debugger,学习在Watches窗口中添加对寄存器和指定内存单元的监视;
2、汇编指令,将AX,BX和CL,DL的内容分别加入数据段偏移地址120H,122H
字单元和130H,131H字节单元。
将指令执行结果和各标志位的值与手工计算结果
作比较(不得用零值进行运算);
3、验证8条逻辑和移位指令;
4、编写指令序列,并在TD中实现:数据段210H和220H双字存储单元无符号数作加
法运算,结果存入230H双字单元;
5、编写指令序列,并在TD中实现:设16位带符号数变量X,Y,Z,W的存储地址
是数据段内的300H,302H,304H和310H,初值为20,4000,333,0。
请在TD
中实现运算(X - Y)/Z,商存入W;
三、实验内容
四、实验小结(可选)。
实验一 用DEBUG熟悉指令功能和寻址方式
实验一用DEBUG熟悉指令功能和寻址方式一、实验性质:验证型二、实验目的:掌握debug的使用,能建立和运行汇编语言程序掌握寻址方式DEBUG的命令DEBUG的命令都用单个字母表示,其后可以跟一个或多个参数,参数之间用空格或逗号分隔。
DEBUG的命令参数大多数是地址或地址范围,其地址书写格式为:[段地址:]偏移地址其中的段地址可以用段寄存器名表示,也可以用一个十六进制数表示。
如:ES:10043A5:200地址范围的书写格式为:Ⅰ.[段地址:]起始偏移地址终止偏移地址Ⅱ.[段地址:]起始领衔地址L长度如:CS:10010F和CS:100L10所指的地址范围是一致的。
当输入的命令不正确时,DEBUG将在该行底下指出错误所在。
注意:在DEBUG下,输入的数据和显示的数据都是十六进制数,不用在数据后加“H”A汇编与反汇编命令1.汇编命令A格式:A[地址]功能:从键盘输入汇编程序,并逐条地把汇编指令翻译成机器代码指令存入对应内存单元。
说明:如果不指定汇编地址,则以CS:IP为地址。
例:0BB6:0000-0005写入三条指令。
2.反汇编命令U格式:U[地址]/[地址范围]功能:将指定地址范围内的机器代码翻译成汇编源程序指令显示出来,并同时显示地址及代码。
注意:反汇编时一定确认指令的起始地址,否则得不到正确的结果。
例:反汇编看CS:0005-0011单元的指令。
B显示与修改内存单元内容的命令1.显示内存单元内容命令D格式1:D[地址]格式2:D地址范围只写一个D,表示显示从当前地址单元开始的128个单元中的字节数据说明:D命令在屏幕上显示的内容分为三部分,左边是每一行存储单元的起始地址,中间是各字节单元的内容,右边是各单元内容对应的ASCII码字符(不可显示的字符用"."代替)。
指定要显示的单元的逻辑地址,即写出完整的段地址和偏移地址。
指定要显示数据区起始单元的地址和最后一个单元的地址。
微机原理实验 8086CPU系统寻址方式和汇编语言程序设计
微机原理实验报告实验一 8086CPU系统寻址方式和汇编语言程序设计一、实验目的1. 掌握 8086CPU 系统的逻辑地址和寻址方式;2. 掌握 8086CPU 系统中机器数的表示方式;3. 掌握指令的机器码表示方法;4. 掌握 TPC-USB 集成开发环境程序设计和调试方法;5. 掌握汇编语言实现具体算法的方式,区分汇编语言与高级语言的编程风格二、实验内容1. 写出在 TPC-USB 环境下汇编语言程序设计步骤;①点击工具栏中“新建”按钮,在编辑框输入程序代码,保存为一个以“.asm”结尾的汇编源文件。
②点击工具栏“编译+链接”按钮,若程序有错则返回修改代码,若没有错误,则编译链接成功,形成两个以“.obj”结尾的目标文件和以“.exe”结尾的可执行文件。
③点击工具栏“调试”按钮,在弹出的框中选择“Continue and don’t ask again”,执行“连续运行”或“单步运行”或“跳过”,在执行此步骤前可设置断点。
通过寄存器窗口、反汇编窗口、内存窗口查看相应内容。
2. 汇编语言程序设计和调试实验1)源程序:CODE SEGMENTASSUME CS:CODESTART:MOV AX,8086HMOV BX,6808HADD AX,BXMOV CX,AXPUSH CXPOP DXL1:JMP L1CODE ENDSEND START2)反汇编结果:3)单步执行每条指令后对应寄存器的变化值:START:MOV AX,8086H ; AX:0×00000FE6 ——>0×00008086IP: 0×00000000 ——>0×00000003MOV BX,6808H ;BX: 0×000008FEA——>0×00006808IP: 0×00000003 ——>0×00000006ADD AX,BX ; AX:0×00008086 ——>0×0000E88EIP: 0×00000006 ——>0×00000008FLAGS: 0×00007202——>0×00007286MOV CX,AX ; C X: 0×000C0000 ——>0×000CE88EIP: 0×00000008 ——>0×00000000PUSH CX ; SP:0×0000FFFE ——>0×0000FFFCIP: 0×00000000 ——>0×0000000BPOP DX ; SP:0×0000FFFC ——>0×0000FFFED X: 0×00002002 ——>0×0000E88EIP: 0×0000000B ——>0×0000000C3. 编程设计实验(一)内存中现有 X 和 Y 两个存储单元,分别存有 42 和-43,利用汇编语言编程计算这两个数之和,并将结果放入 SUM 单元;1) 程序流程图:开始X=42Y=-43将数据段DATA的首地址送到DSAL=XAL=AL+YSUM=AL结束2)源程序:DATA SEGMENTX DB42Y DB -43SUM DB ? ;?用来占位DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;DATA的数据送到DSMOV AL,XADD AL,YMOV SUM,ALLOOP:JMP LOOPCODE ENDSEND START3)内存结果(DS)4)反汇编结果:4. 编程设计实验(二)数据段中的一个存储单元 X 中存放的数据为 10H,编程实现将该存储单元中的数据循环左移四位后存放到数据段的另一个存储单元 Y 中。
8086实验
实验一、寻址方式与基本指令实验一、实验目的1.熟悉8086寻址方式及基本指令功能,进一步理解和巩固课学习内容。
2.掌握汇编语言程序设计上机过程和汇编语言源程序结构。
3.熟悉Microsoft的DEBUG调试工具的使用方法。
二、实验预习要求1.认真阅读教科书第三章,了解并熟悉汇编语言程序的上机步骤及DEBUG调试工具的使用方法。
2.复习8086操作数寻址方式及基本指令功能(数据传送、算术运算和逻辑运算等)。
3.了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题外),以便在实验时进行验证。
三、实验内容1.读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。
1)程序装入后,代码段寄存器CS的内容为H,代码段第一条可执行指令“MOV AX,DATA”对应的机器代码为H,它是一个字节指令,注意观察执行该指令时IP的变化情况,该指令源操作数DATA的寻址方式是,其值为。
2)执行完“MOV DS,DATA”指令后,数据段寄存器DS的内容为H,源程序在数据段中定义的数据库82H、68H和88H被装入的存储单元的物理地址分别为H,H和H。
3)程序中第一条“ADD AL,[BX]”指令对应的机器代码H,它是一个字节指令,注意观察执行该指令时IP的变化情况,该指令中源操作数的寻址方式为,该操作数所在存储单元的逻辑地址(DS):(BX)为,物理地址为H;执行完该指令后(AL)= H,CF= ,OF= ,ZF= ,SF= ,AF= ,PF= ;若两操作数为无符号数,计算结果是否正确?若两操作数为带符号数,计算结果是否正确?若计算结果正确,结果是正数还是负数?4)执行完第二条“ADD AL,[BX]”指令后,(AL)= H,CF= ,OF= ,ZF= ,SF= ,AF= ,PF= ;若两操作数为无符号数,计算结果是否正确?若两操作数为带符号数,计算结果是否正确?5)指令“MOV SUM,AL”中,目的操作数的寻址方式为,该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为H。
单片机实验-寻址方式和指令系统实验指导书
实验6. 寻址方式和指令系统一.实验目的1.了解MSP430G2xxx汇编格式指令和常用寻址方式2.了解C语言函数调用过程3.通过反汇编了解C编译器实现初始化变量的方法4.掌握计算机中数的表示和编码二. 实验任务1.汇编格式指令和寻址方式的学习(可在simulator下完成)L6_1.c源程序见下,建立C项目,进入DEBUG状态,点击view/disassembly,在反汇编窗口得到L6_1.c汇编格式指令的程序代码,如图6-1和图6-2,阅读该程序的汇编格式代码,思考:1) 程序用到了哪些指令?2) 程序用到了哪几种寻址方式?3)用单步执行命令F11,跟踪函数delay的调用和返回,用view/register和view/ memory查看堆栈指针SP和堆栈内的内容,记录堆栈指针SP和堆栈内容的变化;4) 修改l6_1.C,将变量i定义为全局变量,通过反汇编的代码,比较与定义为局部变量的不同;5) 修改L6_1.C, 将变量i的类型从 unsigned int 类型,改为unsigned long 类型,反汇编看看函数delay的代码发生了什么变化?程序执行的结果有什么不同?为什么?(需在实验板上运行)。
L66__1.c程序清单(提供电子版)图6-1 L6-1.c程序中main函数的反汇编代码图6-2 L6_1.c程序中delay函数的反汇编代码2. 了解C语言程序的执行过程(可在simulator 方式下完成)指令计数寄存器PC决定CPU取指令的地址,所以PC寄存器的内容决定了程序的流程。
已知MSP430G2xxx单片机复位后, PC寄存器从存储器0xFFFE~0xFFFFH单元获取一个字内容作为执行第一条指令的地址。
以L4_1.C的项目为例,请问实验中查看到该地址的值是多少?程序执行的第一条指令是什么指令?main函数的入口是单片机上电就被执行的第一条语句吗?说明:如图6-3,可在项目设置option/Debugger/set up中,去除对run to前的选项,再将程序下载到单片机中,观察当前上电复位PC的值与0xFFFE~0xFFFF存储单元内容的关系,对比不去除run to前的选项的不同。
汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理
一、实验目的1.定位内存单元的寻址方式汇总2.寻址方式的综合应用3.转移指令的分类和原理4.熟悉在显存中编程的方法二、实验内容及要求(一)寻址方式的汇总及综合应用1. 定位内存单元的寻址方式有几种,并举例说明。
2. 寻址方式在结构化数据访问中的应用。
Power idea公司从1975年成立一直到1995年的基本情况如下。
年份收入(千美元) 雇员人均收入(千美元) 1975 16 3 ?1976 22 7 ?1977 382 9 ?1978 1356 13 ?1979 2390 28 ?1980 8000 38 ?M1995 5937000 17800 ?下面的程序中,已经定义好了这些数据:assume cs:codesgdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ??')table ends编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中。
寻址方式认知实验
黄淮学院电子科学与工程系单片机原理及应用课程基础性实验报告实验名称寻址方式认知实验实验时间2013 年月日学生姓名实验地点同组人员专业班级电子1101B1、实验目的1、熟悉51单片机的各种寻址方式,进一步理解和巩固课堂学习的内容。
2、初步掌握单片机汇编语言的设计和调试的基本方法。
3、熟悉Keil c51模拟仿真系统的调试工具的使用方法。
2、实验主要仪器设备和材料:计算机和单片机应用软件3、实验内容:(1)、编写如下参考程序,编译、模拟调试,并回答下列问题:MOV A, #30H ; 将立即数30H 送到累加器AMOV R0, #40HMOV @R0, A ;该指令语句中,目的操作数的寻址方式为;MOV R1, 40H ;运行到此,R1 的值为;END(2)、请在1题基础上,增加适当的语句,使地址42H的内部数据存储器单元,赋值为30。
(3)、编译、模拟调试运行,并回答下列问题:MOV A, #10MOV DPTR , #1000H ;指定外部数据存储器地址为1000HMOVX @DPTR , A ;将A的内容送DPTR间址的单元INC A ;累加器A 数值加1INC DPTR ;DPTR 地址值加1=1001HMOVX @DPTR , AINC AINC DPTRMOVX @DPTR , AEND指令序列完成的功能:.4、实验步骤:●新建一个工程项目文件。
●新建一个源文件,扩展名为.ASM。
●把新建一个源文件添加到工程项目中。
●编译项目并生成可编程PROM的以.HEX为扩展名的文件。
●编译完毕之后,选择【Debug】/【Start/Stop Debug Session】选项,即就进入仿真环境。
●单击【Debug】/【Go】或单击按钮,即可全速运行程序。
●在菜单【View】/【Memory Window】窗口中,选择查看程序运行的结果。
5、实验数据记录:(1)、编写如下参考程序,编译、模拟调试结果如下:单元地址 A R0 R1 40H单元内容3、编译、模拟调试运行结果如下:单元地址1000H 1001H 1002H单元内容6、实验数据的分析:。
8086指令操作数的寻址方式实验总结
8086指令操作数的寻址方式实验总结在计算机体系结构的学习中,8086指令操作数的寻址方式是一个非常重要的概念。
通过对这一概念的深入了解和实验操作,我们可以更好地理解计算机程序的执行过程,深化对计算机底层原理的理解。
在本文中,我将结合理论知识和实验结果,对8086指令操作数的寻址方式进行全面评估和总结。
1. 立即寻址立即寻址是一种直接将操作数的值嵌入指令中的寻址方式。
在8086指令集中,我们可以使用MOV指令将一个立即数传送到目的操作数中。
MOV AX, 1234h指令将立即数1234h传送到寄存器AX中。
通过实验操作,我发现立即寻址方式适用于需要直接传送常数值的情况,能够提高程序执行的效率。
2. 寄存器寻址寄存器寻址是一种通过寄存器来寻址操作数的方式。
8086微处理器具有通用寄存器AX、BX、CX、DX等,可以直接操作这些寄存器中的数据。
MOV AX, BX指令将寄存器BX中的数据传送到寄存器AX中。
在实验过程中,我发现寄存器寻址方式是一种高效的操作数寻址方式,能够提高程序的执行速度。
3. 直接寻址直接寻址是一种通过内存位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用MOV指令将内存中的数据传送到寄存器中,或将寄存器中的数据传送到内存中。
MOV AX, [1234h]指令将存储在内存位置区域1234h处的数据传送到寄存器AX中。
实验结果表明,直接寻址方式可以灵活地对内存中的数据进行操作,适用于大规模数据的传送和处理。
4. 寄存器间接寻址寄存器间接寻址是一种通过寄存器中存储的位置区域来寻址操作数的方式。
在8086指令集中,我们可以使用指令将寄存器中存储的内存位置区域作为操作数进行操作。
MOV BX, [SI]指令将寄存器SI中存储的内存位置区域处的数据传送到寄存器BX中。
在实验中,我发现寄存器间接寻址方式适用于需要对内存中多个数据进行操作的情况,能够提高程序的效率和灵活性。
5. 立即偏移寻址立即偏移寻址是一种通过基址寄存器和偏移量来寻址操作数的方式。
微机原理寻址方式实验总结
微机原理寻址方式实验总结嘿,朋友们!咱来聊聊微机原理的寻址方式实验。
这寻址方式啊,就像是在一个大宝藏库里找宝贝。
你得知道怎么找才能最快最准地拿到你想要的那个宝贝。
直接寻址,这就好比你直接知道宝贝放在哪个柜子的哪个格子里,你一伸手就能拿到。
比如说,地址就在指令里明明白白地写着,多干脆!
寄存器寻址呢,就好像宝贝在你身边的几个小箱子里,你不用到处跑,打开身边的小箱子就行。
寄存器里存着数据或者地址,直接用,方便得很!
间接寻址就有点绕啦。
这就像是有个中间人知道宝贝在哪,你得通过他才能找到。
比如通过寄存器间接找到地址,再去拿宝贝。
基址加变址寻址,这就像是有个基础的大柜子,然后再根据一些变化的因素去找到具体的小格子。
是不是有点复杂?但搞明白了,那可就厉害了!
相对寻址呢,就好比你知道宝贝在离你现在位置不远处,按照相对的距离就能找到。
在做这个实验的时候,我可是费了不少心思。
一开始,那真叫一个晕头转向,感觉这些寻址方式就像一群调皮的小精灵,到处乱跑,我怎么都抓不住。
可咱不能认输啊!我就一个一个慢慢琢磨,反复试验。
做着做着,突然就有了那种“柳暗花明又一村”的感觉。
你说,如果连这寻址方式都搞不定,以后怎么去驾驭更复杂的微机世界?就像盖房子,基础不打牢,能盖出结实的大楼吗?
所以啊,朋友们,好好掌握这些寻址方式,这可是通往微机原理深处的关键钥匙。
只有把这钥匙握在手里,咱们才能在微机的世界里畅行无阻,发现更多的精彩!。
线性寻址方式实验报告
一、实验目的1. 理解线性寻址方式的基本概念和原理。
2. 掌握线性寻址方式在程序设计中的应用。
3. 培养独立思考、分析和解决问题的能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Keil uVision53. 实验设备:PC一台三、实验原理线性寻址方式是计算机存储器寻址方式的一种,它通过基址寄存器和偏移量寄存器来计算存储单元的地址。
基址寄存器通常存放段寄存器的值,偏移量寄存器存放偏移地址。
线性寻址方式的计算公式为:物理地址 = 段寄存器 16 + 偏移地址。
四、实验步骤1. 创建一个新的项目,并添加一个C语言源文件。
2. 在源文件中定义一个数据段,包括一个字节数组、一个字数组和一个双字数组。
3. 定义一个代码段,编写线性寻址方式的程序。
4. 编写程序,使用基址寄存器和偏移量寄存器访问数据段中的数组元素。
5. 编译并运行程序,观察程序执行结果。
具体代码如下:```c#include <stdio.h>// 定义数据段#pragma segment dataunsigned char bytes[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A};unsigned int words[5] = {0x1234, 0x5678, 0x9ABC, 0xDEAD, 0xBEAF};unsigned long doubles[5] = {0x12345678, 0x9ABCDEF0, 0x01234567,0x89ABCDEF, 0xFEDCBA98};// 定义代码段#pragma segment codevoid main(){unsigned int i;unsigned char p_byte;unsigned int p_word;unsigned long p_double;// 设置基址寄存器DS = 0x1000;// 使用基址寄存器和偏移量寄存器访问数组元素for (i = 0; i < 10; i++){p_byte = (unsigned char )0x1000; // 设置偏移量寄存器printf("bytes[%d] = 0x%02X\n", i, p_byte[i]);}for (i = 0; i < 5; i++){p_word = (unsigned int )0x1000; // 设置偏移量寄存器printf("words[%d] = 0x%04X\n", i, p_word[i]);}for (i = 0; i < 5; i++){p_double = (unsigned long )0x1000; // 设置偏移量寄存器printf("doubles[%d] = 0x%08LX\n", i, p_double[i]);}while (1);}```五、实验结果与分析1. 运行程序,观察程序输出结果。
实验1寻址方式与基本指令实验
寻址方式与基本指令实验一、实验目的1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。
2、掌握汇编语言程序设计上机过程和汇编语言源程序结构,为后续汇编语言程序设计打好基础。
3、熟悉Microsoft的DEBUG或Borland的Turbo Debugger调试工具的使用方法二、实验内容1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。
(1)程序装入后,代码段寄存器CS的内容为0080 H,代码段第一条可执行指令MOV AX, DA TA对应的机器代码为B81515 H,它是一个3 字节指令,注意观察执行该指令时IP值的变化情况,该指令源操作数DA TA的寻址方式是立即数寻址方式,其值为1515 。
(2)执行完MOV DS, DATA指令后,数据段寄存器DS的内容为1505 H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为0000 H、0001 H和0002 H。
(3)程序中第一条ADD AL, [BX] 指令对应的机器代码为0207 H,它是一个2 字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为寄存器间接寻址方式,该操作数所在存储单元的逻辑地址(DS): (BX)为0000:0001 ,其物理地址为00001 H;执行完该指令后(AL)= 15EA H,CF= 0 ,OF= 0 ,ZF= 0 ,SF= 1 ,AF= 0 ,PF= 0 ;若两操作数为无符号数,计算结果是否正确?正确。
若两操作数为带符号数,计算结果是否正确?正确。
若计算结果正确,结果是正数还是负数?正数。
汇编实验报告6
汇编实验报告6汇编实验报告6引言:汇编语言是一种底层编程语言,它直接操作计算机硬件,提供了对计算机底层资源的更精确控制。
在本次实验中,我们将继续学习和实践汇编语言的相关知识,探索其在计算机系统中的作用和应用。
一、实验目的本次实验旨在加深我们对汇编语言的理解,并通过实践进一步掌握汇编语言的基本概念、语法和应用。
具体目标如下:1. 掌握汇编语言的基本指令和寻址方式;2. 理解和实现简单的汇编程序;3. 学会使用调试工具调试汇编程序。
二、实验环境本次实验使用的环境为Windows操作系统和MASM汇编器。
在实验开始前,我们需要确保已经正确安装了MASM汇编器,并配置好了相关环境变量。
三、实验过程1. 编写程序本次实验我们将编写一个简单的汇编程序,实现两个数相加并输出结果的功能。
首先,我们需要使用文本编辑器打开一个新的文件,并保存为.asm格式。
接下来,我们将按照汇编语言的语法规则,逐步编写程序。
2. 汇编程序的结构一个标准的汇编程序由三个部分组成:数据段、代码段和堆栈段。
在数据段中,我们定义了需要使用的变量和常量;在代码段中,我们编写了实际的汇编指令;而堆栈段则用于存储程序执行过程中的临时数据。
3. 汇编指令的使用在本次实验中,我们将使用一些常见的汇编指令,如MOV、ADD、SUB等。
这些指令用于操作寄存器、内存和立即数,实现数据的传输、运算和比较等功能。
4. 调试程序编写完汇编程序后,我们需要使用调试工具对程序进行调试,以确保程序的正确性。
调试工具可以帮助我们逐条执行程序,并查看寄存器和内存的变化,从而找出程序中的错误。
四、实验结果与分析经过编写和调试,我们成功地实现了两个数相加并输出结果的功能。
我们可以通过调试工具查看程序执行过程中寄存器和内存的变化,以验证程序的正确性。
同时,我们还可以对程序进行性能分析,了解其在不同输入情况下的执行效率。
五、实验总结通过本次实验,我们深入学习了汇编语言的基本概念和应用。
实验内存操作数及寻址方式
实验内存操作数及寻址方式实验二:内存操作数及寻址方式一、实验目的1.进一步掌握Debug命令,学会使用Debug调试程序。
2.掌握数据在内存中的存放方式。
3.掌握与数据相关的7种寻址方式。
4.掌握简单指令的执行过程。
5.学会在DOS环境下汇编源程序的编辑、编译、链接和执行。
二、实验内容和步骤1.寄存器内容互换。
(1)利用DEBUG命令,设置SP=2000H,AX=3000H,BX=5000H。
(2)利用堆栈作为中转,将AX和BX的内容互换。
写出实现这一功能的指令序列。
(3)利用DEBUG命令对上述指令序列进行调试,并记录每个步骤的执行结果。
2.分析执行结果。
(1)利用DEBUG命令,设置BX=0300H,SI=0002H。
利用DEBUG命令,将存储器偏移地址为300H~304H的连续单元设置为0AH、0BH、0CH、0DH、0EH。
MOV AX,BX MOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT(2)(3)在DEBUG环境中,输入以下指令序列:MOV AX,BXMOV AX,0304MOV AX,[0302]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT(4)在DEBUG环境下,调试上述指令序列,记录中间结果。
3.操作数存放方式。
(1)在DOS环境下,输入以下程序:DA TA SEGMENTV AR1 DW 1020H,3040HV AR2 DB 3 DUP (0,1,2 DUP (4),5)V AR3 DB ’good!’V AR4 DD V AR1DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,V AR1LEA BX,V AR3MOV DL,[BX]MOV AH,02HINT 21HMOV BX,WORD PTR V AR4MOV WORD PTR [BX],3050HMOV AH,4CHINT 21HCODE ENDSEND START(2)编译并链接上述程序。
报告一、二实验一 8086指令使用
实验一8086指令使用二、8086常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:-A 0100↙****:0100 MOV AX,1234↙****:0103 MOV BX,5678↙****:0106 XCHG AX,BX↙****:0108 MOV AH,35↙****:010A MOV AL,48↙****:010D MOV DX,75AB↙****:010F XCHG AX,DX↙****:0111 ↙-注:****为段寄存器CS的值,是由计算机生成的;↙为回车操作。
2)用U命令检查键入的程序并记录,特别注意左边的机器码。
-U 0100↙3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
-T=0100↙-T↙-T↙┇2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。
3)用T命令逐条运行这些指令,检查并记录有关寄存器及标志位的情况。
思考:这次运行还是键入T,行不行?怎么办?用R命令检查一下IP的内容。
注意T命令与IP 的关系。
3、带进位加减法:1)用A命令在内存200H处键入下列内容,并用U命令检查:MOV AH,12MOV AL,84MOV CH,56MOV CL,78ADD AL,CLADC AH,CHMOV DH,A7MOV DL,58SUB DL,7FSBB DH,342)用T命令逐条运行这些指令,检查并记录寄存器及CF内容。
3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。
4、BCD码加减法1)内容:MOV AL,58ADD AL,25DAA2)要求:用A命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。
寻址方式实验
实验3 寻址方式实验一、实验目的1、熟练掌握DEBUG的常用命令。
2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。
3、掌握简单指令的执行过程。
单步运行程序,通过观察窗口观察指令对寄存器中数据的影响二.实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
2、本实验只要求在DEBUG调试程序状态下进行,包括调试程序和执行程序。
三、实验内容1、立即寻址:-t ;查看当前各寄存器数值,注意下一步地址指向AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0102 NV UP EI NG NZ NA PO NC1385:0102 0000 ADD [BX+SI],AL DS:0000=CD-a;1385:0100 mov ax,0110 ;源操作数为立即数寻址1385:0103-t=0100 ;单步执行,使下一步操作IP指针指向命令所在地址AX=0110 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0103 NV UP EI NG NZ NA PO NC1385:0103 0000 ADD [BX+SI],AL DS:0000=CD2、寄存器寻址-a1385:0103 mov ax,0100 ;目的操作数采用寄存器寻址,源操作数为立即数寻址1385:0106 mov bx,ax ;两个操作数均为寄存器寻址1385:0108-t ;观察ax内容发生改变AX=0100 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0106 NV UP EI NG NZ NA PO NC1385:0106 89C3 MOV BX,AX-t ;观察bx内容发生改变AX=0100 BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0108 NV UP EI NG NZ NA PO NC1385:0108 0000 ADD [BX+SI],AL DS:0100=B83、直接寻址-a1385:0108 mov ax,[2000]1385:010B-t ; 单步执行注意下一步地址指向,查看当前各寄存器数值,但是此处ax 没有变化AX=0000 BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=010B NV UP EI NG NZ NA PO NC1385:010B 0000 ADD [BX+SI],AL DS:0100=B8 -a1385:010B mov ax,[000a] ;重新输入直接寻址命令1385:010E-t=010B ;单步执行,使下一步操作IP指针指向想要运行命令所在地址AX=034F BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=010E NV UP EI NG NZ NA PO NC1385:010E 0000 ADD [BX+SI],AL DS:0100=B8;直接寻址成功,观察ax内容发生改变4、寄存器间接寻址-a1385:010E mov si,0100 ;设置si内容为01001385:0111 mov ax,[si] ;输入寄存器间接寻址命令1385:0113-t ; 单步执行,观察si内容已经改变AX=034F BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0100 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0111 NV UP EI NG NZ NA PO NC1385:0111 8B04 MOV AX,[SI] DS:0100=10B8 -t ; 单步执行,观察ax内容发生改变AX=10B8 BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0100 DI=0000DS=1385 ES=1385 SS=1385 CS=1385 IP=0113 NV UP EI NG NZ NA PO NC1385:0113 0000 ADD [BX+SI],AL DS:0200=005、寄存器相对寻址-a1385:0113 mov di,0110 ;设置di内容为01101385:0116 mov ax,[di+06] ;输入寄存器相对寻址命令1385:0119-t ; 单步执行,观察di内容已经改变AX=10B8 BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 IP=0116 NV UP EI NG NZ NA PO NC1385:0116 8B4506 MOV AX,[DI+06] DS:0116=458B -t ; 单步执行,观察ax内容发生改变AX=458B BX=0100 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 IP=0119 NV UP EI NG NZ NA PO NC1385:0119 0000 ADD [BX+SI],AL DS:0200=006、基址变址寻址-a1385:011B mov cx,0001 ;设置cx内容为00011385:011E mov ax,[cx+si] ;输入基址变址寻址命令,发生错误^ Error ;应该是地址超过ffffh导致1385:011E mov bp,0001 ;设置bp内容为00011385:0121 mov ax,[bp+di] ;重新输入基址变址寻址命令1385:0123-t=011B ; 单步执行,AX=0000 BX=0100 CX=0001 DX=0000 SP=FFEE BP=0000 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 IP=011E NV UP EI NG NZ NA PO NC1385:011E BD0100 MOV BP,0001-t ; 单步执行,观察di内容已经改变AX=0000 BX=0100 CX=0001 DX=0000 SP=FFEE BP=0001 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 I P=0121 NV UP EI NG NZ NA PO NC1385:0121 8B03 MOV AX,[BP+DI] SS:0111=048B -t ; 单步执行,基址变址寻址命令运行,ax内容改变AX=048B BX=0100 CX=0001 DX=0000 SP=FFEE BP=0001 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 IP=0123 NV UP EI NG NZ NA PO NC1385:0123 0000 ADD [BX+SI],AL DS:0200=007、相对基址变址寻址-a1385:0123 mov ax,[bp+di+01] ;输入相对基址变址寻址命令1385:0126-t ; 单步执行,相对基址变址寻址命令运行,ax内容改变AX=BF04 BX=0100 CX=0001 DX=0000 SP=FFEE BP=0001 SI=0100 DI=0110DS=1385 ES=1385 SS=1385 CS=1385 IP=0126 NV UP EI NG NZ NA PO NC1385:0126 0000 ADD [BX+SI],AL DS:0200=008、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
汇编实验报告一 熟悉7种寻址方式
电子信息工程学系实验报告——适用于计算机课程课程名称:IBM-PC汇编语言程序设计实验项目名称:熟悉7种寻址方式实验时间:班级:姓名:学号:一、实验目的:掌握debug命令,熟悉7种寻址方式。
二、实验环境:ASM轻松汇编三、实验内容:1、上机输入以下程序:data segmentx db 01,02y db ?,?z db ?,?w dw 1234hdata endscode segmentmain proc farassume cs:code,ds:datastart:push dsxor ax,axpush axmov ax,datamov ds,axmov dx,1234h -----无有效地址mov cl,ds:[0000h] -----0000hmov si,0000hmov di,0002hmov al,[si] ----0000hmov [di],al ----无有效地址 add si,1add di,1mov al,[si]mov [di],almov si,0000hmov di,0000hmov al,x[si]mov y[di],al 成绩:指导教师(签名):add si,1add di,1mov al,x[si] -----0001hmov y[di],almov si,0000hmov di,0000hmov bx,0000hmov bp,0004hmov al,[bx][si] ----0000hmov ds:[bp][di],aladd si,1add di,1mov al,[bx][si]mov ds:[bp][di],alretmain endpcode endsend start2、写出上面汇编程序中字体为红色的指令的源操作数的寻址方式以及源操作数的有效地址。
指令寻址方式有效地址mov dx,1234h立即寻址方式无有效地址mov cl,ds:[0000h]直接寻址方式0000h mov al,[si]寄存器间接寻址方式0000hmov [di],al寄存器寻址方式无有效地址mov al,x[si] 寄存器相对寻址方式0001hmov al,[bx][si]基址变址寻址方式0000h画图说明数据段中变量所分配的存储空间及初始化的数据值。
汇编内存操作数及寻址方法实验报告
汇编内存操作数及寻址方法实验报告《微机原理与接口技术》课程实验报告一、实验目的1(熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
2(掌握数据在内存中的存放方式和内存操作数的几种寻址方式。
3(掌握简单指令的执行过程。
二、实验环境1. 硬件环境:微型计算机一台。
2. 软件环境:装有MASM 5.0,DEBUG,LINK,EDIT等应用程序。
三、实验重点及难点区别几种寻址方式的不同及其在内存中存放数据的方式。
四、实验内容执行指令以下指令后,并查看结果1、立即数寻址:MOV AX,1234HMOV DH,12H2、直接寻址MOV AX,[1234H]MOV [1234H],BX3、寄存器间接寻址MOV CX ,[BX]MOV [BX],AXMOV DL ,[BP]五、实验分析和实验体会1、实验分析:(1)立即数寻址:I、 MOV AX,1234HAX=1234HII 、 MOV DH,12HDH=12H(2)、直接寻址I、MOV AX,[1234H]AX=5A5DII、MOV [1234H],BX[1234H]=4567 3、寄存器间接寻址I、MOV CX ,[BX]CX=000BII、MOV [BX],AXIII、MOV DL ,[BP]DL=20H2、实验体会通过本次实验使我了解了据在内存中的存放方式和内存操作数的几种寻址方式。
特别是对[BP]进行处理时注意到了数据段与堆栈段的区别,并对各种指令数据的传输有了进一步的了解,同时掌握简单指令的执行过程。
ARM原理与应用寻址方式实验报告
《ARM 原理与应用》实验报告、实验目的及要求?编一段程序在ADS1.2 IDS 环境下单步执行,观察相关内容(寄存器、内存单元、状态等),验证ARM 的各种寻址方式 ?调试汇编程序二、 实验设备(环境)及要求 硬件:PC 机;软件:VMware ,ADS1.2 IDE 三、 实验内容与步骤1:验证ARM 的寄存器和立即数寻址方式A:源代码O 0 0 0 0程序的功能是:首先将立即数 15,移到寄存器R0中,接着再把立即数8移到 寄存器R1中,然后使用寄存器寻址的方式将 RO 和R1中的数相减B :程序执行过程:实验序号:02实验项目名称:寻址方式CxaOOGOCOOAREA fCODE r READCN1YENTRYCODE32 STARTMOT R0r *15 MOV Rl P +8 SUB RQ P RO.R1 B START ENDCXQ00000D3 CxQOQOOQOO 0x800000001)使用立即数寻址的方式将15和8分别赋给寄存器R0和R1MJflTTDMI -甌tch□LLJ|lfi3|LLJ|im>|L ・]Liag| | | 凹 LEJ| m| 匾 Lil | 兰 |判 | ]孚 2)使用寄存器寻址的方法用 R0减去R1再将所得结果赋给R0ABH7TDMI - WatchTab 1 Tab 2 Tab 3 T : * 卜1 A5EA Hex_ouc r CODE r REA20MLY2 Ein^Y3 CODE324 STARI5 MOV R0r 41S £ MOV Rl r 4S 7 SUB RO r R0r Rl a |B SIART 9END2:验证ARM 的寄存器偏移寻址方式A:源代码。
:功能是首先分别给寄存器R0,R1,R2,R3 赋值为 2 再将R2寄存器的值左移三位所得结果赋给 R0( R2值不变),最后将R1减去R2 左移R3(寄存器内的值)位的值,并将结果赋给 R0 p]_|丨豊囤|国|副回瞩|m|國同|_|向回换回國|團|子| AEM7TDMI - ^atchTab 2 Tab 3 T J ITibI Kat chValueRC> R1 R2 R3 PC0x00000000 0x00000000 0x00000000 0x00000000 0x60000000C'PSR SPSROxOOOO00D3 oxoooaaaooAREArCODE, READONLYENTRYCO3E32START | MOVM0V MOV MOV MOV R0F #2 Rl r i2 52 R3r ^2R0F R2,LSL t3AN2S RlpRl^^SL S3B START ENDB:程序执行过程 1)先为各寄存器赋值2)然后执行对R2寄存器内的数进行移位并将所得结果赋给 R0,可以观察到R2内的值是不变的鬥L 制伽 |LO|t3|L£J| 匠 MI|Lh]|iyj| | |国 LLJ|EM| 回 巴1| 曰 | 性1| ►3:验证ARM 的寄存器间接寻址方式A:源代码0 0 0功能是:先给 R20寄存器用立即数寻址方式赋一个值,然后将对 R0 进行移位操作使它成为指向内存指定位置的地址,然后将该地址的内容提取到 R1寄存器中,接着进行交换操作1ILLJ | m | L!LI ] 1SI| EJU |1 1 旦 LLJ |m |nzl rzj |eafl IZEI |I2_rTab 1 1 Tab 2 ]Tab 3 T :J_L LWatch Val^eRO 0x00000002 R1O K OOODOOOJR20x00000002R3 01(00000002 PCO K SOOOOOIOCPSROXOQOOOOD35P5RQxQOOOOOOOAEM7TDMI -町忙h口二I |兰8 ■呻 AK17TDKI - C:\Docuacnl s and Settings1012AREA Hex_cut r CODE, READONLYENTRY CODE32 STARTMOV MOV MOVMOV I MOV R0r #2 Rl r #2R2,#2R5r|EZ O K OOOOOOOZRO”AND5 RlHRl f R2F LSL R3 B SIARTE!;ZTab 1 |r a b 2T4b 3 | T=jJj_ KatchValueR2 R3 0X00CQ0C02 0x00000002 CPSROx£OC'OOQ14 O K COOOOOD3 SF5ROxOOTOOCO :3)最后执行指令让寄存器:? ARI7TDII — C z \DocuMent s and Set t ing9101112AREA Hes_cut ffREA3O!7LYEUTRF C0DE32 STARTMOV MCV MOV MOV MCV R0f #2Rl r «2 R2f 42 R3R0AND 呂 Rl r Rl,R2R LSL R3B STARTENDR1内的数减去R2移位R3并将所得结果赋给R1,可以看出R2的值没有变T»b 1 |lab 2Tab 3 | I :/ ► WatchValueRO0x00000010 R1OxODOOnftOO R2 0x00000002 R3 0x00000002PC oxeoooooieCFSR0x40000003SP5R OK0OOOOCOOAEKTTDI1 - C: \Docu»ent s and Sett ings \HOAREA Hen^out , CODE , READONLYENIRYCODE32SIARIR0f #2MOV Rl,#2玄肝R2f #2MOV R3f 42ifOV HO.RZ.LSL #3AMDS R1,RI,R2H L5L R3 B STARTENDAKWTTDMI - ffatchOxOOOOOQlj R1OxC0000002 ARM7TDHI - fratchR0寄存器赋值为2,再将R0内的数左移3位使它指向内 存的一个指定地址#0x000000101 APIA Hex_out, CODE f READON1T2 EJnRY3 CODE324 START5 EOV RO, *26 MCfV RO f RO r LSL #3•+ 7LCR Rl, [RO]eSWPRl.Rl,[RO]9 B START 10END2)取出指定地址的值,将其放到 R1寄存器中■I *| |闖轴|国|因|迪團闖|囤画| |画直]昕固扈囘|AEMTTDWI —W a ,t chO ARI7 TDII 〕— C t YDocuBent s and Set t imTab 1Tab 2 1 Tab「町丨卜11A2EA K EX CLLt r ZO'E,?EADCNLyWatch Value 2HJIRY R0 0x00000010 3CODE32 R10)cE7FrODLO 4 STARIPC DxBDOOOOQC 5 MCV R □沖CPSR 0x00000003 €MCV RO^RO.LSL 43 5PSR0x000000007LDR Bl,[R0 J4 6 耐 R1#R1F[R0]9 B STJiRT10EtJD3)查看内存#0x00000010地址的内容(可以看到该内存地址的值与赋值给 R1的 值是一样的,证明上述操作成功)最后一个指令没什么意义,这里就不描述了。