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

合集下载

汇编语言指令格式

汇编语言指令格式

汇编语言指令格式汇编语言是一种低级别的计算机编程语言,它直接与计算机的体系结构和指令集相关。

每个计算机体系结构都有其自己的指令集架构和对应的汇编语言。

下面是一些通用的汇编语言指令格式元素,具体的格式会根据不同的体系结构而有所差异:1. 操作码(Opcode):-操作码是指令的基本操作,用于指定要执行的操作,比如加法、减法、移动数据等。

不同的操作码对应不同的指令。

2. 操作数(Operands):-操作数是指令要处理的数据或地址。

有些指令可能不需要操作数,而另一些指令可能需要一个或多个操作数。

3. 寻址模式(Addressing Mode):-寻址模式指定了操作数在内存中的寻址方式。

不同的体系结构支持不同的寻址模式,例如直接寻址、寄存器寻址、间接寻址等。

4. 注释(Comments):-注释是用来解释指令的文本,对于程序员来说是可选的,但对于代码的可读性和理解很有帮助。

以下是一个简单的示例,展示了一个通用的汇编语言指令的可能格式:```assembly; 注释部分,解释指令的作用MOV AX, 42 ; 将值42 移动到寄存器AX 中ADD BX, AX ; 将寄存器AX 的值加到寄存器BX 中SUB CX, 10 ; 从寄存器CX 中减去值10JMP label1 ; 无条件跳转到标签label1 处```在上面的示例中:- `MOV` 是一个操作码,表示数据移动的指令。

- `AX`、`BX`、`CX` 是寄存器,用于存储数据。

- `42` 和`10` 是立即数,即直接给定的数值。

- `JMP` 是一个跳转指令,用于实现程序的控制流。

需要注意的是,不同的体系结构和编译器可能有不同的语法和指令集,上述示例仅用于说明基本的汇编语言指令格式。

在实际编写汇编语言程序时,需要参考具体体系结构的文档和规范。

汇编中的各种寻址方式

汇编中的各种寻址方式

汇编中的各种寻址方式(2011-11-18 11:41:32)转载▼标签:杂谈1,立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段,这种操作数成为立即数。

例:mov al,5 执行完指令后al的值为05h2,寄存器寻址方式操作数在寄存器中,指令指定寄存器号。

例:mov ax,bx3,直接寻址方式操作数的有效地址包含位移量的一种成分,其值就存放在中指令的操作码之后。

例:mov ax,[2000h]在汇编语言指令中,可以用符号地址代替数值地址。

如:mov ax,valuevalue为存放操作数单元的符号地址。

如:mov ax,[value]4,寄存器间间接寻址操作数的有效地址只包含基址寄存器内容或变址寄存器内容的一种成分。

例:mov ax,[bx]如果(DS)=2000h,(bx)=1000h则物理地址=20000+1000=21000h5,寄存器相对寻址方式(或称直接变址寻址方式)操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两种成分组成。

例:mov ax,count[si](也可以表示为mov ax,[count+si])6,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成。

例:mov ax,[bx][di](或写为:mov ax,[bx+di])此类寻址方式使用段跨越前缀的格式为:mov ax,es:[bx][di]7,相对基址变址寻址方式操作数得意偶小弟值基址寄存器和一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三种成分组成。

例:mov ax,mask[bx][si](也可写为mov ax,mask[bx+si]或者mov ax,[mask+bx+si])8,比例变址寻址方式操作数的有效地址是变址寄存器的内容乘以指令中指定的比例银子再加上位移量之和,所以由三种成分组成。

汇编语言程序设计实验指导

汇编语言程序设计实验指导

汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。

旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。

