汇编实验报告一 熟悉7种寻址方式
认识8086的寻址方式

实验报告
实验题目: 认识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)小结
对这几个字母的作用不太了解。
程序也有一些看不懂。
实验二 汇编语言数据的寻址方式与定义

.code
start:
mov eax,dword ptr array
mov ebx,type bvar
mov ecx,type wvar
mov edx,type dvar
mov esi,lengthof array
mov edi,sizeof array
mov ebp,arr_size
bvar3byte ?
bvar4byte 5 dup ('$')
bvar5byte minint dup(0),minint dup(minint,?)
byte 2 dup(2,3,2 dup(4))
.code
start:
exi:include io32.inc
.data
bvar6byte 39h,31h,32h,38h
byte 0
.code
start:
mov eax,offset wvar6
call dispmsg
exit 0
end start
运行结果:
4:
include io32.inc
.data
minint= 10
dvar1dword 0,80000000h,0ffffffffh,-80000000h,0,7fffffffh
3.将教材P65页[例3-1]编写为完整程序,上机调试并运行。
4.将教材P67页[例3-2]编写为完整程序,上机调试并运行。
5.将教材P67页[例3-3]编写为完整程序,上机调试并运行。
6.将教材P68页[例3-4]编写为完整程序,上机调试并运行。
7.将教材P70页[例3-5]编写为完整程序,上机调试并运行。
第2章寻址方式

第十九页,编辑于星期二:十九点 四十一分。
寄存器间接寻址方式举例 1
例9. MOV AX,[BX]
; AX ? (DS:[BX] )
注意它与寄存器寻址方式在形式上的区别:
MOV AX ,BX
;(AX) ? (BX)
源操作数的物理地址为:
PA = (DS) × 10H +(BX) 若(DS)= 3000H,(BX)= 78H, (30078H)= 12H 则:PA =3000H ×10H+78H =30078H
找到操作数 ;
? 数据寻址方式以 MOV DST ,SRC 为例讨论。
7
第六页,编辑于星期二:十九点 四十一分。
计算机中操作数保存的地点
1.指令中 2.CPU 的寄存器中 3.存储器中 4.I/O接口寄存器中
4. 在访问I/O 的专用 指令中指定接口中寄 存器的端口号。
1.由程序员直接写在指令中
2. 在指令中指定寄存器名
地址是什么。。。
?操作码 域:指定要完成的操作。
?操作数 2:源操作数 ,表示参与指令操作的一个对象;
?操作数 1:目的操作数 ,它不仅可以作为指令操作的一
个对象,还可以用来存放指令操作的结果。
?分号后的内容是对指令的解释。
例: MOV AH , 10
; (AH)= 10
2
第二页,编辑于星期二:十九点 四十一分。
即用寄存器存放源或目的操作数。
? 存储器操作数
存储器操作数是指操作数存放在主存储器中。
因此在汇编指令中应给出的是存储器的地址。
5
第四页,编辑于星期二:十九点 四十一分。
指令操作数的表达
? r8 —— 任意一个 8位通用寄存器 ? r16—— 任意一个 16位通用寄存器 ? reg—— 代表r8或r16 ? seg—— 段寄存器 CS/DS/ES/SS ? m8 —— 一个 8位存储器操作数单元 ? m16—— 一个16位存储器操作数单元 ? mem—— 代表 m8或m16 ? i8 —— 一个 8位立即数 ? i16 —— 一个 16位立即数 ? imm —— 代表i8或 i16 ? dst /src —— 目的操作数 / 源操作数
如何掌握汇编语言的寻址方式

如何掌握汇编语言的寻址方式陕西理工学院 潘继强[摘 要]寻址方式在汇编语言中占有极其重要的地位,可以说寻址方式是学习汇编这门低级语言的入场卷,往往也是学习过程中遇到的瓶颈问题。
本文通过分析比较基本概念,浅谈了采用比较法学习寻址方式,并通过具体实例来阐述用不同寻址方式实现对内存的访问。
[关键词]汇编语言 寻址方式 有效地址 比较法 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言,因而对于程序的空间和时间要求很高的场合,汇编语言是必不可少的。
汇编语言程序设计是高等院校计算机专业学生必修的主干课程之一,是《计算机组成原理》、《单片机》等专业课程的先修课。
但汇编语言是一种面向机器的低级语言,它要求学生除了了解计算机硬件,还要能够熟悉并灵活地应用机器所采用的各种寻址方式及计算机的指令系统,这对运用汇编语言进行程序设计是至关重要的。
而寻址方式又是学习汇编语言刚开始就遇到的重点和难点部分,是学习后面指令和程序的基础。
在教学过程中,通常选用Intel80X86CPU的PC机为基础机型来组织教学,它提供了十种与数据有关的寻址方式,其中几种寻址方式概念相似,学生普遍反映不好理解,极其容易混淆,编程时不知如何使用。
针对这种情况,在具体教学中借助比较的方法来提高学生的辨析能力,并配以例题让学生掌握寻址方式的异同及编程时的具体运用,以达到综合应用所学的概念编程解决实际问题。
我们知道分析、比较与综合是思维的基本过程,也是重要的逻辑思维方法。
根据汇编抽象的特点,应用“比较法”进行学习,可以明确概念的本质,区分容易混淆的问题,达到举一反三的效果,以便更好地掌握基本概念。
在学习Intel80X86微处理器中的寻址方式时,涉及到的寻址方式有以下十种:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址、比例变址寻址、基址比例变址寻址、相对基址比例变址寻址(后面三种寻址方式均与比例因子有关,这些寻址方式只能在80386及其后继机型中使用)。
第三章 寻址方式及指令系统 (1)

