当前位置:文档之家› 汇编语言——7种寻址方式

汇编语言——7种寻址方式

汇编语言——7种寻址方式
汇编语言——7种寻址方式

电子信息工程学系实验报告——适用于计算机课程

课程名称:汇编语言程序设计Array实验项目名称:熟悉debug命令,以mov指令为例掌握不同的寻址方式

实验时间: 2012.9.20

班级:姓名:学号:

实验目的:

掌握debug命令,熟悉7种寻址方式。

实验环境:

Win7,masm,link

实验内容及过程:

输入给出的程序,通过对程序的调试和运行了解指令操作数的寻址方式以及它的有效地址。

实验结果及分析:

2.

代码寄存器的值寻址方式有效地址

--------------------------------------------------------------------------------------------------------- mov dx,1234h (dx)=1234h 立即寻址无

mov cl,ds:[0000h] (cl)=01h 直接寻址 0000h

mov al,[si] (al)=01h 寄存器间接寻址 0000h

mov [di],al [di]=01h 寄存器寻址无

mov al,x[si] (al)=01h 寄存器相对寻址 0001h

mov al,[bx][si] (al)=01h 基址变址寻址 0000h

3.

初始化:

程序执行后:

实验心得:

通过此次实验。掌握了debug的基本使用方法,知道了几个常用的命令及其结果代表的含义,了解从源代码到可执行文件会经过编译跟链接阶段。明白了编写汇编程序及其调试的步骤和方法。

附录:

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]

mov si,0000h

mov di,0002h

mov al,[si]

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

add si,1

add di,1

mov al,x[si]

mov y[di],al

mov si,0000h

mov di,0000h

mov bx,0000h

mov bp,0004h

mov al,[bx][si]

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

备注:以上各项空白处若填写不够,可自行扩展

实验7 寻址方式在结构化数据访问中的应用

计算机学院实验报告 课程汇编语言 实验名称实验7 寻址方式在结构化数据访问中的应用 专业计算机科学与技术 2018年 12 月 24 日 一、实验目的 1.定位内存单元的寻址方式汇总 2.寻址方式的综合应用

3.转移指令的分类和原理 4.熟悉在显存中编程的方法 二、实验内容及要求 ( 一) 寻址方式的汇总及综合应用 1.定位内存单元的寻址方式有几种,并举例说明。 2.寻址方式在结构化数据访问中的应用。 Power idea 公司从 1975 年成立一直到 1995 年的基本情况如下。 年份收入 ( 千美元 )雇员人均收入 ( 千美元 ) 1975163? 1976227? 19773829? 1978135613? 1979239028? 1980800038? 1995593700017800? 下面的程序中,已经定义好了这些数据: assume cs:codesg data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' ;年份 dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,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 ends table segment db 21 dup('year summ ne ??') table ends

汇编实验报告一 熟悉7种寻址方式

电子信息工程学系实验报告——适用于计算机课程课程名称: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 成绩: 指导教师(签名):

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

ARM处理器9种基本寻址方式

寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。 1.寄存器寻址 操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。 例如指令: MOV R1,R2 ;R1←R2 SUB R0,R1,R2 ;R0←R1- R2 2.立即寻址 在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。 例如指令: ADD R0,R0,#1 ;R0←R0 + 1 MOV R0,#0xff00 ;R0←0xff00 3.寄存器移位寻址 寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。 例如指令: MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2 * 8 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1 可采用的移位操作如下: LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。 LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。 ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1 ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位 RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。 各移位操作过程如图所示。

DSP汇编指令总结