(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。

内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。

一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。

2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。

注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。

3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。

4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。

5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。

6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。

汇编语言寻址方式

汇编语言寻址方式
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
1.立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作后存 放在代码段,这种操作数就称为立即数。 立即数可以是8位的,也可以是16位的。 如果是16位立即数,按“高高低低”原则进行读取。 例如:MOV AX, 1234H
再如:MOV AL, 5 MOV BX, 2064H
则执行指令后(AL)=05H 则执行指令后,(BX)=3064H
指令中也可指定段超越前缀来取得其它段中的数据。 如,MOV AX , ES : [BX] 引用的段寄存器是ES 请熟悉下面的表达形式: MOV [SI] , AX ; 目的操作数间接寻址 MOV [BP] , CX ;目的操作数引用的段寄存器是SS MOV SI , AX; 目的操作数寄存器寻址
5.寄存器相对寻址方式 操作数在存储器中,操作数的有效地址是一个基址寄存器 (BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8 位或16位位移量之和。 即:
7.相对基址加变址寻址方式 操作数在存储器中,操作数的有效地址是由: 基址寄存器之一的内容与变址寄存器之一的内容 及指令中给定的8位或16位位移量相加得到。 即:
在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 机有效地址时,如果位移量是8位,那么被带符号扩展成16位。 当所取得的有效地址超过FFFFH是,就取64K的模。

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

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

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

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

在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”存储形式和执⾏⽰意图。

汇编语言第3章 指令系统和寻址方式

汇编语言第3章 指令系统和寻址方式

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)

寻址方式的判断

寻址方式的判断
⑵ 操作数存在于处理器内部寄存器中,处理器从寄存器中获得这个操作数, 这就是寄存器寻址方式。汇编指令中,这个寄存器操作数以寄存器名形式出现。
⑶ 操作数存在于主存中,处理器从主存单元获得这个操作数,这就是存储器寻址方式。汇编指令中,这个存储器操作数以主存地址形式出现。
6. 汇编语句中,还有其他形式出现,需要理解相应操作符才能做出正确判断。
例如,
直接写出变量名实际上 是直接寻址方式;
变量名加减一个常量 还是直接寻址方式;
变量名和一个寄存器 则是寄存器相对寻址方式;
⑴ 有效地址直接给出,存在于指令代码中,就是直接寻址方式。
⑵ 有效地址存在寄存器中,就是通过寄存器的间接寻址方式。
⑶ 有效地址是两部分的和,一部分在寄存器中,另一部分直接给出(称为位移量),这就是寄存器相对寻址方式。
⑷ 有效地址是两部分的和,一部分在基址寄存器中(8086是BX和BP),另一部分在变址寄存器中(8086是SI和DI),这就是基址变址寻址方式。
利用offset后跟一个变量名 则是立即数寻址方式。■ [
⑸ 有效地址是三部分的和,第一部分在基址寄存器中(8086是BX和BP),第二部分在变址寄存器中(8086是SI和DI),第三部分直接给出(称为位移量),这就是相对基址变址寻址方式。
5. 区别各种寻址方式时,注意各自的特点。
只有一个常量, 是立即(数)寻址方式;
MOV DAVL[BP],AX 中目的操作数是寄存器相对寻址,源操作数是寄存器寻址。
8086汇编寻址方式总结
寻址方式是汇编语言的重点和难点。请按如下思路学习:
1. 操作数可以存在什么地方?
⑴ 操作数存在于指令代码中,处理器译码时就立即获得了这个操作数,这就是立即(数)寻址方式。汇编指令中,这个立即数(操作数)以常量形式出现。

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

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

武汉工程大学电气信息学院《面向对象程序设计》实验报告[ 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命名的磁盘文件中(5)用命令Q退出DEBUG实验总结(说明:总结实验认识、过程、效果、问题、收获、体会、意见和建议。

汇编的寻址方式

汇编的寻址方式

在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。

不同的处理器体系结构支持不同的寻址方式。

以下是一些常见的寻址方式:立即寻址(Immediate Addressing):操作数直接包含在指令中。

例如:MOV AX, 5 ; 将寄存器AX 设置为立即数5寄存器寻址(Register Addressing):操作数位于寄存器中。

例如:MOV AX, BX ; 将寄存器BX 的值移动到寄存器AX直接寻址(Direct Addressing):操作数的地址直接指定在指令中。

例如:MOV AX, [1234] ; 将内存地址1234 处的数据移动到寄存器AX寄存器间接寻址(Register Indirect Addressing):指令中包含一个寄存器,该寄存器包含操作数的地址。

例如:MOV AX, [BX] ; 将寄存器BX 中存储的地址处的数据移动到寄存器AX基址寻址(Base Addressing):使用基址寄存器加上一个偏移量来计算内存地址。

例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX相对寻址(Relative Addressing):操作数的地址是相对于当前指令位置的偏移量。

例如:JMP label_name ; 无条件跳转到标签label_name 处变址寻址(Indexed Addressing):使用一个寄存器的值作为基址,另一个寄存器的值作为偏移量。

例如:MOV AX, [SI + DI] ; 将寄存器SI 和DI 中的值相加,然后将结果作为地址处的数据移动到寄存器AX相对基址寻址(Relative Base Addressing):使用基址寄存器和相对偏移量的组合。

例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。

汇编语言2-1寻址方式

汇编语言2-1寻址方式

EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。

汇编语言总结

汇编语言总结

执行指令 SAHF 后 (FLAGS)=0400H ③ 标志寄存器进栈指令 PUSHF 功能:将标志寄存器内容压入堆栈 即: (SP)–2→SP (FLAGS)→↓(SP) 例 3:需要将(FLAGS)→AX 要用以下两条指令来实现: PUSHF POP AX 问题:可以用 LAHF 吗? ④ 标志寄存器出栈指令 POPF 功能:将栈顶的内容送入标志寄存器 例:已知: (FLAGS)=0485H, (AX)=0000H,执行以下指令后: PUSHF ① PUSH AX ② POPF ③(FLAGS)=0000H 结果为: (FLAGS)=0000H, (AX)=0000H 5.标志位操作指令 CLC 使 CF=0 (Clear carry) 对进位标志 CF 操作指令 CMC 使 CF 取反 (Complement carry) STC 使 CF=1 (Set carry) CLD 使 DF=0 (Clear direction ) 对方向标志 DF 操作指令 STD 使 DF=1 (Set direction) CLI 使 IF=0 (Clear interrupt) 对中断标志 IF 操作指令 STI 使 IF=1 (Set interrupt)
寄存器方式操作数在寄存器中寻址方式存贮器方式操作数在存贮器中端口方式操作数在io端口中2存贮器方式操作数在存储器中寄存器间接方式r变址方式vrf常用于表指针一维数组基址加变址方式virfbr矩阵运算二维数组直接方式n或变量名表达式一寄存器寻址汇编格式
汇编语言总结
第一章
汇编语言:一种用符号书写的、其主要操作与机器指令一一对应,并遵循一定语法规则的计 算机语言。 汇编源程序:用汇编语言编写的程序——类似于高级语言编写的源程序。 汇编程序: 把汇编源程序翻译成目标程序的语言加工程序——类似于高级语言的编译程序。 汇编: 汇编程序进行翻译的过程 —— 类似于高级语言的编译过程。 伪指令: 源程序中告诉汇编程序如何进行汇编工作的命令。 例如:程序的开始、结束,数据类型和存放的位置 寄存器:一些暂时存放数据的临时存储单元。 (1) 寄存器是中央处理器内的组成部份; (2) 寄存器是有限存贮容量的高速存贮部件; (3) 寄存器是计算机系统获得操作资料的最快速途径。 EAX (累加器)Accumulator ECX (计数寄存器)Count EBX (基址寄存器)Base EDX (数据寄存器)Data(注) ESP(Stack Pointer) ,称为堆栈指示器,存放的是当前堆栈段中栈顶的偏移地址; EBP(Base Pointer),为对堆栈操作的基址寄存器; ESI(Source Index),称为源变址寄址器;字符串指令源操作数的指示器。 EDI(Destination Index),称为目的变址寄存器;字符串指令目的操作数的指示器。注 代码段寄存器 堆栈段寄存器 数据段寄存器 附加数据段寄存器 附加数据段寄存器 附加数据段寄存器 CS SS DS ES FS GS

汇编语言第四章:指令系统和寻址方式

汇编语言第四章:指令系统和寻址方式

第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
根据d的不同进行选取
第四章 第一章 指令系统和寻址方式 基础知识
d=1时的操作
第四章 第一章 指令系统和寻址方式 基础知识
d=0时的操作
第四章 第一章 指令系统和寻址方式 基础知识
如果2000H单元在附加段,指令为: MOV AX, ES:[2000H] 段跨越前缀: 段寄存器名: —— 改变默认使用的段寄存器
第四章 第一章 指令系统和寻址方式 基础知识
可以使用属性操作符 type PTR 来进行属性说明
第四章 第一章 指令系统和寻址方式 基础知识
(4)寄存器间接寻址方式 (Register Indirect Addressing ) 特点: (寄存器) = 操作数的偏移地址 计算操作数物理地址的公式:
next
(7)相对基址变址寻址方式 ( Relative Based Index Addressing ) 特点:(基址寄存器) + (变址寄存器)+位移量 = 操作数的偏移地址
例:设 ( SS ) = 3000H ( BP ) = 2000H ARRAY = 0250H ( SI ) = 1000H MOV AX, ARRAY[BP][SI] 要访问的存储单元物理地址为: 30000H+2000H +0250+1000H 30000H = 33250H
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
第四章 第一章 指令系统和寻址方式 基础知识
Байду номын сангаас

汇编语言指令详解

汇编语言指令详解

第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。

重点和纲要:指令系统--寻址方式。

有关寻址的概念;6种大体的寻址方式及有效地址的计算。

教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。

操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。

操作数:指在指令执行操作的进程中所需要的操作数。

该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。

寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。

8086/8088的大体寻址方式有六种。

1.当即寻址所提供的操作数直接包括在指令中。

它紧跟在操作码的后面,与操作码一路放在代码段区域中。

如图所示。

例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。

若是16位的,则存储时低位在前,高位在后。

当即寻址主要用来给寄放器或存储器赋初值。

2.直接寻址操作数地址的16位偏移量直接包括在指令中。

它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。

如图2-2所示。

例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。

8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。

现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。

汇编语言-寻址方式

汇编语言-寻址方式

2020/12/27
20
基址加变址寻址例题
例3.12 MOV AX,[BX][SI] (等价形式MOV AX,[BX+SI])
说明:目的操作数地址是AX,源操作数偏移地址EA =[BX]+[SI],其中,基址寄存器选用了BX,变址寄存器 选用了SI。由于源操作数选用BX作基址寄存器,所以其物 理地址PA是由数据段寄存器DS的内容左移4位二进制与偏 移地址EA相加形成。
执行: (BX)→40050H 执行后:(40050H)=3344H,(BX)、(BP)、(DI)、 (SS)均不变。
2020/12/27
22
7. 相对基址加变址寻址
在该寻址方式中,操作数存放在存储器里,操作数的偏移
地址EA是由指令中指定的基址寄存器内容、变址寄存器内容 及位移量X三项相加之和组成。
为目的操作数地址,CX的内容为目的操作数。 执行前:(CX)=78H, 执 行:(CX)-1→CX 执行后:(CX)=77H
例3.7:ADD AX,BX 说明:ADD是双操作数指令,功能是实现加法运算,AX
为目的操作数地址,AX的内容为目的操作数,BX为源操作数地 址,BX的内容为源操作数。
执行前:(AX)=1234H,(BX)=5620H,即 执 行:(AX)+(BX) →AX 执行后:(AX)=6854H,(BX)不变。
2020/12/27
2
3.1 数据寻址方式
数据寻址方式即寻找操作数地址的 方式,在8086/80286中只能使用16位 寻址,而80386及其后继机型则既可用 16位寻址,也可用32位寻址,无论多 少位寻址实质都是寻找操作数的物理 地址。物理地址是由段地址和偏移地 址两部分组成,段地址存放在相应的 段寄存器中,偏移地址存储在相应的 地址寄存器中,偏移地址又称有效地 址。

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式1 ⽴即寻址⽅式直接使⽤⽴即数来处理mov al,5mov ax,3064H2 寄存器寻址⽅式操作数在寄存器中,直接使⽤寄存器赋值来读取内部的操作数。

另外的⽅式的简介:在8086中把操作数的偏移地址称为有效地址,以下的操作都是取得有效地址(EA)的不同途径。

有效地址可以由以下四种成分:位移量(displacement):存放的是⼀个地址。

基址(base):基址部分,通常⽤来指数据段中数据或字符串的⾸地址变址(index):存放在变址寄存器中的内容。

通常⽤来访问数组中的某个元素或字符串的某个字符。

⽐例因⼦(scale factor):是386新增加的寻址⽅式的术语,值可为1,2,4,8在寻址中,可⽤变址寄存器内容乘以⽐例因⼦来取得变址值。

有效地址的计算公式可⽤由以下来处理:EA = 基址 + (变址 X ⽐例因⼦) + 位移量除了⽐例因⼦固定,其它三个都可以有正负。

四种成分16位寻址32位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通⽤寄存器变址寄存器SI,DI除ESP外的32位通⽤寄存器⽐例因⼦⽆1,2,4,8表格⼀默认段选择规则访存类型所⽤段及段寄存器却省选择规则指令代码段 CS寄存器⽤于取指堆栈堆栈段 SS寄存器所有的堆栈的进栈和出栈,任何⽤ESP或EBP作为基址寄存器的访问局部数据数据段 DS寄存器除相对于堆栈以及串处理指令的⽬的以外的所有数据访问⽬的串附加数据段 ES寄存器串处理指令的⽬的串表格⼆3 直接寻址⽅式操作数的有效地址只包含位移量这⼀种成分。

值就在代码段中指令的操作码之后。

也就是位移量就是操作数的有效地址。

;假设(ds) = 3050Hmov ax,[0000] ;就是把内存在3050:0000内存的数据传送到ax中也可以⽤符号地址代替数值地址⽐如mov ax,[VALUE];就是把value的3050:value将value替换为数据跟上⼀样也可以⽤指定段寄存器来作为段地址也是可以的。

七种寻址方式

七种寻址方式

七种寻址方式标签:it一、立即寻址方式操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。

立即数可以是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分别是字节、字和双字单元。

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

该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。

立即数寻址方式通常用于对通用寄存器或内存单元赋初值。

图是指令“MOV AX, 4576H”存储形式和执行示意图。

二、寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。

把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。

指令中可以引用的寄存器及其符号名称如下: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等。

第三讲2 操作数的寻址方式

第三讲2 操作数的寻址方式

AX, [BX] 等效 MOV AX, DS:[BX] 例:MOV BX, [BP] 等效 MOV AX, SS:[BP]
例:MOV
操作数的EA为寄存器的内容 BX、SI 、DI-------DS BP------SS MOV BX,[SI]
例如:MOV AX,[BX]
该指令执行之前,DS=2000H,AX=54C8H,BX=0300H, 存储单元20300H的内容是6A9BH。 问:执行指令后,相关寄存器及存储单元的值是什么? 源操作数的地址为: EA=(BX)= 0300H PA=(DS)*16+EA=2000H*16+0300H=20300H
例 将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区
DATA BUFA COUNT BUFB DATA STACK STACK CODE START: SEGMENT DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H BUFB EQU ($-BUFA)/2 DW COUNT DUP (?) ENDS SEGMENT STACK DB 200 DUP(?) ENDS BUFA SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE MOV AX,DATA MOV DS,AX INC DI MOV SI,0 INC DI MOV DI,0 DEC CX MOV CX,COUNT JNZ LOP MOV AX,BUFA[SI] MOV AH,4CH MOV BUFB[DI],AX INT 21H INC SI CODE ENDS INC SI END START
将[DS:SI]为地址的一个字节/字传送到 [ES:SI]地址,然 后修改地址指针 SI,DI并使CX减1(计数) I/O端口寻址:端口 累加器(AL/AX) 使用间接端口寻址方式,须先将端口号传送到DX中。 IN AX,35H 直接端口寻址方式 8位地址可访问256 IN AL,DX 个端口 OUT 4FH,AL OUT DX,AX

汇编语言寻址方式及堆栈

汇编语言寻址方式及堆栈
段基址的高 16 位 :段内偏移量
③ 8088/8086 CPU 按代码段、数据段、堆栈段、 附加段对内存进行分类管理:
➢ 代码段:CS : IP; ➢ 堆栈段:SS : SP; ➢ 数据段:DS : 位移量+基址量+变址量
④ 寻址方式 ➢ 寄存器寻址方式(访问 CPU 完成数据处理的接口, 按“直呼其名”的方式进行); ➢ 立即数寻址方式(伴随指令序列来自于代码段的 常量); ➢ 数据段寻址是三种偏移分量的组合:
和 SP 的初值决定的。
本章习题
本章参考
第五章 第 1、12 题 汇编语言教程.chm
谢谢
段基址:偏移量
形成物理地址。由于在大多数使用场合地址指 针的段基址是“现成的”和隐含的,所以本小节讨 论的重点是“有效地址”——偏移量的问题。
偏移量是某存储单元和段基址间的距离,又被 称作有效地址。
偏移量或有效地址的形成:
偏移量=位移量+基地址+变址量
上述三个分量的不同组合,演绎出存储器寻 址的各种方式。
可以认为相对基址变址寻址方式是最一般的寻址 方式,其他寻址方式都可以看作是基址变址寻址方式 的特例。比如:
MOV AL, [100H+BX+SI] 去掉其中任一个或二个分量就会是某种其他寻址 方式。
3.1.4 寻址方式与常量、变量及“准指针” ① 立即数寻址方式对应汇编语言的常量; ② 存储器寻址方式对应汇编语言的变量; ③ 在各种地址指针寄存器参与的存储器寻址方式 中,地址指针寄存器充当“准指针”的角色。
① 直接寻址 是在指令中直接给出操作数地址偏移量的寻
址方式。比如把 200H 单元的内容送入AL: MOV AL, [200H]
No Image
注意直接寻址和立即数寻址方式区别:方括 号里的数字是操作数的有效地址,[200H]表示该 单元的内容。

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

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

内存操作数及寻址方法实验报告实验二内存操作数及寻址方法实验二内存操作数及寻址方法实验目的:通过实验掌握下列知识: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,1234MOV [1000],AXMOV BX,1002MOV BYTE PTR[BX],20MOV DL,39INC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846步骤:1)用A命令键入上述程序,并用T命令逐条运行。

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

注意D命令显示结果中右边的ASCII字符及双字节数存放法。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

答:不行。

二、求累加和程序:程序:MOV BX,1000MOV CX,10SUB AX,AXLOP: ADD AL,[BX]ADCAH,0INC BXJ: LOOP LOPINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。

-A 1002)用命令N AA将此程序命名为文件AA(文件名可任取)。

3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址)4)用命令W 100将此程序存到AA命名的磁盘文件中。

5)用命令Q退出DEBUG。

6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。

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

实验一内存操作数及寻址
通过实验掌握下列知识:
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:
MOV AL, [ESI]
ADC [EDI],AL
INC ESI
INC EDI
LOOP L1
......
1) 分析该程序段的功能;
2) 写出完整程序,验证分析的结果
三、自编程序:
1) 用8位加法指令实现一个完成64位数加法的程序;
2)用16位减法指令编一个32位(4字节)数减法程序;
四、凯撒密码:
凯撒密码是一种替换密码,通过字母替换对信息进行加密,如A替换成D,B替换成E,C 替换成F,... ...Y替换成B,Z替换成C,这样,COMPUTER可被加密成FRPSXWHU。

编写程序,将大写字母组成的字符串用凯撒密码加密,然后将加密的信息解密。

注:实验报告要求:
1、实验结果记录。

2、自编程序原稿及调试后修正稿,标注出原稿中的错误,分析错误原因,记录程序中的错误导致的结果。

相关文档
最新文档