错:MOV 错:MOV
(特别注意CS不类型由UR决定,若变量与UR类型不一致,则需类型转换 例3.13: MOV [20H], AL MOV [BX], BX MOV ES: [BP], CX MOV A, DX ; A为字变量 错:MOV A, DL ;A为字变量,应为上句或MOV
直接寻址方式
操作数在存储器中
指令中直接包含有操作数的有效地址,即EA=n。主要有常数、 常量或常数表达式+[]以及变量名或变量名加减常量形成的 表达式。 默认的段地址在段寄存器DS中 可使用段超越 例3.3:(第二操作数为直接寻址方式) MOV AX,[2000H]
MOV
MOV
BX, [N]
MOV BX, [BP] MOV SP, SS: [DI]
相对寻址方式
操作数在存储器中
有效地址=BX/BP/SI/DI+位移量
位移量可以是常数、常量、常数表达式以及变量名等。 可使用段超越
基址变址寻址方式
操作数在存储器中 操作数的有效地址由基址寄存器(BX或BP)的内容和变址 寄存器(SI或DI)的内容相加得到 BX基址寄存器对应的默认段寄存器是DS,BP基址寄存器对 应的默认寄存器是SS 可使用段超越
例3.8: IN AX,41H OUT DX,AL ;41H为端口直接寻址 ;DX为端口间接寻址
转移指令的寻址方式
程序的顺序执行:指令指针IP会自动加1移向下一条指令, 程序转移实质上是使指令指针指向待转移到的指令处。
在8088/86中,除了指令指针还会涉及到代码段寄存器CS。CS: IP是控制程序执行流程的段地址:段内偏移。所以86系列微机中, 转移指令实质上是对CS:IP的值进行改变。 CS:IP值改变的方式就叫转移寻址方式。 具体过程参看“转移指令”
51系列单片机的寻址方式

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系列单片机寻址方式

程序存储器
SFR
PC
10010011 操作码 A
1XEXH
030FH
XX
DPH 02H 02F1H DPL F1H
ALU
02F1H +1EH=030FH
7
6、相对寻址(一)
相对寻址以PC当前值(PC当前值是执行完指令后的值,也就 是当前指令的PC值+指令所占的字节数)作为基地址,与指令 中给定的偏移量rel相加,所得的结果作为程序的转移地址, 指令中的偏移量rel是一个用补码表示的8位带符号数。相对 寻址用于相对转移指令中,如:
MCS-51系列单片机寻址方 式
寻址方式:计算机指令中操作数(按地址)获取的方式 MCS-51系列单片机提供了7种寻址方式,如果一条指令 中包含多个操作数,就可能用到一种以上的寻址方式
1、立即寻址 2、直接寻址 3、寄存器寻址 4、寄存器间接寻址 5、变址寻址 6、相对寻址 7、位寻址
1
1、立即寻址(一)
8
6、相对寻址(二)
程序存储器
PC 0100H PC+1 0101H PC+2 0102H
60H 30H
操作码
偏移量 rel=30H
PC 01032H
PC 0123H XX
ALU 0102H +30H= 0132H
9
7、位寻址
MCS-51系列单片机中有专用的位运算指令,可以对位寻址区的每一 个位进行数据传送、逻辑运算等操作,如:
R5 XX
A XX
5
4、寄存器间接寻址
在指令的操作码中包含了某一工作寄存器的地址(可用作地 址指针的工作寄存器是@Ri:R0、R1),而操作数地址则存 放在该寄存器中,如:
汇编寻址方式总结

立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那 么,它将按“高高低低”的原则进行存储。例如:
MOV AH, 80H MOV B1, 12H
ADD AX, 1234H MOV W1, 3456H
MOV ECX, 123456H ADD D1, 32123456H
另外,在32位微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式—— 32位地址的寻址方式。 为了表达方便,我们用符号“(X)”表示X的值,如:(AX)表示寄存器AX的值。
1、立即寻址方式
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称 为立即数寻址方式。
操作数的寻址方式
操作数是指令或程序的主要处理对象。如果某条指令或某个程序不处理任何操作数,那么, 该指令或程序不可能有数据处理功能。在CPU的指令系统中,除NOP(空操作指令)、HLT(停 机指令)等少数指令之外,大量的指令在执行过程中都会涉及到操作数。所以,在指令中如何 表达操作数或操作数所在位置就是正确运用汇编指令的一个重要因素。
其中:内存单元B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指令中的第二 操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。图3.1是指令“MOV AX, 4576H” 存储形式和执行示意图。
2、寄存器寻址方式
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使 用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 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 页