汇编实验报告一 熟悉7种寻址方式
- 格式:doc
- 大小:80.00 KB
- 文档页数:4
实验报告
实验题目: 认识8086的寻址方式
姓名: 朱旭锋学号: 1314660221130
班级: 13计算机教育1班指导教师: 李卫华老师
实验时间:7 周,星期一
(一)实验内容
(1)项目要去:通过各种寻址方式操作,了解8086寻址方式。
(2)项目目的:通过项目了解8086汇编指令格式,并掌握808 的寻址方式。
(3)程序代码
DATAS SEGMENT
VALUE DW 5678H,6060H
TABLE DB 33H,55H,20H ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,1234H
MOV BX,AX
MOV AX,VALUE
MOV word ptr [BX],2000H
MOV DL,80H
MOV SI,0020H
MOV [BX+SI],DL
MOV TABLE[BX+SI],AL;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
(4)单步调试过程
第一步反汇编
第二步,显示内存16进制
第三步,逐条运行程序
第四步,可运行程序
执行MOV SI,0020H
执行MOV [BX+SI],DL
第五步,结束
(5)小结
对这几个字母的作用不太了解。
程序也有一些看不懂。
如何掌握汇编语言的寻址方式陕西理工学院 潘继强[摘 要]寻址方式在汇编语言中占有极其重要的地位,可以说寻址方式是学习汇编这门低级语言的入场卷,往往也是学习过程中遇到的瓶颈问题。
本文通过分析比较基本概念,浅谈了采用比较法学习寻址方式,并通过具体实例来阐述用不同寻址方式实现对内存的访问。
[关键词]汇编语言 寻址方式 有效地址 比较法 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言,因而对于程序的空间和时间要求很高的场合,汇编语言是必不可少的。
汇编语言程序设计是高等院校计算机专业学生必修的主干课程之一,是《计算机组成原理》、《单片机》等专业课程的先修课。
但汇编语言是一种面向机器的低级语言,它要求学生除了了解计算机硬件,还要能够熟悉并灵活地应用机器所采用的各种寻址方式及计算机的指令系统,这对运用汇编语言进行程序设计是至关重要的。
而寻址方式又是学习汇编语言刚开始就遇到的重点和难点部分,是学习后面指令和程序的基础。
在教学过程中,通常选用Intel80X86CPU的PC机为基础机型来组织教学,它提供了十种与数据有关的寻址方式,其中几种寻址方式概念相似,学生普遍反映不好理解,极其容易混淆,编程时不知如何使用。
针对这种情况,在具体教学中借助比较的方法来提高学生的辨析能力,并配以例题让学生掌握寻址方式的异同及编程时的具体运用,以达到综合应用所学的概念编程解决实际问题。
我们知道分析、比较与综合是思维的基本过程,也是重要的逻辑思维方法。
根据汇编抽象的特点,应用“比较法”进行学习,可以明确概念的本质,区分容易混淆的问题,达到举一反三的效果,以便更好地掌握基本概念。
在学习Intel80X86微处理器中的寻址方式时,涉及到的寻址方式有以下十种:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址、比例变址寻址、基址比例变址寻址、相对基址比例变址寻址(后面三种寻址方式均与比例因子有关,这些寻址方式只能在80386及其后继机型中使用)。
51系列单⽚机的寻址⽅式AT89C51单⽚机能直接认识和执⾏的机器指令有255条,有7种寻址⽅式,即⽴即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。
1. 直接寻址:指令中直接给出参与操作的数据的地址,该地址⼀般⽤direct表⽰。
汇编指令:MOV A,direct该指令的功能是将⽚内RAM地址direct单元中的内容(参与操作的数据)传送到累加器A中,双字节指令。
2. ⽴即寻址:指令中直接给出参与操作的数据,称⽴即数,⽤data表⽰。
在汇编语⾔中,为标明⽴即数,为data加前缀”#”。
⽴即数可以是8位和16位⼆进制数,分别⽤#data和#data16表⽰。
汇编语⾔指令:MOV A,#data该指令将⽴即数data传送到累加器A中,双字节指令。
3. 寄存器寻址:参与操作的数据存放在寄存器中,汇编指令中直接以寄存器名来表⽰参与操作的数据地址,寄存器包括⼯作寄存器R0~R7、累加器A、AB、数据指针DPTR和位运算寄存器C。
汇编语⾔指令:MOV A,Rn ;n=0~7该指令将Rn中的内容传送到累加器A中,单字节指令。
4. 寄存器间接寻址:寄存器间接寻址为⼆次寻址,第⼀次寻址得到寄存器的内容为(Ri)或(DPTR),第⼆次寻址是将第⼀次寻址得到的寄存器内容作为地址,并在其中存、取参与操作的数据。
汇编语⾔中,寄存器前缀@是寄存器间接寻址的标志,有@Ri、@DPTR等。
汇编语⾔指令:MOV A,@Ri ;i=0、1该指令是将Ri中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。
5. 变址寻址:间接寻址由两个寄存器提供。
若由A、PC提供,在汇编语⾔指令中寻址地址表⽰为@A+PC;若由A和DPTR提供,在汇编语⾔指令中寻址地址为@A+DPTR。
其中,PC或DPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位⽆符号加法。
若变址寄存器A中内容加基址寄存器DPTR(或PC)中内容时,低8位有进位,则该进位直接加到⾼位,不影响进位标志。
MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结20__-08-2920:34:02|分类:エ程|标签:|字号大中小订阅MCS-51单片机指令系统共使用7中寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址等。
寻址方式定义操作数存放(1)通用寄存器R0~R7;寄存器于寄存器中,(2)部分专用寄存器,例如累加器A、寄存器B以寻址指令中给出数据指针DPTR等名寄存器存放操作数的(1)内部RAM中的低128地址单元,地址范围为内存单元地址00H~FFH;直接寻址直接写在指令中立即数操作数直接寻址写在指令中(2)专用寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
源操作数为立即数,立即数前面必须加“#”号,以区别立即数和直接地址(1)内部RAM的低128字节。
对内部RAM的低128字节单元的间接寻址,只能使用R0或R1做间将存放操作接寻址寄存器,其通过形式为@Ri(i=0或1);MOVP1,#55HMOVDPTR,#20__HMOVR1,20HMOVA,P1CLRAMOVP1,R4MOVA,R1寻址区域指令举例数的内存单元(2)外部RAM的64K字节。
对外部RAM的64KMOVA,@R0寄存器的地址放在寄字节的间接寻址,使用DPTR作间接寻址寄存器,MOVXA,@DPTR间接寻址存器中,指令其形式为@DPTR;MOVXA,@R0中只给出该寄(3)外部RAM的低256字节。
外部RAM的低256存器字节是一个特殊的寻址区,除了可以使用DPTR作间接寻址寄存器外,还可以使用R0或R1作间接寻址寄存器将基寄存器变址寻址与变址寄存器的内容相(1)变址寻址是专门针对程序存储器的寻址方式,所以只能对程序存储器进行寻址,寻址范围为64K字节;MOVCA,@A+PC加,结果作为操作数的地址(2)变址寻址指令只有2条:MOVCA,@A+PCMOVCA,@A+DPTR将程序计数器PC的当前内容与指令相对寻址中的操作数相加,其结果作为跳转指令的转移地址(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,每个单元包括8个位,共按位进行的位寻址操作(2)特殊功能寄存器SFR中的11个寄存器可以位寻址,包括83个位计128个位,位地址为00H~7FH;MOVC,0D0HMOVC,0DOH.0MOVC,PMOVC,PSW.0专门为改变程序执行方向而设置的SJMP54H扩展阅读:课题MCS-51型单片机的寻址方式广告灯设计软件部分课题MCS-51型单片机的寻址方式授课方式:讲授教学目的:1.让学生了解汇编语言指令的格式;2.让学生掌握单片机指令的7种寻址方式。
第1篇实验名称:微机原理实验实验日期:2023年10月25日实验地点:计算机实验室实验教师:[教师姓名]实验学生:[学生姓名]班级:[班级名称]一、实验目的1. 理解微机原理的基本概念和组成结构。
2. 掌握微机硬件的基本操作和调试方法。
3. 熟悉汇编语言编程和程序调试技巧。
4. 通过实验加深对微机原理课程的理解,提高动手能力。
二、实验内容本次实验主要分为以下几个部分:1. 微机硬件系统结构认识:了解微机硬件系统的组成,包括CPU、内存、I/O接口等,熟悉各部件的功能和相互关系。
2. 汇编语言编程:学习汇编语言的基本语法和指令系统,编写简单的汇编程序,实现特定功能。
3. 程序调试:使用调试工具(如DEBUG)对汇编程序进行调试,查找并修正错误。
4. 微机原理实验:完成以下实验任务:1. 编写程序实现两个多位十进制数的相加。
2. 编写程序实现字符串比较功能。
3. 编写程序实现乘除法运算。
三、实验步骤1. 微机硬件系统结构认识:- 观察实验室中的微机硬件系统,了解各部件的连接方式和功能。
- 使用示波器检测实验装置的信号是否正常。
2. 汇编语言编程:- 学习汇编语言的基本语法和指令系统。
- 编写程序实现两个多位十进制数的相加,程序如下:```;加数DATA1 DB 3,4,5,6,7;被加数DATA2 DB 2,3,4,5,6;结果SUM DB 5 DUP(0);程序开始MOV CX, 5 ;循环次数MOV AL, 0 ;结果初始化为0MOV SI, OFFSET DATA1 ;加数地址MOV DI, OFFSET DATA2 ;被加数地址ADD_LOOP:ADD AL, [SI] ;加数加到AL寄存器ADC AL, [DI] ;进位加到AL寄存器MOV [DI], AL ;结果存回DI寄存器ADD SI, 1 ;加数地址加1ADD DI, 1 ;被加数地址加1LOOP ADD_LOOP ;循环;程序结束```- 编写程序实现字符串比较功能,程序如下:```;字符串1STRING1 DB 'Hello';字符串2STRING2 DB 'World';比较结果RESULT DB 0;程序开始MOV SI, OFFSET STRING1 ;字符串1地址MOV DI, OFFSET STRING2 ;字符串2地址CMP_LOOP:MOV AL, [SI] ;读取字符串1的当前字符CMP AL, [DI] ;与字符串2的当前字符比较 JNE NOT_EQUAL ;不相等则跳转到NOT_EQUAL INC SI ;字符串1地址加1INC DI ;字符串2地址加1LOOP CMP_LOOP ;循环MOV RESULT, 1 ;相等则将结果设置为1JMP END ;跳转到ENDNOT_EQUAL:MOV RESULT, 0 ;不相等则将结果设置为0END:;程序结束```- 编写程序实现乘除法运算,程序如下:```;被乘数DATA1 DB 10;乘数DATA2 DB 5;结果PRODUCT DB 0;程序开始MOV AL, [DATA1] ;被乘数加载到AL寄存器MUL [DATA2] ;乘数乘到AL寄存器MOV [PRODUCT], AL ;结果存回PRODUCT;程序结束```3. 程序调试:- 使用DEBUG工具对汇编程序进行调试,查找并修正错误。
2.1 寻址方式与基本指令实验2.1.1 实验目的1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。
2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。
3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法2.1.2 实验预习要求1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。
2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。
3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。
4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。
2.1.3 实验内容1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。
(1)程序装入后,代码段寄存器CS的内容为___0711_____H,代码段第一条可执行指令MOVA X, DATA对应的机器代码为____B81007______H,它是一个_____3__字节指令,注意观察执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是______寄存器间接寻址____,其值为____82H______。
(2)执行完MOV DS, DA TA指令后,数据段寄存器DS的内容为___076A_____H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为__076B8______H、___076BA_____H和____076BE____H。
(3)程序中第一条ADD AL, [BX] 指令对应的机器代码为___0207_______H,它是一个____2____字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为_____寄存器间接寻址_____,该操作数所在存储单元的逻辑地址(DS): (BX)为___076A:0001______,其物理地址为_____076A0_____H;执行完该指令后(AL)=__EA___H,CF=___0___,OF__0____,ZF_0_____,SF__1____,AF__0____,PF__0____;若两操作数为无符号数,计算结果是否正确___正确____?若两操作数为带符号数,计算结果是否正确____正确____?若计算结果正确,结果是正数还是负数___正数___?(4)执行完第二条ADD AL, [BX] 指令后(AL)=___72__H,CF=___1___,OF___1___,ZF____0__,SF___0___,AF___1___,PF____1__;若两操作数为无符号数,计算结果是否正确___正确____?若两操作数为带符号数,计算结果是否正确____不正确____?(5)指令MOV SUM, AL中目的操作数的寻址方式为_____基址变址寻址方式_____。
汇编语⾔实验报告汇编语⾔实验报告专业:班级:姓名:学号: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 地址数据表;从指定的地址开始⽤数据表给定的数据修改存储单元。
51单片机的寻址方式寻址方式:指定操作数所在单元的方法。
在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
一、立即寻址用“#”作前缀MOV A,#20H在这种寻址方式中,指令多是双字节的。
立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。
例如:MOV? A,#3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。
MOV? DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。
这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。
二、直接寻址指令中直接给出操作数的地址。
MOV?? ?A,30H;这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。
MOV ? 30H,DPH在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是:1、内部数据存储器RAM低128单元。
在指令中是以直接单元地址形式给出。
我们知道低128单元的地址是00H-7FH。
在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00 H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形式给出。
2、位寻址区。
20H-2FH地址单元。
3、特殊功能寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
例如下面我们分析的一条指令 MOV? IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV? 80H,#85H的形式表述。
大家来分析下面几条指令:MOV? 65H,A???? ? ;将A的内容送入内部RAM的65H单元地址中MOV? A,direct?? ?;将直接地址单元的内容送入A中MOV? direct,direct;将直接地址单元的内容送直接地址单元MOV? IE,#85H????? ;将立即数85H送入中断允许寄存器IE前面我们已学过,数据前面加了“#”的,表示后面的数是立即数(如# 85H,就表示85H就是一个立即数),数据前面没有加“#”号的,就表示后面的是一个地址地址(如,MOV 65H,A这条指令的65H就是一个单元地址)。
实验三 认识寻址方式3.1 实验目的(1)学习和掌握操作数的各种寻址方式(2)学习使用Debug创建和调试程序3.2 预备知识1.操作数和寻址方式操作数是指令或程序的主要处理对象。
在CPU的指令系统中,除了NOP空操作、HLT停机等少数指令外,大量的指令在执行过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在的位置是正确运用汇编指令的一个重要因素。
寻址方式是指操作数或操作数存放位置的方法。
通俗地说,就是寻找操作数位置的方法。
操作数的各种寻址方式是用汇编语言程序解决问题的基础。
8086系统有7种寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、基址变址寻址方式和相对基址变址寻址方式。
在80386CPU之后,增加了比例变址寻址、基址比例变址寻址和相对基址比例变址寻址等3种方式。
除了立即寻址方式和寄存器寻址方式外,其余均为存储器寻址方式。
2. 传送指令MOV传送指令是使用最为频繁的指令,它相当于高级语言中的赋值语句。
指令格式:MOV Reg/Mem,Reg/Mem/ImmReg:寄存器;Mem:存储器;Imm:立即数。
它们可以是8位、16位或32位。
指令的功能是将源操作数SRC(第二操作数)的值传送给目的操作数DST(第一操作数)。
指令执行后,目的操作数被改变,而源操作数的值保持不变。
当存储单元作为操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。
3. 加法指令ADD指令格式:ADD Reg/Mem,Reg/Mem/Imm受影响的标志位:AF,CF,OF,PF,SF,ZF。
指令的功能是把源操作数的值加到目的操作数中。
4. 减法指令SUB指令格式:SUB Reg/Mem,Reg/Mem/Imm受影响的标志位:AF,CF,OF,PF,SF,ZF。
指令的功能是把源操作数与目的操作数的值相减并存到目的操作数中。
5.中断INT 20功能:终止当前程序的运行。
入口参数:CS=PSP的段地址出口参数:无3.3 实验内容一、寻址方式通过实验观察和分析在不同的寻址方式下存储单元逻辑地址的表示以及指令的执行结果。
第 1 页 共 4 页
电子信息工程学系实验报告
——适用于计算机课程
课程名称:IBM-PC汇编语言程序设计
实验项目名称:熟悉7种寻址方式 实验时间:
班级: 姓名: 学号:
一、实验目的:
掌握debug命令,熟悉7种寻址方式。
二、实验环境:
ASM轻松汇编
三、实验内容:
1、上机输入以下程序:
data segment
x db 01,02
y db ?,?
z db ?,?
w dw 1234h
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov dx,1234h -----无有效地址
mov cl,ds:[0000h] -----0000h
mov si,0000h
mov di,0002h
mov al,[si] ----0000h
mov [di],al ----无有效地址
add si,1
add di,1
mov al,[si]
mov [di],al
mov si,0000h
mov di,0000h
mov al,x[si]
mov y[di],al
成 绩:
指导教师(签名):
第 2 页 共 4 页
add si,1
add di,1
mov al,x[si] -----0001h
mov y[di],al
mov si,0000h
mov di,0000h
mov bx,0000h
mov bp,0004h
mov al,[bx][si] ----0000h
mov ds:[bp][di],al
add si,1
add di,1
mov al,[bx][si]
mov ds:[bp][di],al
ret
main endp
code ends
end start
2、写出上面汇编程序中字体为红色的指令的源操作数的寻址方式以及源操作数的有效地址。
指令 寻址方式 有效地址
mov dx,1234h
立即寻址方式 无有效地址
mov cl,ds:[0000h]
直接寻址方式
0000h
mov al,[si]
寄存器间接寻址方式
0000h
mov [di],al
寄存器寻址方式 无有效地址
mov al,x[si]
寄存器相对寻址方式
0001h
mov al,[bx][si]
基址变址寻址方式
0000h
画图说明数据段中变量所分配的存储空间及初始化的数据值。
14F2:0000 0001 0002 0003 0004 0005 0006 0007 01
02
01
02
00
00
34
12
第 3 页 共 4 页
实 验 心 得:
通过这次实验了解了7种寻址方式,在运行过程中懂得了debug命令,以及轻松汇编
的软件运用。在程序运行过程中,出现了一些问题。比如:刚开始没保存,所以不能编译和
生成;最后要显示初始数据值时,只是输入-d,于是结果很奇怪,通过同学的帮助,输入-d0000,
结果就对了。总之这次实验,也算挺成功。
附 录:备注:运行过程截图:
第 4 页 共 4 页