当前位置:文档之家› 汇编语言---操作数寻址方式

汇编语言---操作数寻址方式

汇编语言---操作数寻址方式
汇编语言---操作数寻址方式

汇编语言---操作数寻址方式

ASM 2009-07-13 19:37:23 阅读16 评论0 字号:大中小订阅

操作数是指令或程序的主要处理对象.汇编语言指令的操作数的个数可以是0、1、2;即:汇编指令可以没有操作数,可以只有一个操作数,也可以有两个操作数;在CPU的指令系统中,除了NOP(空操作指令)、HLT(停机指令)等少数指令之外,大量的指令在执行的过程中都会涉及到操作数;所以,在指令中如何表达操作数或操作数所在位置是正确运用汇编指令的重要因素之一;

在指令中,指定操作数或操作数存放位置的方法称为寻址方式;操作数的各种寻址方式是使用汇编语言进行程序设计的基础;

一、16位地址的寻址方式

CPU中有7中基本的寻址方式:立即数寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式;其中,直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式,这5种寻址方式是确定存储单元有效地址的5种不同的计算方法,用它们可以方便地实现对数组元素的访问;由于总线接口单元BIU能根据需要自动引用段寄存器得到段值,所以这5种方式也就是确定存放操作数的存储单元的有效地址的方法;有效地址EA 就是段内偏移地址,是一个16位的无符号整数,在利用者5种方法计算有效地址时,所得到的结果也被认为是一个16位的无符号整数; 除了这些基本的寻址方式外,还有固定寻址和IO端口寻址,等等;另外,在32位CPU中,为了扩大对存储单元的寻址能力,增加了一种新的寻

址方式---32位地址的寻址方式;

1、立即数寻址方式:

操作数作为指令的一个组成部分而直接写在指令中,这种操作数称为立即数,这种寻址方式称为立即数寻址方式;立即数,可以理解为常数;

如:123、"abc"、false、true,等等;这种数跟在操作码后面,与指令一起存放在代码段中;

立即数可以是8位、16位.如果立即数是16位的,那么将按照"高高低低"的顺序原则存放,即:高字节存放在高地址存储单元中,低字节存放

在低地址存储单元中;例如:

MOV AH,08H ADD AX,1234H MOV ECX,123456H

MOV B1,12H MOV W1,3456H ADD D1,32123456H

其中,B1、W1、D1分别是字节、字、双字存储单元;指令中,逗号前面的操作数称为第一操作数,逗号后面的字面数值称为是第二操作数,在这里,这些第二操作数就是立即数(常数).在汇编语言中,规定:立即数不能作为指令中的第一操作数.该规定与高级语言中"赋值语句的左

边不能是常量"的规定一致;立即数常用于对寄存器或存储单元赋初值;

立即数寻址方式的图示:

2、寄存器寻址方式:

指令所需要的操作数已经存储在寄存器中,或者把目标操作数存入寄存器中,而在指令中仅仅指出所使用的寄存器既可;这种在指令中指出

所使用寄存器的寻址方式称为寄存器寻址方式;

指令中可以引用的寄存器机器符号名称如下:

8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL,等等;

16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP、CS、DS、ES、SS、FS、GS等等;

32位寄存器:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP等等;

寄存器寻址方式是一种简单快捷的寻址方式,源操作数和目的操作数都可以是寄存器;

A.源操作数是寄存器的寻址方式,如:

ADD VARD,EAX ADD VARW,AX ADD VARB,BH

其中,VARD、VARW、VARB分别是双字变量、字变量、字节变量;

B.目的操作数是寄存器的寻址方式,如:

ADD BH,78H ADD AX,1234H MOV EBX,12345678H

C.源操作数和目的操作数都是寄存器的寻址方式,如:

MOV EAX,EBX MOV AX,BX MOV DH,BL

由于指令所需要的操作数都已经存储在寄存器中,或者操作的结果都被存入到寄存器中,这样,在指令执行过程中,就不会再去读写存储器单元,会减少读写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度.

3、直接寻址方式:

操作数存放在存储单元中,该存储单元的有效地址作为指令的一个组成部分;这种寻址方式称为直接寻址方式;即:指令所需要的数据存放在一个存储器单元中,而指令中直接包含该存储器单元的有效地址EA(也就是该操作数的有效地址);通常情况下,操作数一般存放在数据段中,所以,操作数的物理地址将由数据段寄存器DS的值加上指令中给出的16位有效地址EA得出,但是,如果使用段超越前缀,那么,操作数

则可以存放在其他段中;

由于数据段的段寄存器默认为DS,所以,如果要指定访问其它段内的数据,则可在指令中使用段超越前缀的方式显示地书写出来;下面指令

的目的操作数就是带段超越前缀的直接寻址方式:

MOV ES:[1000H],AX ;"ES:"就是段超越前缀的标识,表示访问的是附加段寄存器中的存储器单元;

直接寻址方式常用于处理存储器单元的数据,其操作数是内存变量,该寻址方式可在64K字节的段内进行寻址;直接寻址方式的操作数通常