DSP汇编指令总结 一、寻址方式: 1、立即寻址: 短立即寻址(单指令字) 长立即数寻址(双指令字) 第一指令字 第二指令字 16位常数=16384=4000h 2、直接寻址 ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进行增或减。N规定是否改变ARP值,(N=0,不变)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); 4.3.1.2、减法指令(5条); 4.3.1.3、乘法指令(2条); 4.3.1.4、乘加与乘减指令(6条); 4.3.1.5、其它算数指令(3条); 4.3.1.6、移位和循环移位指令(4条); 4.3.1.7、逻辑运算指令(4条); 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条) 4.3.2.2、临时寄存器指令(5条) 4.3.2.3、乘积寄存器指令(6条) 4.3.2.4、辅助寄存器指令(5条) 4.3.2.5、状态寄存器指令(9条) 4.3.2.6、堆栈操作指令(4条) 4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条) 4.3.3.2、程序存储器读写指令(2条) 4.3.3.3、I/O操作指令(2条) 4.3.4、程序控制指令(15条) 4.3.4.1、程序分支或调用指令(7条) 4.3.4.2、中断指令(3条) 4.3.4.3、返回指令(2条) 4.3.4.4、其它控制指令(3条)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); ▲ADD ▲ADDC(带进位加法指令) ▲ADDS(抑制符号扩展加法指令) ▲ADDT(移位次数由TREG指定的加法指令) 4.3.1.2、减法指令(5条); ★SUB(带移位的减法指令) ★SUBB(带借位的减法指令) ★SUBC(条件减法指令) ★SUBS(减法指令) ★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条); ★MPY(带符号乘法指令) ★MPYU(无符号乘法指令) 4.3.1.4、乘加与乘减指令(6条); ★MAC(累加前次积并乘)(字数2,周期3) ★MAC(累加前次积并乘) ★MPYA(累加-乘指令) ★MPYS(减-乘指令) ★SQRA(累加平方值指令) ★SQRS(累减并平方指令) 4.3.1.5、其它算数指令(3条); ★ABS(累加器取绝对值指令) ★NEG(累加器取补码指令) ★NORM(累加器规格化指令) 返回 4.3.1.6、移位和循环移位指令(4条); ▲ SFL(累加器内容左移指令) ▲ SFR(累加器内容右移指令) ▲ROL(累加器内容循环左移指令) ▲ROR(累加器内容循环右移指令) 返回 4.3.1.7、逻辑运算指令(4条); ▲ AND(逻辑与指令) ▲ OR(逻辑或指令) ▲ XOR(逻辑异或指令) ▲ CMPL(累加器取反指令) 返回 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条)

《汇编语言程序设计》学习心得自主学习报告.doc

自主学习报告书 题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名: 专业: 学号: 福建工程学院国脉信息学院教务处制 二○一二年六月

学习汇编语言程序设计报告书 由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。 通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。 在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也

是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

单片机寻址方式

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位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH 形式给出。 2、位寻址区。20H-2FH地址单元。 3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV 80H,#85H的形式表述。

寻址方式教案(1)

§3.1MCS-51单片机寻址教案 授课人:章谋学习目标:1、了解汇编指令的结构组成 2、掌握7种指令寻址方式的结构和特点 3、熟练运用汇编指令编写程序 计划课时:2学时 教学重点:掌握4种类型的寻址方式 教学难点:7种寻址方式在程序中的应用 教学方法:实例演示、小组讨论、软件仿真、当堂练习 第一课时 〖本节课的教学目标〗 1、学生能了解汇编指令语句格式 2、学生能区分出立即寻址、直接寻址、间接寻址的异同 教学过程 课前预习情况检查(预习卡1--3题的完成情况的检查) 一、课堂引入: 1、学生利用老师写好的程序载入下图进行运行并记录运行现象。 2、观察单片机系统中有硬件但没有程序运行所出现的现象。 3、观察单片机系统中有程序但硬件有故障所出现的现象。 循环彩灯效果图

彩灯实验箱实物连结图 org 0000h start:mov r0,#08 delay: mov r1,#10 mov r4,#08 de0: mov r2,#127 mov a,#0feh de1: mov r3,#200 loop1:mov p1,a de2: djnz r3,de2 acall delay djnz r2,de1 rr a djnz r1,de0 djnz r0,loop1 ret loop2:mov p1,a rl a acall delay djnz r4,loop2 循环彩灯应用程序 ajmp start

