实验二内存操作数及寻址方法

合集下载

指出下列指令中源操作数和目的操作数的寻址方式

指出下列指令中源操作数和目的操作数的寻址方式

1.指出下列指令中源操作数和目的操作数的寻址方式:(1) MOV SI,1000(2) MOV BP,AX(3) MOV [SI],1000(4) MOV BP,[AX](5) AND DL,[BX + SI + 20H](6) PUSH DS(7) POP AX(8) MOV EAX,COUNT[EDX*4](9) IMUL AX,BX,34H(10) JMP FAR PTR LABEL2.指出下列指令语法是否正确,若不正确请说明原因。

(1) MOV DS,0100H(2) MOV BP,AL(3) XCHG AX,2000H(4) OUT 310H,AL(5) MOV BX,[BX](6) MOV ES:[BX + DI],AX(7) MOV AX,[SI + DI](8) MOV SS:[BX + SI + 100H],BX(9) AND AX,BL(10) MOV DX,DS:[BP](11) MOV [BX],[SI](12) MOV CS,[1000](13) IN AL,BX3.设DS = 2000H,BX = 1256H,SI = 528FH,偏移量 = 20A1H,[232F7H] = 3280H,[264E5] = 2450H。

若独立执行下述指令后,请给出对应IP寄存器的内容。

(1) JMP BX;IP=?(2) JMP [BX][SI];IP=?4.32位机中,当用MOVZX和MOVSX指令时,传送执行后,结果有什么区别?试以传送80H为例说明之。

6.有如下程序:MOV AL,45HADD AL,71HDAAMOV BL,ALMOV AL,19HADC AL,12HDAAMOV BH,AL执行后,BX =?标志位PF =?CF =?7.执行下列程序段,指出此程序段功能。

(1) MOV CX,10LEA SI,FirstLEA DI,SecondREP MOVSB(2) CLDLEA DI,ES:[0404H]MOV CX,0080HXOR AX,AXREP STOSW8.试用指令实现:(1) AL寄存器低4位清0;(2) 测试DL寄存器的最低2位是否为0,若是,则将0送入AL寄存器;否则将1送AL 寄存器。

所有实验电子版报告

所有实验电子版报告

实验报告课程:汇编语言上机实验专业:电子信息科学与技术班级:11电子1班学号:119050244098姓名:徐睿昀物理与电子信息学院目录实验一 DEBUG常用命令及8086指令使用 (1)实验二内存操作数及寻址方法 (5)实验三汇编语言程序上机过程 (10)实验四数据串传送和查表程序 (13)实验五屏幕字符显示程序 (19)实验六屏幕字符显示程序 (23)实验七分枝程序 (27)实验八多重循环程序 (33)实验九子程序 (37)汇编语言程序设计实验报告1学号:119050244098 姓名:徐睿昀实验日期:2013 10 20 实验名称:实验一 DEBUG常用命令及8086指令使用实验目的:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。

3、ASCII码及用16进制数表示二进制码的方法。

4、8086寄存器: AX,BX,CX,DX,F,IP。

实验内容:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。

2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。

指令的寻址方式

指令的寻址方式

指令的寻址⽅式什么是寻址⽅式汇编指令由操作码字段和操作数字段构成。

对于双操作指令,第⼀个操作数称为⽬的操作数,表⽰操作后的结果;第⼆个操作数称为源操作数,表⽰来源操作数。

两者以逗号分隔。

如:寻址⽅式,通俗地说就是寻找操作数地址的⽅法。

寻址⽅式的数量代表了微机系统对存储器管理能⼒的强弱,合理地使⽤寻址⽅式可以扩⼤访存空间,缩短指令长度,满⾜各种程序设计需要。

与数据有关的寻址⽅式划分为三类:⽴即寻址⽅式,寄存器寻址⽅式,存储器寻址⽅式。

七种与数据有关的寻址⽅式要求掌握下列七种与数据有关的寻址⽅式。

其中后五种属于存储器寻址⽅式。

⽴即寻址⽅式(Immediate addressing)寄存器寻址⽅式(Register addressing)直接寻址⽅式(Direct addressing)寄存器间接寻址⽅式(Register indirect addressing)寄存器相对寻址⽅式(Register relative addressing)基址变址寻址⽅式(Based indexed addressing)相对基址变址寻址⽅式(Relative based indexed addressing)选择寻址⽅式有两条原则:第⼀实⽤,第⼆有效。

最终都应达到运⾏速度快、指令代码短的⾼效率⽬标程序的⽬的。