是程序使用的变量;

注意:直接寻址方式与立即数寻址方式的书写格式不同,直接寻址的有效地址要写在方括号"[]"中,而立即数寻址方式则直接写出立即数;

在程序中,直接地址通常用内存变量名来表示;例如,指令"MOV BX,VARW"中的VARW就是内存变量名,它表示一个直接地址;

比较一下指令汇总原操作数的寻址方式(VARW是内存变量):

MOV AX,1234H MOV AX,[1234H] ;前者是立即数寻址,后者是直接寻址;

MOV AX,VARW MOV AX,[VARW] ;两者等效,均为直接寻址;内存变量名就表示直接地址;

直接寻址方式的图示:

4、寄存器间接寻址方式:

操作数在存储器单元中,操作数的有效地址EA存放在SI、DI、BX、BP这四个寄存器中的一个寄存器中;称这种寻址方式为寄存器间接寻址方式;一般情况下(即:不使用段超越前缀明确指定段寄存器时),如果操作数的有效地址EA存放在SI、DI、BX中,则以数据段寄存器DS的值作为操作数的段地址;如果操作数的有效地址EA存放在BP中,则以堆栈段SS的值为段地址;

寄存器间接寻址方式下,操作数的物理地址的计算方法如下:

PA = ([DS]/[SS]/[ES])×16 + ([SI]/[DI]/[BX]/[BP]);

寄存器间接寻址方式存取存储器单元的PA的计算方法如图所示:

寄存器间接寻址方式存取存储器单元的原理如图所示:

寄存器间接寻址方式存取存储器单元的样例如图所示:

注意:寄存器间接寻址方式下书写指令时,寄存器名一定要写在方括号"[]"中;下面两条指令的目的操作数的寻址方式完全不同:

MOV [SI],AX ;目的操作数为寄存器间接寻址

MOV SI,AX ;目的操作数为寄存器寻址

例如:

下面指令中的源操作数采用的就是寄存器间接寻址方式,并且使用段超越前缀:

MOV DL,CS:[BX] ;引用的是代码段寄存器CS

下面指令中的目的操作数采用的就是寄存器间接寻址方式,由于使用的是指针寄存器BP,所以,缺省的段寄存器就是堆栈段寄存器SS:

MOV [BP],CX ;引用的段寄存器是堆栈段寄存器SS

5、寄存器相对寻址方式:

操作数存放在存储器单元中,操作数所在的存储器单元的有效地址是一个基址寄存器(BX/BP)或变址寄存器(SI/DI)的值与指令中的8位/16

位偏移量之和;其有效地址的计算公式如下:

EA = ([BX]/[BP]/[SI]/[DI]) + (8位/16位偏移量);

物理地址PA的计算公式如下: PA = 段地址×16 + EA;

一般情况下(不使用段超越前缀明确指定段寄存器),如果SI/DI/BX的值是有效地址EA的一个组成部分,则引用的段寄存器就是数据段寄存器DS;如果BP的值作为有效地址EA的一个组成部分,则引用的段寄存器就是堆栈段寄存器SS;

指令中的8位/16位的偏移量采用补码的形式表示,因为这个8位/16位的偏移量可以是正数也可以是负数;在计算有效地址EA时,如果位移量是8位的,则被带符号扩展成16位.如果所得的有效地址超过FFFFH,则取其64K的模;

例如: MOV AX,[DI+1223H] ;DI是变址寄存器,1234H就是那个8位/16位的偏移量

寄存器相对寻址方式存取存储器单元的EA和PA的计算方法如图所示:

寄存器相对寻址方式存取存储器单元的样例如图所示:

例如:

下面指令中的源操作数采用的就是寄存器相对寻址方式,8位/16位偏移量是4,引用的是堆栈段寄存器SS:

MOV BX,[BP+4]

下面指令中的目的操作数采用的是寄存器相对寻址方式,引用的附加段寄存器ES:

MOV ES:[BX+5],AL

这种方式可以很方便地实现类似于高级语言中对结构或记录等数据类型的方访问;

注意:书写寄存器相对寻址的指令时,基址或变址寄存器名一定要写在方括号"[]"中,而8位/16位偏移量可不用写在方括号中;比如下面的

两条指令就是等效的指令:

MOV AX,[SI+4]

MOV AX,4[SI]

6、基址加变址寻址方式:

操作数在存储器单元中,操作数所在的存储器单元的有效地址EA是一个基址寄存器(BX/BP)与一个变址寄存器(SI/DI)的的值的和;即:

有效地址EA = ([BX]/BP) + ([SI]/[DI])

在一般情况下(不使用段超越前缀明确指定段寄存器),如果BP的值是有效地址EA的一个组成部分,则引用的段寄存器就是堆栈段寄存器SS;如果SI/DI/BX的值是有效地址EA的一个组成部分,则引用的段寄存器就是数据段寄存器DS;如果所得有效地址EA的值超过FFFFH,则取其

64K的模;例如:MOV AX,[BX+DI]

基址加变址寻址方式存取存储器单元的EA和PA的计算方法如图所示:

基址加变址寻址方式存取存储器单元的样例如图所示:

例如:

下面指令的源操作数采用基址加变址寻址方式,并通过段超越前缀明确指定引用段寄存器ES:

MOV AX,ES:[BX+SI]

下面指令中的目的操作数采用基址加变址寻址方式,通过段超越前缀明确指定引用段寄存器DS:

MOV DS:[BP+SI],AL

基址加变址寻址方式适用于处理数组或表格.用基址寄存器BX/BP存储数组的首地址,而用变址寄存器SI/DI定位数组中的各个元素;反之也可以;由于两个寄存器都可以独立地改变,所以,能更加灵活地访问数组或表格中的元素;

下面两条指令等效:

MOV AX,[BX+DI]

MOV AX,[BX][DI]

7、相对基址加变址寻址方式:

操作数在存储器单元中,操作数所在的存储器单元的有效地址EA是一个基址寄存器(BX/BP)的值、一个变址寄存器(SI/DI)的值与指令中给

出的8位/16位偏移量的和;即:

EA = ([BX]/[BP]) + ([SI]/[DI]) + (8位/16位)偏移量

相对基址加变址寻址方式存取存储器单元的EA和PA的计算方法如图所示:

相对基址加变址寻址方式存取存储器单元的样例如图所示:

一般情况下(不使用段超越前缀明确指明段寄存器),如果BP的值是有效地址的一个组成部分,则缺省引用的段寄存器就是堆栈段寄存器SS;

如果SI/DI/BX的值是有效地址的一个组成部分,则缺省引用的段寄存器就是数据段寄存器DS;

指令中给出的8位/16位偏移量采用补码形式表示.在计算有效地址时,如果偏移量是8位的,那么被带符号扩展成16位;当所得的有效地址

超过FFFFH时,就取其64K的模;如:

MOV AX,[BX+DI-2]

从相对基址加变址寻址方式来看,相对基址加变址寻址是最复杂的,但也是最灵活的,它的可变因素比较多;

由于相对基址加变址方式的多样性,所以下面几条指令的效果是等价的:

MOV AX,[BX+DI+1234H]

MOV AX,11234H[BX+DI]

MOV AX,1234H[BX][DI]

MOV AX,1234H[DI][BX]

二、32位地址的寻址方式

32位CPU中,除了支持16位CPU中的7种寻址方式之外,又提供了一种更灵活、更方便,但也更复杂的寻址方式,从而使内存地址的寻址范

围得到了进一步扩大;

使用16位寄存器访问存储器单元时,只能使用基址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的组成部分,但是使用32位寄存器访问存储器单元的时候,不存在这种限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)都可以作为地址偏移量的

组成部分;

当使用32位地址偏移量进行寻址时,内存地址的偏移量可由三个部分组成:一个32位基址寄存器、一个可乘以1、2、4、8的32位变址寄存器、一个8位/32位的偏移量,并且这三个部分可以任意组合,可省去其中的一个或两个部分;

32位基址寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP;

32位变址寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、EBP(除ESP之外);

32位地址偏移量寻址时的有效地址EA和物理地址PA的计算方法如图所示:

例子:

MOV EAX,[123456H] MOV EAX,[EBX]

MOV EBX,[ECX*2] MOV EBX,[EAX+100H]

MOV EDX,[EAX*4+200H] MOV EBX,[EAX+EDX*2]

MOV EBX,[EAX+EDX*2+300H] MOV EAX,[ESP]

由于32位地址的寻址方式能使用所有的通用寄存器,所以,与该有效地址组合的段寄存器也有新的规定:

1、地址中寄存器的书写顺序决定该寄存器是基址寄存器还是变址寄存器;

如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器;而[EBP+EBX]中的EBX是变址寄存器,EBP是基址寄存器;(要与32位地址寻址

方式的有效地址EA的计算公式中的每

个参数对应)

2.默认段寄存器的选用取决于基址寄存器,即:EA中的第一个参数;

如:[EBX+EBP]中的基址寄存器是EBX,所以,默认选用的段寄存器就是数据段寄存器DS;[EBP+EBX]中的基址寄存器是EBP,所以,默认选用

的段寄存器就是堆栈段寄存器SS;

3.基址寄存器是EBP或ESP时,默认选用的段寄存器是堆栈段寄存器SS,否则,默认选用的段寄存器就是数据段寄存器DS;

4.在指令中,如果使用段超越前缀明确指明所使用的段寄存器时,则,明确指明的那个段寄存器优先使用;

几个32位地址寻址指令及其内存操作数的段寄存器的选用例子如图所示:

以上就是16位地址的寻址方式与32位地址的寻址方式的介绍、区别和用途;

寻址方式及指令系统习题与解答

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波2012年3月 一、单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为()。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为()。 A.13000H B.23000H C.33000H D.3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为()。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是()。 A.原码B.反码C.补码D.移码 5.用来作为寄存器间接寻址的寄存器有()个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是()。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是()。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生()。 A.无溢出且无进位B.无溢出但有进位

汇编语言内存操作数及寻址