二、课堂自学: 1、学生自学,了解汇编指令的组成 Start : mov a, #30h ; (A) ←30H 标号( );指令助记符( );目的操作数( ); 源操作数( ) 释( ) 注:指令操作数可能有2个或3个,也可能只有1个或1个也没有。 2、小组讨论,完成寻址方式的分类 (小组学生举手作答与老师提问相结合,注重从最后一名学生开始抓起) ①、立即数寻址:②、直接寻址方式 ③、寄存器寻址 ④、寄存器间接寻址: 例如:MOV A ,3AH ;(3AH )→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,#3AH ;3AH →A 目的操作数( ),源操作数( ),寻址方式( ) MOV DPTR ,#2000H ;2000H →DPTR ;DPH=20H ;DPL=00H 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,3AH ;(3AH) →A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,P1;P1口→A 目的操作数( ),源操作数( ),寻址方式( ) MOV A ,R0;R0→A 目的操作数( ),源操作数( ),寻址方式( ) MOV P1,A ;A →P1口 目的操作数( ),源操作数( ),寻址方式( ) ADD A ,R0;A+R0→A 目的操作数( ),源操作数( ),寻址方式( ) 65H 47H R0 A 47H 数据存储器 地址 ┋ ┋ 65H ① ② 将片内RAM 65H 单元内容47H 送A

汇编语言学习心得

汇编学习心得 08网工(一)班李锐 0804031002 在大三接触汇编语言之前,我们在计算机组成原理课程中就已经有所了解了,但也只是略微明白一些如jmp,mov这样的指令,极度缺乏系统性的学习。 在接触这门课程后,感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。 另外,在C语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。这不得不让我们对汇编产生一种恐惧感。事实上,这是完全不必要的。一旦对它的原理掌握后,编写程序就容易多了。另外,学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。 汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念,名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。 我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。 经过一个学期的学习,我也慢慢摸出了汇编学习的规律。 首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,则会起到良好的效果。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C 语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。 第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。 指令的种类十分繁杂,但其格式却是统一的。 其中方括号中的内容为可选项。指令助记符决定了指令的功能,对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有

寄存器与7种寻址方式

一、寄存器 总共有14个16位寄存器,8个8位寄存器 通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器) CH(8位) CL(8位) CX(16位) (CX用于字符串操作,控制循环的次数,CL 用于移位) DH(8位) DL(8位) DX(16位) (DX一般用来做32位的乘除法时存放被除数或者保留余数) 指针寄存器: SP 堆栈指针(存放栈顶地址) BP 基址指针(存放堆栈基址偏移) 变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移, 即作为存储器(短)指针使用。作为通用寄存器,它们可以保存16位算术逻辑运算中的操 作数和运算结果,有时运算结果就是需要的存储单元地址的偏移. SI 源地址(源变址寄存器) DI 目的地址(目的变址寄存器) 控制寄存器: IP 指令指针 FLAG 标志寄存器 ①进位标志CF,记录运算时最高有效位产生的进位值。

②符号标志SF,记录运算结果的符号。结果为负时置1,否则置0。 ③零标志ZF,运算结果为0时ZF位置1,否则置0。 ④溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。 ⑤辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。 ⑥奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。 段寄存器 CS 代码段IP DS 数据段 SS 堆栈段SP BP ES 附加段 二、七种寻址方式: 1、立即寻址方式: 操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。 例如: 指令: MOV AX,1234H 则: AX = 1234H 2、寄存器寻址方式: 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。

存储器寻址方式

存储器寻址方式 存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。8088的存储器空间是分段管理的。程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA) 1.直接寻址 在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以采用段超越前缀。 例将数据段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, [2000H] 该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。 如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。

