【VIP专享】汇编程序设计--内存操作数及寻址方法 实验报告

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

《汇编语言程序设计》

实验报告

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

实验目的

通过实验掌握下列知识:

1、DEBUG命令:A,T,D,F,G;

2、数据在内存中的存放方式和内存操作数的几种寻址方式;

3、汇编指令:INC,DEC,LOOP,INT 3的应用;

4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。

实验内容和步骤

一、内存操作数及各种寻址方式使用

程序内容:寻址方式:

MOV AX,2000

MOV [200],AX ;直接寻址

MOV BX,210

MOV BYTE PTR[BX],50 ;寄存器间接寻址

MOV CL,40

INC BX

MOV [BX],CL ;寄存器间接寻址

DEC CL

MOV SI,5

MOV [BX+SI],CL ;基址加变址寻址

MOV [BX+SI+1],CL ;基址变址相对寻址

MOV WORD PTR[BX+SI+2],1234 ;基址变址相对寻址

操作步骤

1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。

注:D命令显示结果时,双字节数在内存的存放是高地址对应高数据位;

指令中出现的BYTE PTR及WORD PTR是因为操作数的宽度必须一致。

图 2-1 键入程序

图2-2 U命令查看程序

图2-3 T命令逐条运行,用D命令检查有关内存单元的内容相对应的寻址方式见程序处标注。

二、求累加和程序

程序内容:

MOV BX,200

MOV CX,9

XOR AX,AX

ADD AL,[BX] ;按字节相加

ADC AH,0 ;若有进位则到AH中

INC BX

LOOP 108

INT3

操作步骤:

1)进入DEBUG环境。

2)用命令F 200 L10 40 在内存200H-20FH地址处填入一系列值40H。

图 2-4 用命令F 200 L10 40 在内存200H-20FH地址处填入40H并查看3)用命令A 100 将上述程序键入到100H开始的内存中。

图2-5 键入程序

图2-6 U命令查看键入的程序

注:LOOP指令用到108H号地址,即为ADD指令的当前地址,构成一个循环。

4)用命令G =100 执行该程序段,程序运行后停在INT 3 指令上,此时观察AX寄存器的值为240H,即为9个40H的和。

运行命令 G(Go)从指定地址处开始运行程序,直到遇到断点或者程序正常结束。

G [=地址] [断点地址1,断点地址2,...,断点地址10]

G 命令等号后的地址指定程序段运行的起始地址,如不指定则从当前的CS : IP 开始运行。断点地址如果只有偏移地址,则默认是代码段CS;断点可以没有,但最多只能有10个。

图2-7 GO命令运行

注:INT 3指令是一条断点中断指令,程序遇到该指令则停止。

5)用T =100命令单步执行,观察IP、CX及AX寄存器的值,分析程序执行过程。

图 2-8 BX置为0200

图 2-9 CX置为0009

图 2-10 AX清零

图 2-11 寄存器间接寻址,(AL)=00H与[ BX]=40相加

图 2-12 AH进位加

图 2-13 BX增加一

图 2-14 开始进行循环: ADD AL,[BX]; ADC AH,0; INC BX

………

………

图 2-15 循环过程,AX加40H循环了9次

程序运行后停在INT 3 指令上,此时(AX)=240。

三、实验体会

1. D命令显示结果时,双字节数在内存的存放是高地址对应高数据位;

2. 为了使指令中存储单元操作数具有明确的属性,我们可以使用强制属性操作符PTR。其一般格式为:

数据类型PTR 地址表达式

其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等;在指令中用操作符PTR强制后,不管其后的地址表达式原数据类型是什么,在本指令中就以PTR前面的类型为准。该强制属性只在本指令有效,是一种临时性的属性,它不会改变原内存单元的定义属性;

3. G 命令等号后的地址指定程序段运行的起始地址;

4.中断指令INT:断指令INT的一般格式如下:INT Imm

其中:立即数Imm是一个0~0FFH范围内的整数。该指令执行完后,CPU将转去执行中断服务程序。程序遇到断点(实际上就是断点中断指令INT 3),停止执行,并显示当前所有寄存器和标志位的内容、以及下一条将要执行的指令(显示内容同R命令),以便观察程序运行到此的情况。程序正常结束,将显示“Program terminated normally”;

5.在作单步操作或用G 命令设段点操作时,在暂停处,可以检查所有寄存器和有关内存单元的内容,这不会影响程序的继续执行;

6.若想把源数据块重新换一批数据,可以用DEBUG 的Fill命令填充新的数据。例如:

-F1000:00 L1F 33↙从1000:0000H 开始的31 个字节被替换成33H。

相关文档
最新文档