实验一内存操作数及寻址 通过实验掌握下列知识: 80x86系统中数据在内存中的存放方式和内存操作数寻址方式。 80x86指令: MOV, ADD, SUB, ADC,SBB,INC, DEC, LOOP,CLC 伪指令与操作符: BYTE PTR, WORD PTR,OFFSET,SIZEOF。 简单字符串处理、多字节加减法。 一、内存操作数及各种寻址方式: 阅读下列程序段: ... ... .data wds WORD 1111h, 2222h, 3333h dwds DWORD 6 dup (0CDCDCDCDh) ... ... MOV AX, 1234h MOV EBX, OFFSET wds MOV [EBX], AX MOV BYTE PTR[EBX+2], 20h MOV DL, 39h MOV [EBX+4], DL ADD EBX, SIZEOF wds MOV ESI, 2 DEC DL MOV [EBX+ESI], DL DEC DL MOV [EBX+ESI+1], DL MOV WORD PTR[EBX+ESI+2], 1068h MOV DWORD PTR[EBX+ESI*4], 2846h 1)分析并写出每条指令执行的结果。 2)将程序补充完整,编译、连接后,单步执行,验证分析结果。 3) 说明程序中访问内存操作数的指令所使用的寻址方式,访问的内存地址,以及所访问的内存存储单元位数。 4)有关指令中BYTE PTR、WORD PTR、DWORD PTR伪指令不加会有何结果? 试一试。 二、阅读下列程序段: (指令CLC,Clear Carry Flag :清除进位标志) ...... MOV ECX,4 CLC L1:

汇编语言上机操作

汇编语言上机操作 一、建立子文件夹 如:D:\hb\masm 二、复制相关文件 把masm.exe、link.exe、ml.exe三个文件复制到上述文件夹中。 三、进入DOS方式 开始/运行/cmd 当前提示符可能是: C:\documents and settings\administrator> 四、常用DOS操作命令 1、改变当前盘 输入d: 并回车,屏幕显示: D:\> 2、改变当前目录 1)进入下一级目录 D:\>cd hb 回车后,屏幕显示: D:\hb>cd masm 回车后,屏幕显示: E:\hb\masm> 问题:可以一次进入下面二级或多级目录吗? 2)返回上一级目录 D:\hb\masm>cd.. 回车后,屏幕显示: D:\hb\>cd.. 回车后,屏幕显示: D:\> 问题:可以直接返回根目录吗? D:\hb\masm>cd\ 回车后,屏幕显示: D:\> 3、显示当前目录容 D:\>dir /p 分页显示当前目录容 问题:如何显示d:\text中的容? D:\>dir d:\text↙ 4、DOS方式下如何运行程序? DOS方式下的可执行文件(即程序文件)扩展名为.exe或.,运行时只需要在系统提示符下输入文件主名即可。例如,有一个文件名为test.exe,存入在D:\hb\masm 中,运行时,可以这样做: D:\hb\masm>test↙ 五、汇编语言上机过程 1、编辑源程序 运行:edit 回车后,进入EDIT环境,输入完后存盘(file/save)并退出(file/exit)。

2、汇编 D:\hb\masm>masm add5.asm↙ 生成目标程序文件add5.obj。(如果有语法错误,会提示错误所在行号和错误类型)3、连接 D:\hb\masm>link add5↙ 生成可执行文件add5.exe。 六、DEBUG程序调用及汇编语言程序调试方法 调试程序DEBUG是DOS支持的又一种系统软件,主要用于汇编语言程序的调试。汇编和连接过程只能查出源程序的语法错误,不能查出功能上的错误和程序不完善的地方。DEBUG程序为用户提供多种命令,大致有:显示和修改寄存器和存贮单元的容;执行程序中任意一段或一条指令;汇编单条源语句和反汇编机器码指令;查找字符代码;端口的输入和输出;文件装入存和写入磁盘等。用户利用这些命令可以查出任何程序功能上的错误。下面说明DEBUG程序的启动方法和主要命令意义。 (一)DEBUG程序的启动 DEBUG程序有两种启动方法。DEBUG程序是在DOS盘上的一个独立的可执行程序(扩展名为.COM),所以,DEBUG程序的第一种启动方法就是把它看作和一般的可执行程序一样,只要打入DEBUG和回车键,就可以把它装入存。但是这样启动只把DEBUG 程序本身装入存并进入等待DEBUG命令状态,还没有把要调试的程序装入存。第二种启动DEBUG的程序的方法是一次相继装入DEBUG程序和要调试的程序。打入的命令格式如下: DEBUG[d:][path]filename[.ext][parml][parm2] 其中的Filename是要调试程序的文件名,可选项[d:][path]和[.ext]分别是要调试程序的所在盘符、路径和扩展名。可选项[parml]和[parm2]是DEBUG程序为要调试程序准备的参数(一般不用)。 例进入DEBUG程序并装入要调试程序。其操作如下: D:\hb\masm>DEBUG add5.exe (进入DEBUG,并装配add5.exe) 此时屏幕上出现一个短线,这表示可以使用DEBUG命令了。 如果启动DEBUG时没有指定要调试的文件名,则需要用N命令指定要调试的文件,再用L命令将其装入存。操作如下: D:\hb\masm>debug↙ - n add5.exe↙ - l↙ (二)DEBUG命令 在说明每个命令之前,先说明一些共同信息: ■DEBUG命令都是以一个英文字母开头,后面跟一个或多个参数。 ■命令字母和参数可用大写或小写或混合形式。 ■命令字母和参数中,相邻两个十六进制之间必须用逗号或空格分开.其它各部分之间有无空格或逗号都可以。 ■执行任何命令期间都可用Ctrl+Break键方法结束命令的执行。

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