MOV AX, [2000H];指令代码:A1 00 20 例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。 MOV AX, ES:[2000H]; 指令代码:26 A1 00 20 变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如 WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。假设它在数据段偏移地址是0010H 。 例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。 MOV AX, WV AR; 指令功能: 上述指令实质就是如下指令: AX WV AR AX DS :[0010H]

七种寻址方式

七种寻址方式 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如: MOV AH,80H ADD AX,1234H MOV ECX,123456H MOV B1,12H MOV W1,3456H ADD D1,32123456H 其中:B1、W1和D1分别是字节、字和双字单元。 以上指令中的第二操作数都是立即数, 立即数寻址方式通常用于对通用寄存器或内存单元赋初值。 二、寄存器寻址方式 指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。 指令中可以引用的寄存器及其符号名称如下: 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等。 三、直接寻址方式 指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。 在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。 例:假设有指令:MOV BX,[1234H],在执行时,(DS)=2000H,内存单元21234H 的值为5213H。问该指令执行后,BX的值是什么? 解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

课后习题六(第七章)

课后习题(第七章) 1、为了缩短指令中地址码的位数,应采用( B )寻址。 A、立即数 B、寄存器 C、直接 D、间接 2、指令系统中采用不同寻址方式的目的主要是( B ) A. 可降低指令译码难度 B. 缩短指令字长、扩大寻址空间、提高编程灵活性 C. 实现程序控制 D. 提高指令执行速度 3、零地址运算指令在指令格式中不给出操作数地址,它的操作数来源自( C ) A. 立即数和栈顶 B. 暂存器 C. 栈顶或隐含约定的位置 D. 存储器 4、单地址指令中,为完成两个数的算术运算,除地址译码指明的一个操作数外,另一个数常采用( C ) A. 堆栈寻址方式 B. 立即寻址方式 C. 隐含寻址方式 D. 基址寻址方式 5、二地址指令中,操作数的物理位置安排,描述正确的是( C ) A. 两个主存单元(且依然在现指令系统中采用) B. 栈顶和次栈顶 C. 主存单元或寄存器 D. 两个同时为寄存器不允许使用 6、操作数在寄存器中的寻址方式称为( C )寻址 A. 直接 B. 立即 C. 寄存器直接 D. 寄存器间接 7、寄存器间接寻址方式中,操作数在( C ) A. 通用寄存器 B. 堆栈 C. 主存单元 D. I/O外设中 8、变址寻址方式中,操作数的有效地址是( C ) A. 基址寄存器内容加上形式地址 B. 程序计数器内容加上形式地址 C. 变址寄存器内容加上形式地址 D. 形式地址本身 9、采用基址寻址可扩大寻址范围,且( B ) A. 基址寄存器内容由用户确定,在程序执行过程中一般不可变 B. 基址寄存器内容由操作系统确定,在程序执行过程中一般不可变 C. 基址寄存器内容由用户确定,在程序执行过程中可随意变化 D. 基址寄存器内容由操作系统确定,在程序执行过程可随意变化 10、变址寻址和基址寻址的有效地址形成方式类似,但是( C ) A. 变址寄存器内容在程序执行过程中是不可变的 B. 在程序执行过程中,变址寄存器和基址寄存器的内容可以随意变化 C. 在程序执行过程中,变址寄存器的内容可随意变化 D. 以上均不对 11、堆栈寻址中,设A为累加器,SP为栈顶指针,[SP]为其指向的栈顶单元,如果进栈的动作顺序是(SP)-1→SP,(A)→[SP],那么出栈的动作顺序是( A ) A. [SP] →(A),(SP)+1→SP B. (SP)+1→SP,[SP] →(A) C. (SP)-1→SP,[SP] →(A) D. [SP] →(A),(SP)-1→SP 12、设变址寄存器为X,形式地址为D,某机具有先变址再主存间址的寻址方式,则这种寻

汇编语言复习重点总结版