⽴即寻址和寄存器寻址⽆论从指令长度和指令执⾏时间都⽐存储器寻址要好,但是也要根据具体情况选⽤。

学会使⽤寻址⽅式是理解指令作⽤的关键。

1. ⽴即寻址⽅式所要找的操作数直接写在指令中,这种操作数叫⽴即数。

在8086、80286中⽴即数是8位或16位的,在80386以上可以是32位的⽴即数。

⽴即寻址⽅式⽤来表⽰常数。

在DEBUG下数据都是⼗六进制表⽰的,因此不需要⽤H标注,同时要把⼗进制变为⼗六进制才⾏。

在DEBUG下执⾏:-AMOV AX,3060MOV AL,5MOV BL,FFMOV BX,A46DMOV CX,17接着⽤T命令单步执⾏,观察各寄存器的值。

第3章 8086的指令系统—3.1寻址方式

第3章 8086的指令系统—3.1寻址方式
EA=[基址寄存器]+([变址寄存器] *比例因子)+位移量 BX,BP SI,DI 1 0,8,16
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式

第2章寻址方式

第2章寻址方式
22
第十九页,编辑于星期二:十九点 四十一分。
寄存器间接寻址方式举例 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 —— 目的操作数 / 源操作数

寻址方式

寻址方式

寻址方式在存储器中,操作数或指令字被写入或读出。

有地址规范,关联存储和堆栈访问。

几乎所有计算机都在内存中使用地址指定。

当采用地址指定方法时,形成操作数或指令地址的方法称为寻址方法。

寻址模式分为两种,即指令寻址模式和数据寻址模式。

前者相对简单,而后者则更为复杂。

值得注意的是,在传统设计的计算机中,指令的寻址和存储器中的数据的寻址是交替的。

指令的寻址方式有以下两种折叠顺序寻址方式由于指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令地顺序进行。

也就是说,从存储器取出第1条指令,然后执行这条指令;接着从存储器取出第2条指令,再执行第二条指令;接着再取出第3条指令。

这种程序顺序执行的过程,称为指令的顺序寻址方式。

为此,必须使用程序计数器(又称指令计数器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。

折叠跳跃寻址方式当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。

所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。

注意,程序跳跃后,按新的指令地址开始顺序执行。

因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。

采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。

指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。

注意是否跳跃可能受到状态寄存器的操作数的控制,而跳跃到的地址分为绝对地址(由标记符直接得到)和相对地址(对于当前指令地址的偏移量),跳跃的结果是当前指令修改PC程序计数器的值,所以下一条指令仍是通过程序计数器PC给出。

汇编语言--操作数的寻址方式(三)

汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。

如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。

在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。

所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。

在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。

操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。

微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。

其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。

另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。

为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。

1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。

⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。

如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。

例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。

以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。

该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。

⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。

图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。

简述计算机指令的寻址方式

简述计算机指令的寻址方式

简述计算机指令的寻址方式
计算机指令的寻址方式是指指令通过哪种方式来访问和处理操作数。

常见的计算机指令的寻址方式包括以下几种:
1. 直接寻址:指令中给出了操作数的地址,直接通过该地址访问操作数。

2. 即时寻址:指令直接给出了操作数的值,而不必访问内存。

3. 寄存器寻址:指令中给出了一个寄存器的编号,操作数存储在该寄存器中。

4. 寄存器间接寻址:指令中给出了一个寄存器的编号,该寄存器中存储了操作数在内存中的地址,需要通过寄存器访问内存。

5. 相对寻址:指令中给出了与指令本身相对地址的偏移量,操作数的地址通过指令本身相对地址加上偏移量得到。

6. 基址寻址:指令中给出了一个基址寄存器的编号和一个偏移地址,操作数的地址通过基址寄存器和偏移地址结合得到。

7. 变址寻址:指令中给出了一个变址寄存器的编号和一个偏移地址,操作数的地址通过变址寄存器和偏移地址结合得到。

8. 相对寄存器寻址:指令中给出了一个相对寄存器的编号,操作数的地址通过相对寄存器和指令中的寄存器的值结合得到。

以上是常见的计算机指令的寻址方式,不同的计算机体系架构可能支持不同的寻址方式,寻址方式的选择取决于具体的指令集设计和计算机架构设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 内存操作数及寻址方法
实验目的:
通过实验掌握下列知识:
1、DEBUG命令:G,N,W,L及Q。
2、8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
3、8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。
4、8088汇编语言伪操作:BYTE PTR,WORD PTR。
5、求累加和程序和多字节加减法程序。
实验内容和步骤:
一、内存操作数及各种寻址方式使用:
内容:
MOV AX,1234
MOV [1000],AX
MOV BX,1002
MOV BYTE PTR[BX],20
MOV DL,39
INC BX
MOV [BX],DL
DEC DL
MOV SI,3
MOV [BX+SI],DL
MOV [BX+SI+1],DL
MOV WORD PTR[BX+SI+2],2846
步骤:
1)用A命令键入上述程序,并用T命令逐条运行。
2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是
什么寻址方式。
注意D命令显示结果中右边的ASCII字符及双字节数存放法。
思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。
答:不行。
二、求累加和程序:
程序:
MOV BX,1000
MOV CX,10
SUB AX,AX
LOP: ADD AL,[BX]
ADC AH,0
INC BX
J: LOOP LOP
INT3
步骤:
1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,
在键入LOOP指令时LOP用实际地址值代替。-A 100
2)用命令N AA将此程序命名为文件AA(文件名可任取)。
3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开
始地址)
4)用命令W 100将此程序存到AA命名的磁盘文件中。
5)用命令Q退出DEBUG。
6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。
若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。
-U
1477:0100 BB0010 MOV BX,1000
1477:0103 B91000 MOV CX,0010
1477:0106 29C0 SUB AX,AX
1477:0108 0207 ADD AL,[BX]
1477:010A 80D400 ADC AH,00
1477:010D 43 INC BX
1477:010E E2F8 LOOP 0108
1477:0110 CC INT 3
1477:0111 68 DB 68
1477:0112 69 DB 69
1477:0113 7320 JNB 0135
1477:0115 69 DB 69
1477:0116 7320 JNB 0138
1477:0118 61 DB 61
1477:0119 207361 AND [BP+DI+61],D
1477:011C 3400 XOR AL,00
1477:011E 66 DB 66
1477:011F 1421 ADC AL,21
--E1000
1477:1000 34.
7)用E命令在内存地址1000H处键入16个数字。
-E1000
1477:1000 34.36 12.12 20.15 00.45 00.55 00.54 00.89 00.02
1477:1008 00.89 00.44 00.47 00.44 00.48 00.89 00.89 00.74
1477:1010 00.