《汇编语言程序设计》 实验报告

实验二内存操作数及寻址方法 实验目的 通过实验掌握下列知识: 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。

寻址方式教案(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

内存操作数及寻址方式的使用

武汉工程大学 电气信息学院 《面向对象程序设计》实验报告[ 1 ] 专业班级过程装备与控制工程1 班 实验时间 2015 年 5 月 日 学生学号实验地点机电工程学院205 学生姓名指导教师华夏 实验项目内存操作数及寻址方式的使用 实验类别设计实验实验学时3学时 实验目的及要求通过实验掌握下列知识。 (1)DEBUG命令:G、N、W、L及Q。 (2)8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 (3)8088指令:INC、DEC、LOOP、INT3、INT20H,寄存器SI、DI。 (4)8088汇编语言伪操作:BYTE PTR,WORD PTR. (5)求累加和程序和多字节加减法程序。 成绩评定表 类别评分标准分值得分合计 上机表现 按时出勤、遵守纪律 认真完成各项实验内容 30分

《电子线路CAD设计》实验报告 报告质量程序代码规范、功能正确 填写内容完整、体现收获70分 评阅教师: 日期:年月日

实验内容 (说明:此部分应包含:实验内容、实验步骤、实验数据与分析过程等) 1.一、实验内容、实验方法与步骤、实验数据与结果分析 1)内存操作数及各种寻址方式使用 (1)先输入程序内容,用A命令输入上述程序,运行如下: (2)并用T命令逐条运行,运行如下:

(3)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。程序运行如下:

(4)注意D命令显示结果中右边的ASCII字符及双字节数存放法。 (5)思考有关指令中的BYTE PTR及WORD PTR伪操作不加行不行,试一试。 2)求累加和程序 (1)用A命令将程序输入到100H开始的内存中,在输入时记下标号LOP和J的实际地址,在输入LOOP指令时LOP用实际地址代替。 (2)用命令NAA将此程序命名为文件AA (3)用R命令将BX:CX改为程序长度值 (4)用命令W100将此程序存放到AA命名的磁盘文件中

8086汇编语言上机调试步骤

8086汇编语言上机调试步骤 1、在网络课堂-微机原理与接口技术-实验指导-汇编工具下载,下载汇编工具并解压,文件夹名为“masm”。 2、用鼠标点击“masm”文件夹。进入该文件夹后将看到 MASM.EXE, LINK.EXE , DEBUG.EXE3个文件进行复制操作。 3、用鼠标点击“我的电脑”再点击D: 盘,并在 D: 盘上建立新的“ MASM”文件夹,最后将上面的3个文件全部复制到该文件夹中。(注意实验所有的文件都放在该文件夹内) 4、用文本编辑软件UltraEdit-32、WINDOWS 中的记事本或其它的文本编辑器输入汇编语言程序, 注意在最后一行的 END输入完后要按一次回车键,保存的源 文件的扩展各一定要是“.asm”如: example.asm 。(建议用记事本输入源程序,另存时,保持类型选择“所有文件”如图所示) 5、进入MS-DOS方式 ( 从开始>程序>附件>命令提示符) 或者(从程序 > 运行输入“cmd”回车,进入MS-DOS环境。

6、进入D:>MASM文件夹 7、显示MASM文件夹内所有文件“dir”命令 8、在 DOS 提示符下进行汇编、连接、动态调试等操作。 例如: 对源文件 example.asm 进行的操作

D:\MASM\MASM example.asm;汇编源程序操作 D:\MASM\LINK example.dbj;连接并生成扩展名为 .EXE 的可执行文件 D:\MASM\DEBUG example.exe;对可执行文件进行调试 9、要求掌握的调试命令(在 DEBUG 中使用的命令) a: U - 反汇编命令 用法: -U 代码段地址:起始偏移地址如:-U CS:100 b: D - 显示内存中的数据命令 用法: -D 数据段地址:存放数据的偏移地址如:-D DS:00 20 c: T - 单步执行程序命令 用法: -T 要执行的指令条数如:-T 3 d: G - 连续执行程序命令 用法: -G=代码段地址:指令的起始偏移地址指令的结束偏移地址如: -G=CS:100 106 注意: 结束地址一定要是操作码的所在地址 e: R - 查看和修改寄存器数据命令 用法: -R 回车如:-R AX f: F - 对内存单元填充数据命令 用法: -F 数据段地址:偏移首地址偏移未地址填入的数据 如: -F DS:100 120 ff g: Q - 退出”DEBUG“应用程序命令 10、应用例子 ;二进制到BCD转换(a.asm) ;将给定的一个二进制数,转换成二十进制(BCD)码 DATA SEGMENT RESULT DB 3 DUP(?) DATA ENDS CODE SEGMENT

汇编语言上机过程

第一步:编写程序 用记事本编写汇编语言程序,保存为.ASM 文件,保存时,保存类型选择“所有文件”。注意,应将汇编语言程序保存在包含MASM.EXE 及LINK.EXE 的目录下(本例中假定在C盘的MASM目录下,即“C:\MASM”)。 第二步:编译 进入DOS命令提示符环境。该环境的访问方法一:windows “开始”->“运行”,输入“cmd”),如下图: 访问方法二:windows “开始”->“程序”->“附件”->“命令提示符”,如下图所示:

进入DOS命令提示符方式: 用CD 命令进入MASM目录,如下图所示: (若个人的MASM目录在D盘下,可如下操作:)

回车后即进入存放有MASM.EXE LINK.EXE EX11.ASM 的目录D:\MASM : 现在开始用汇编程序MASM.EXE 编译汇编语言源程序EX11.ASM: 回车后开始编译:

若编译出现0处错误(如上图椭圆框内),则表示编译通过,正确生成EX11.OBJ文件: 接下来转入第四步。否则,若出现如下类似界面: 表示出现一处错误,该错误在EX11.ASM的第七行,错误为“出现未定义的符号AS”,则转入第三步。 第三步:编辑程序 用 EDIT.EXE 编辑出现错误的程序 EX11.ASM:

回车后,出现如下界面: 找到第7行,并修改相应错误。修改完成后,点击菜单“File”或用“ALT”回车打开“File”菜单,首先选择“Save”保存修改,然后选择“Exit”退出编辑状态: 重复如下编译过程,重新编译修改过的EX11.ASM,直至全部错误修改完成:

8086汇编语言指令的寻址方式有哪几类

1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 寄存器寻址最快 7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS , AX ;不能修改CS MOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送 XCHG BX , IP ;不能用名字直接访问IP PUSH CS POP CS ;不允许直接修改CS值 IN BX , DX ;输入数据必须使用累加器AL或AX MOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000 MOV CS , [1000];不允许直接修改CS值 20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少? 利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH 27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行 PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么? 栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址) B P7 5. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H, (31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H, (32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容: (1) MOV AX,BX (2) MOV AX,[BX] (3) MOV AX,4200H (4) MOV AX,[2800H] (5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI] 9. 分别执行下列各指令组,写出AX的内容: (1) MOV AX,93A4H NEG AX 73A4-8c5c,e689-1977 (AX)=6C5CH (2) XY DW "AB" MOV AX,XY (AX)=4142H (3) MOV AX,2B7EH MOV CX,4DB5H ADD AX,CX (AX)=7933H (4) XA DW 0BD57H MOV AX,0FBCDH AND AX,XA (AX)=B945H (5) STC MOV BX, 0B69FH MOV AX, 43A2H SBB AX, BX

汇编语言上机实验

汇编语言程序设计的实验环境及实验步骤 知识提要: 1、汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行: (1) 编辑源程序(生成.ASM文件) (2) 汇编源程序(.ASM → .OBJ) (3) 连接目标程序(.OBJ → .EXE ) (4) 调试可执行程序(使用调试程序Debug调试生成的.EXE文件) (5) 运行程序输出结果。 2、Windows环境下的汇编语言集成编程环境的使用 实验一汇编语言上机实验(一) 一、实验要求和目的 1、掌握汇编语言程序设计的基本方法和技能; 2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序; 3、熟练掌握宏汇编程序MASM的使用; 4、熟练掌握连接程序LINK的使用。 二、软硬件环境 1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存; 2、软件环境:装有MASM、DEBUG、LINK等应用程序。 三、实验内容与步骤 1、实验内容 编写程序,判断一个年份是否是闰年。 2、实验步骤 汇编语言程序设计上机过程如图1.1所示。 图1.1 汇编语言程序上机过程 (一)用编辑程序EDIT建立汇编语言源程序文件(ASM文件)

建议源程序存放的目录名为MASM中,MASM子目录在D盘的根目录下。 可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击“开始”→“运行”,在“运行”中输入“CMD”进入DOS模式,运行EDIT软件,例如:C:\documents and settings\administrator>cd\ *进入C盘根目录 C:\>d: *进入D盘 D:\>md masm *在D盘创建MASM文件夹D:\>cd masm *进入MASM文件夹 D:\masm>edit run.asm *建立run源文件 进入EDIT的程序编辑画面时,编写程序,判断一个年份是否是闰年的汇编语言源程序,输入汇编语言源程序如下: DATA SEGMENT INFON DB 0DH,0AH,'Please input a year: $' Y DB 0DH,0AH,'This is a leap year! $' N DB 0DH,0AH,'This is not a leap year! $' W DW 0 BUF DB 8 DB ? DB 8 DUP(?) DATA ENDS STACK SEGMENT 'stack' DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX LEA DX,INFON MOV AH,9 INT 21H LEA DX,BUF MOV AH,10 INT 21H MOV CL, [BUF+1] LEA DI,BUF+2 CALL DATACATE CALL IFYEARS JC A1 LEA DX,N MOV AH,9 INT 21H JMP EXIT A1: LEA DX,Y MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H DATACATE PROC NEAR

寻址方式

寻址方式: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

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

第3章答案指令系统1-40

第3章指令系统 1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。1、指令:CPU根据人的意图来执行某种操作的命令 指令系统:一台计算机所能执行的全部指令集合 机器语言:用二进制编码表示,计算机能直接识别和执行的语言 汇编语言:用助记符、符号和数字来表示指令的程序语言 高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言 2,什么是计算机的指令和指令系统? 2、见第1题。 3,简述89C51汇编指令格式。 3、操作码[目的操作数] [,源操作数] 4,简述89C51寻址方式和所能涉及的寻址空间。 5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式? 5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址 6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。 6、MOV A,40H ;直接寻址(40H)→A MOV R0,A ;寄存器寻址(A)→R0 MOV P1,#0F0H ;立即数寻址0F0→P1

MOV @R0,30H ;直接寻址(30H)→(R0) MOV DPTR,#3848H ;立即数寻址3848H→DPTR MOV 40H,38H ;直接寻址(38H)→40H MOV R0,30H ;直接寻址(30H)→R0 MOV P0,R0 ;寄存器寻址(R0 )→P0 MOV 18H,#30H ;立即数寻址30H→18H MOV A,@R0 ;寄存器间接寻址((R0)) →A MOV P2,P1 ;直接寻址(P1)→P2 最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元 7,对89C51片内RAM的高128字节的地址空间寻址要注意什么 7、用直接寻址,位寻址,寄存器寻址 8,指出下列指令的本质区别。 8,MOV A,DATA ;直接寻址2字节1周期 MOV A,#DATA ;立即数寻址2字节1周期 MOV DATA1,DATA2 ;直接寻址3字节2周期 MOV 74H,#78H ;立即数寻址3字节2周期 如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A 9,设R0内容为32H, A的内容为48H, 片内RAM的32H单元内容为80H, 40H单元内容为08H, 请指出在执行下列程序段后上述各单元内容的变化。 9、 MOV A,@R0 ;((R0))=80H→A MOV @R0,40H ;(40H)=08H→(R0) MOV 40H,A ;(A)=80→40H MOV R0,#35H ;35H→R0 最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H 10,如何访问SFR,可使用哪些寻址方式? 10、用直接寻址,位寻址,寄存器寻址 11,如何访问片外RAM,可使用哪些寻址方式? 11、只能采用寄存器间接寻址(用MOVX指令) 12,如何访问片内RAM,可使用哪些寻址方式? 12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7) 高128字节:直接寻址,位寻址,寄存器寻址 13,如何访问片内外程序存储器,可使用哪些寻址方式? 13、采用变址寻址(用MOVC指令)

汇编语言指令

汇编语言指令集 数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

汇编语言习题答案

第3章自测练习 一、选择题(四选一) 1.表示一条处理器指令所在存储单元的符号地址是 C。 A 变量 B 常量 C 标号 D 偏移量 2.汇编语言中的变量有多种类型属性,但错误的类型是 B 。 A 字节型byte B 字符型char C 字型word D 双字型dword 3.执行mov bx,seg var指令,BX得到变量var的 B 。 A 物理地址 B 段地址 C 偏移地址 D 内容 语句中,采用 C 分隔标号和指令。 A 逗号 B 分号 C 冒号 D 空格 5.欲设定从偏移地址100H开始安排程序,可使用 A 伪指令。 A org 100h B start=100h C start db 100h D start equ 100h 6.与“mov bx,offset var”指令等效的指令是 D 。 A mov bx,var B 1ds bx,var C les bx,var D 1ea bx,var. 7.下条语句 buf db l0 dup(3 dup(?,10),3,10) 汇编后,变量buf占有的存储单元字节数是 B 。 A 100 B 80 C 40 D 20 8.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的num1单元的内容是 B。 A 0 B 0FFFFH C 1 D 0FFH 9.要求将A、B两个字符的ASCII码41H和42H顺序存放在连续两个字节存储单元中,可选用的语句是 A 。 A db`AB' B dw `AB' C db 0ABH D dw 0ABH 10.在汇编语言程序中,对END语句叙述正确的是 C 。 A END语句是一可执行语句 B END语句表示程序执行到此结束 C END语句表示源程序到此结束 D END语句在汇编后要产生机器码 11.下面的数据传送指令中,错误的操作是D。 A mov ss:[bx+di],byte ptr 10h B mov dx,l000h C mov word ptr[bx],1000h D mov ds,2000h 12.下面指令执行后,变量dab中的内容是 C 。 daw dw 2A05h dab db 0Fah … mov al,byte ptr daw sub dab,al A 0DAH B 0FAH C 0F5H D 0D0H

汇编语言程序的上机过程

汇编语言的上机过程 汇编语言程序的上机过程包括编辑、汇编、连接和执行这四个步骤。汇编程序我们提供宏汇编程序MASM5.0和MASM6.14两个版本。 1、建立源程序文件 建立和编辑汇编语言源程序可以使用EDIT、记事本、写字本,也可以使用TC等来输入源程序。保存时,源程序文件的扩展名必须是ASM。 练习: (1)在DOS下用编辑软件EDIT建立如下源程序文件,将文件保存为Hello.ASM,保存在MASM5目录下。(调用命令“C:\EDIT”进入EDIT 编辑器。) 源程序文件如下: DSEG SEGMENT MESSAGE DB'HOW DO YOU DO?',0DH,0AH,24H DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG BEGIN: MOV AX,DSEG MOV DS,AX MOV DX,OFFSET MESSAGE MOV AH,9 INT21H

MOV AH,4CH INT21H CSEG ENDS END BEGIN (2)编程计算1+2+3+……+100,和放在AX寄存器中,要求用循环实现。 对于MASM5.0和MASM6.14两个版本,编译和连接的方法有所不同。以下分别就两个版本的编译和连接的方法进行讲解。 如果使用MASM5.0的话,操作方法如下(以HELLO.ASM源程序文件为例):2、对源程序进行汇编,生成目标文件HELLO.OBJ。 操作: (1)在DOS下进入MASM5.0的目录,如C:\MASM5> (2)敲入命令:MASM HELLO 说明: .obj文件:目标代码文件,纯二进制代码文件,不能直接显示在屏幕上。 .lst文件:包含源程序中各语句及其对应的目标代码,各语句的偏移量等相关信息,对调试程序有帮助,但一般情况不需要。 .crf文件:交叉索引文件,给出源程序中定义的符号引用情况,初学时不需建立。 3、连接目标文件,生成执行文件HELLO.EXE, 操作:敲入命令LINK HELLO 说明: .EXE文件:可执行文件 .MAP文件:连接映象文件,包括各个段在存储器中的分配情况,初学时不需要。

指令与寻址方式习题

指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1)AND AX,0FFH (2)AND BL,[OFFH] (3)MOV DS,AX (4)CMP [SI],CX (5)MOV DS:[0FFH],CL (6)SUB [BP][SI],AH (7)ADC AX,0ABH[BX] (8)OR DX,-35[BX][DI] (9)PUSH DS (10)CMC 答:目的操作数源操作数 (1)寄存器直接寻址立即数寻址 (2)寄存器直接寻址直接寻址 (3)寄存器直接寻址寄存器直接寻址 (4)寄存器间接寻址寄存器直接寻址 (5)直接寻址寄存器直接寻址 (6)基址变址寻址寄存器直接寻址 (7)寄存器直接寻址寄存器相对寻址 (8)寄存器直接寻址基址变址相对寻址 (9)无寄存器直接寻址 (10)隐含寻址 2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。 (1)MOV [BX][BP],AX (2)TEST [BP],BL (3)ADD SI,ABH (4)AND DH,DL (5)CMP CL,1234H (6)SHR [BX][DI],3 (7)NOT CX,AX (8)LEA DS,35[SI] (9)INC CX,1 (10)P USH 45[DI] 答:(1)应将BP,BX其中之一该为SI或DI (2)正确 (3)ABH改为0ABH (4) (5)是字操作,CL改为CX (6)移位数大于1时,应用CL (7)NOT指令只有一个操作数 (8)LEA指令的源操作数应为一内存单元地址

(9)此指令不用指出1 (10)45改为45H 3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态? MOV DL,86 ADD DL,0AAH 答: 0101,0110 + 1010,1010 = 1,0000,0000 CF=1 AF=1 ZF=1 SF=1 OF=1 4.在8086/8088CPU中可用于作地址指针的寄存器有哪些? 答:有BX,CX,DX,BP,SI,DI (IP,SP,) 5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。下列各指令或程序段分别执行后的结果如何? (1)MOV CL,20H[BX][SI] (2)MOV [BP][DI],CX (3)LEA BX,20H[BX][SI] MOV AX,2[BX] (4)LDS SI,[BX][DI] MOV [SI],BX (5)XCHG CX,32H[BX] XCHG 20H[BX][SI],AX 答(1) (CX)=56F6H; (2) (09226H)=5678H; (3) (AX)=1E40H; (4) (1E4F6H)=0024H; (5) (09226H)=1234H,(AX)=5678H. 6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。 答:(1)MOV AX,[BP] (2)MOV AX,[BP+DI+80H] (3)MOV AX,[DI+0100H] MOV AX,[SI+0220H] (4)MOV AX,[02C0H] 7.试按下列要求分别编制程序段: (1)把标志寄存器中符号位SF置‘1’。 (2)寄存器AL中高低四位互换。 (3)由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。 (4)现有三个字节存储单元A,B,C。在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。 (5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。 答:(1)MOV AH, 80H SAHF

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