1.通用数据传送指令 MOV——传送指令 指令格式:MOV DST,SRC ;(DST)←(SRC)。DST表示目的操作数, SRC表示源操作数 说明:①.DST为除CS外的各寄存器寻址方式或任意存储器寻址方式。SRC为任意数据寻址方式。 ②.DST、SRC不能同时为存储器寻址方式,也不能同时为段寄存器寻址方 式,而且在DST为段寄存器时,SRC不能为立即数。 ③.MOV指令不影响标志位。 2.地址传送指令 (1).LEA——有效地址(EA)送寄存器指令 指令格式:LEA REG,SRC ;(REG)←SRC 说明:①.指令把源操作数(只能是存储器寻址方式)指定的有效地址送到指令指定的16位或32位寄存器(REG)中(但不能是段寄存器)。 ②.LEA指令不影响标志位。 3.加法指令 (1).ADD——加法指令 指令格式:ADD DST,SRC ;(DST)←(DST)+( SRC) 4.减法指令 (1).SUB——减法指令 指令格式:SUB DST,SRC ;(DST)←(DST) - (SRC) (2).SBB——带借位减法指令 指令格式:SBB DST,SRC ;(DST)←(DST) - (SRC) - CF 5.除法指令 (1).DIV——无符号数除法指令 指令格式:DIV SRC ;字节操作:(AL)←(AX)/(SRC),(AH)←(AX)%(SRC) 字操作:(AX)←(DX,AX)/(SRC),(DX)← (DX,AX)%(SRC) 双字操作:(EAX)←(EDX,EAX)/(SRC),(EDX)← (EDX,EAX)%(SRC) 6.逻辑运算指令:可以对双字、字或字节执行按位的逻辑运算。 (1).AND——逻辑与指令 指令格式:AND DST,SRC ;(DST)←(DST)∧(SRC) (2).OR——逻辑或指令 指令格式:OR DST,SRC ;(DST)←(DST)∨(SRC) (3).XOR——逻辑异或指令 指令格式:XOR DST,SRC ;(DST)←(DST)⊕(SRC) (4).PUSH——进栈指令 指令格式:PUSH SRC;16位指令:(SP)←(SP) –2 ((SP)+1,(SP))←(SRC) 32位指令:(ESP)←(ESP) –4 ((ESP)+3, (ESP)+2, (ESP)+1, (ESP))←(SRC) 说明:①.堆栈:计算机开辟的以“后进先出”方式工作的存储区。它必须存在于

寻址方式

寻址方式:1.立即寻址:操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分于操作码一起存放在程序储存器中,可以立即得到并执行,不需要经过别的途径去寻找,在数前常冠以#作为前缀。2.寄存器寻址:在指令选定的某寄存器中存放或读取操作数3,寄存器间接寻址:由指令指出某一寄存器的内容,常有@前缀。4,直接寻址:指令中直接给出操作数所在的存储器地址。5,变址寻址:基址寄存器加变址寄存器间接寻址,MOVC A,@A+DPTR.6,相对寻址:以当前程序计数器PC值加上指令中给出的偏移量rel而构成实际操作数地址的寻址方法,它用于访问程序存储器,常出现在相对转移指令中。7,位寻址:在位操作指令中直接给出位操作数的地址可以对片内RAM中128个位和特殊功能寄存器SFR中的93个位进行寻址。 数据传送类指令:一、以累加器为目的操作数的指令 MOV A, Rn ; (Rn)→A,n=0~7 MOV A, @Ri ; ((Ri))→A,i=0,1 MOV A, direct ;(dir ect)→A MOV A, #data ; #data→A 二、以Rn为目的操作数的指令 MOV Rn, A ; (A)→Rn, n=0~7 MOV Rn, direct ;(direct)→Rn, n=0~7 MOV Rn, #data ; #data→Rn, n=0~7 三、以直接地址direct为目的操作数的指令 MOV direct, A ; (A)→direct MOV direct, Rn ;(Rn)→direct, n=0~7 MOV direct1, direct2; MOV direct, @Ri ;((Ri))→direct MOV direct, #data ; #data→direct 四、以寄存器间接地址为目的操作数的指令 MOV @Ri, A ;(A)→((Ri)),i=0,1 MOV @Ri, direct ;(direct)→((Ri)) MOV @Ri, #data ; #data→((Ri)) 五、16位数传送指令 MOV DPTR, #data16 ; #data16→DPTR 唯一的16位数据的传送指令, 立即数的高8位送入DPH, 立即数的低8位送入DPL。 六、堆栈操作指令 内部RAM中可以设定一个后进先出(LIFO-Last In First Out)的区域称作堆栈,堆栈指针SP始终指向堆栈的 栈顶位置。 1、进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到SP指示的内部RAM单元中 2、出栈指令 POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元 中,栈指针SP减1 七、累加器A与外部数据存储器传送指令 MOVX A, @DPTR ;((DPTR))→A,读外部RAM/IO