8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查
AX,BX的值是否符合你的预计值。
-G=100 108

AX=0000 BX=1000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1477 ES=1477 SS=1477 CS=1477 IP=0108 NV UP EI PL ZR NA PE NC
1477:0108 0207 ADD AL,[BX] DS:1000=36

9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,
若不一样,检查程序是否有错。
--T

AX=0036 BX=1000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1477 ES=1477 SS=1477 CS=1477 IP=010A NV UP EI PL NZ NA PE NC
1477:010A 80D400 ADC AH,00

10)重复G J与T,再检查AX是否正确。
--G 108

AX=0036 BX=1001 CX=000F DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1477 ES=1477 SS=1477 CS=1477 IP=0108 NV UP EI PL NZ NA PO NC
1477:0108 0207 ADD AL,[BX] DS:1001=12
-T

AX=0048 BX=1001 CX=000F DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1477 ES=1477 SS=1477 CS=1477 IP=010A NV UP EI PL NZ NA PE NC
1477:010A 80D400 ADC AH,00

11)用G命令使程序运行到结束,检查AX值是否正确。
--G

AX=04FC BX=1010 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1477 ES=1477 SS=1477 CS=1477 IP=0110 NV UP EI PL NZ AC PO NC
1477:0110 CC INT 3
-G

三、多字节加法程序。
程序:
MOV DI,1000
MOV CX,8
MOV SI,2000
CLC
LOP: MOV AL,[SI]
ADC [DI],AL
INC SI
INC DI
LOOP LOP
INT 20
步骤:
1)用A命令键入此程序。

2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均
为低字节在前面。
3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?
答:正确,结果已存入内存。如下图:

4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。
答:改成3将显示当前所有寄存器和标志位的内容、以及下一条将要执行的指令,如上图。
不加此指令也一样,如下图:

实验心得:
1、 通过本次实验,首先了解到了N命令给程序文件命名、W命令存盘及Q命令退出
DEBUG ;
2、 对G命令也有了新的认识,如G命令等号后的地址指定程序段运行的起始地址。
3、 为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符
PTR。
4、 通过本次实验,更加了解到了中断指令INT使用。该指令执行完后,CPU将转去
执行中断服务程序。程序遇到断点(INT3),停止执行,并显示当前所有寄存
器和标志位的内容、以及下一条将要执行的指令,以便观察程序运行到此的情况。
程序正常结束,将显示“Program terminated normally”。

相关文档
最新文档