汇编语言小结

汇编语言复习小结 一、8088/8086的功能结构 1、总线接口单元(BIU)。由指令队列、指令指针(IP)、段寄存器、地址加法器和总线控制逻辑等构成。该单元管理着8088与系统总线的接口,负责CPU对存储器和外设进行访问。 2、执行单元(EU)。由ALU、通用寄存器、地址寄存器、标志寄存器和指令译码逻辑等构成,它负责指令的译码、执行和数据的运算。 3、指令预取(指令队列)。8088的BIU维护着长度为4字节的指令队列,该队列按照“先进先出(FIFO)”的方式进行工作。 二、8088/8086的寄存器结构 8088/8086的寄存器组有8个通用寄存器、4个段寄存器、1个标志寄存器和1个指令指针寄存器,均为16位。分类方法如下:

三、8088/8086的存储器结构 将存储器空间分成许多逻辑段(Segment)来管理。每个存储器单元可以用“段基地址:段内偏移地址”表达其准确的物理位置。 (十六进制)5位物理地址=4位段地址左移1位+偏移地址 小端方式:低字节对低地址、高字节对高地址。 四、为什么能并行执行? 答:执行单元(运算器)和总线接口-指令队列单元这两部分同时工作就是一种并行操作方式,执行单元从指令队列头部获取指令,只要队列不是空的,它就能一直执行无需等待。同一时间内,总线接口单元从内存中读取指令,填入队列尾部,尽量保证队列处于“满”的状态(8086满队列是六条指令)。也就是说,取指令和执行指令并行完成,基本上互不干扰。 五、8088/8086的数据寻址方式 1、立即数寻址方式 2、寄存器寻址方式 3、存储器寻址方式 (1)直接寻址方式 (2)寄存器间接寻址方式 (3)寄存器相对寻址方式 (4)基址变址寻址方式 (5)相对基址变址寻址方式 六、五大类指令分类: 方法一(按指令功能分类): 1、数据传送类指令: MOV(传送指令) XCHG(交换指令) XLAT(换码指令) PUSH(进栈指令) POP(出栈指令) LEA(地址传送指令) 标志操作指令 2、算术运算类指令: 加法指令:ADD ADC INC 减法指令:SUB SBB DEC NEG CMP 符号扩展指令:CBW CWD

七种寻址方式

七种寻址方式 1、立即寻址方式: 操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。 例如: 指令: MOV AX,1234H 则: AX = 1234H 2、寄存器寻址方式: 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP 和BP等。 对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。 3、直接寻址方式: 操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址) 注:操作数一般存放在数据段

所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用 段超越前缀,则操作数也可含在数据段外的其他段中。 例如: MOV AX,[8054] 如(DS) = 2000H, 则执行结果为(AX) = 3050H (物理地址=20000+8054=28054H) 28054H里的内容为3050H 在汇编语言指令中,可以用符号地址代替数值地址 如:MOV AX,VALUE 此时VALUE为存放操作数单元的符号地址。 如写成:MOV AX,[VALUE]也是可以的,两者是等效的。 如VALUE在附加段中,则应指定段超越前缀如下: MOV AX,ES:VALUE 或MOV AX,ES:[VALUE] 4、寄存器间接寻址方式: 操作数在寄存器中,操作数有效地址在SI、DI、BX、BP 这四个寄存器之一中。在一般情况下,如果有效地址在 SI、DI和BX中,则以DS段寄存器中的内容为段值。如果 有效地址在BP中,则以SS段寄存器中的内容为段值 例如: MOV AX,[SI]

汇编期末

1.已知[X]补=98H,则[X]补/2=( )。 A.0CCH B.4CH C.49H D.31H 2.代码段某单元的逻辑地址为3458:2C92H,那么它的物理地址是( )。 A.36FF2H B.34580H C.37212H D.32C92H 3.设有一个双精度数12A034B0H,将它存入双字单元12000H,那么12003H中存放的是()。A.B0H B.34H C.A0H D.12H 4.若(AX)=2530H,(BX)=18E6H,则关于指令MOV [BX],AL的执行结果下面说法正确的是 ( )。 A.BX寄存器的值为2530H B.BL寄存器的值 为30H C.18E6H单元的值为30H D.18E6H单元的值为2530H 5.指令MOV AX, [BX],源操作数的寻址方式是( )。 A.寄存器寻址 B.直接寻址 C.寄存器间接寻址 D.基址变址寻址

6.在中断处理系统中,中断向量是指 ( )。 A.中断类型号 B.中断子程序 C.中断 源 D.中断子程序的入口地址 7.在BUFFER DB 01H,0AH这条语句中,BUFFER 称为( )。 A.助记符 B.变量 C.符号 D.标 号 8.在DEC WORD PTR [BX]指令中的操作数的数据 类型是( )。 A.字 B.字节 C.双字 D.四 字 9.用指令MOV BX,SEG COUNT,可以得到存储单 元COUNT的( )。 A.偏移地址 B.物理地址 C.段地 址 D.操作数 10.SP栈指针内容是1200H,执行两条PUSH指令 之后,SP的值为( )。 A.1202H B.1204H C.11FCH D.11FEH 11.下面的数据传送指令中,错误的操作是 ( )。

汇编语言期末复习总结(完整版)

〔习题1.24〕说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX 的值或有效地址EA的值。 (1)mov dx,[1234h] 直接寻址,EA=1234H (3)mov dx,bx 寄存器寻址,DX=2000H (6)mov dx,[bx+di] 基址变址寻址,EA=2040H 第2章8086的指令系统 〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。 (1)mov ax,1200h AX=1200H (2)mov ax,bx AX=0100H (3)mov ax,[1200h] AX=4C2AH ;偏移地址=1200h (4)mov ax,[bx] AX=3412H ;偏移地址=bx=0100h (5)mov ax,[bx+1100h] AX=4C2AH ;偏移地址=bx+1100h=1200h (6)mov ax,[bx+si] AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h (7)mov ax,[bx][si+1100h] AX=65B7H ;偏移地址 bx+si+1100h=0100h+0002h+1100h=1202h 〔习题2.2〕指出下列指令的错误 (1)mov cx,dl 两操作数类型不匹配 (2)mov ip,ax IP指令指针禁止用户访问 (3)mov es,1234h 立即数不允许传给段寄存器(DS、CS、SS、ES) (4)mov es,ds 段寄存器之间不允许传送 (5)mov al,300 两操作数类型不匹配 (6)mov [sp],ax 目的操作数应为[ SI ] (7)mov ax,bx+di 源操作数应为[BX+DI] (8)mov 20h,ah 立即数不能作目的操作数 〔习题2.8〕请分别用一条汇编语言指令完成如下功能: (1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。 (2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 (3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。 (4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。 (5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。 (1)ADD DX,BX (2)ADD AL,byte ptr [BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H

相关主题
文本预览
相关文档 最新文档