实验三 汇编数据寻址的方法
北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。
寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。
可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。
汇编 od找基址方法

汇编od找基址方法
你好,这篇文章我尽量用四川方言、陕西方言和北京方言结合的方式来写,紧扣“汇编OD找基址方法”这个主题。
咱们先说说这汇编OD找基址的方法。
说白了啊,这就是个技术活,得靠
咱们这些搞技术的哥们儿来搞。
四川话来说,就是要“摸清楚”这个基址到底在哪儿。
陕西方言里,这就叫“寻摸”个东西出来。
首先啊,你得有个OD(OllyDbg)这样的反汇编工具,这就好比咱们手里
的放大镜,得靠它来看清楚代码的“庐山真面目”。
然后啊,你就得开始“扫描”这个程序的内存空间了,北京话讲就是“翻箱倒柜”地找。
在OD里,你可以设置一些条件来过滤出你感兴趣的部分,这就好比咱们
在菜市场里挑菜,只挑自己喜欢的。
然后啊,你就得开始“分析”这些代码了,看看它们都在干啥,哪些可能是我们要找的基址。
找基址这个过程啊,得有耐心,也得有经验。
有时候你可能得反复试错,才能找到正确的基址。
这就像咱们小时候玩捉迷藏,得反复试探,才能找到藏身的小伙伴。
不过啊,一旦你找到了基址,那就啥都好说了。
你就可以“操控”这个程序了,想让它干啥就干啥。
这就好比咱们掌握了遥控器的密码,想看啥节目就看啥节目。
所以说啊,汇编OD找基址这个方法,虽然听起来复杂,但只要你掌握了
技巧,就不难了。
四川话讲就是“熟能生巧”,陕西方言里叫“练出来的”,北京话就是“多练练就会了”。
好了,今天就跟大家聊到这儿,希望这篇文章能帮到你。
如果你还有其他
问题,随时问我啊!。
汇编语言--操作数的寻址方式(三)

汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在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章 指令系统和寻址方式

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)
内存操作数及寻址方式的使用

武汉工程大学电气信息学院《面向对象程序设计》实验报告[ 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这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。
实验三:数据存取实验

一.实验目的1.了解TMS320C6713 的内部存储器空间的分配及指令寻址方式。
2.了解ICETEK-C6713-A 板扩展存储器空间寻址方法,及其应用。
3.了解ICETEK-C6713-EDU 实验箱扩展存储器空间寻址方法,及其应用。
4.学习用Code Composer Studio 修改、填充DSP 内存单元的方法。
5.学习操作TMS320C6x 内存空间的指令。
二.实验设备计算机,ICETEK-C6713-EDU 实验箱(或ICETEK 仿真器+ICETEK-C6713-A 系统板+相关连线及电源)。
三.实验原理1.TMS320C6713 DSP 内部存储器资源介绍:2.ICETEK-C6713-A 板对TMS320C6713 DSP 存储空间的扩展16M 字节SDRAM 在CE0 空间,起始地址为80000000h,16 位位宽;1M 字节FLASH 在CE1 空间,起始地址为90000000h,16 位位宽。
3.ICETEK-C6713-EDU 实验箱对TMS320C6713 DSP 存储空间的使用地址范围:901F0000h—901FFFFFh数据宽度:16 位901F0000h:ICETEK-CTR 全局控制寄存器写地址901F0002h:读取键盘扫描码地址,液晶命令写地址901F0004h:清除键盘缓冲区读地址,液晶控制写地址901F0006h:液晶左侧显示数据写地址901F0008h:液晶右侧显示数据写地址901F000Ah:发光二极管阵列数据写地址901F000Eh:发光二极管阵列使能、交通灯状态、PWM 状态写地址、直流电机使能位其它地址:保留4.MS320C56713 数据寻址方式介绍C6000 全部采用间接寻址,所有寄存器都可以做线性寻址的地址寄存器指针。
A4-A7,B4-B7 等8 个寄存器还可作为循环寻址的地址指针。
四.实验步骤1.实验准备(1)连接设备:①关闭计算机和实验箱电源开关。
内存操作数及寻址方法实验报告

内存操作数及寻址方法实验报告实验二内存操作数及寻址方法实验二内存操作数及寻址方法实验目的:通过实验掌握下列知识: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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三汇编数据寻址的方法(2学时)实验目的
通过实验掌握下列知识:
1、DEBUG命令:G,N,W,L及Q。
2、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
3、8086指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。
4、8086汇编语言伪操作: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
操作步骤
一、内存操作数及各种寻址方式使用
程序内容:
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伪操作不加行不行?试一试。
寄存器寻址
2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH, 0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
程序清单如下:
MOV AX,BX
MOV AX,0304H
MOV AX,[0304H]
MOV AX,[BX]
MOV AX,0001[BX]
MOV AX,[BX][SI]
MOV AX,0001[BX][SI]
把bx,si以及ds:300到ds:304设置为0a,0b,0c,0d,0e
用-a输入代码
分析:MOV AX,BX 把bx送入ax中,ax=0300H
MOV AX,0304H ax=0304
MOV AX,[0304H] 把0304地址的内容赋给ax,ax=0e
MOV AX,[BX] 因为,bx=0300,所以ax=[0300]=0a
MOV AX,0001[BX] ax=[0301]=0b
MOV AX,[BX][SI] ax=[0300]2=[0302]=0c
MOV AX,0001[BX][SI] ax=0001[0300]2=[0303]=od
二、求累加和程序:
程序内容:
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用实际地址值代替。
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命令将文件调入。
7)用E命令在内存地址1000H处键入16个数字
8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。
9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,
检查程序是否有错。
10)重复G J与T,再检查AX是否正确。
11)用G命令使程序运行到结束,检查AX值是否正确。
三、多字节加法程序。
程序:
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
步骤:
用命令键入此程序
用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?
将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。
四。
自编程序:
用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同上题。
调试并做记录。
MOV DI,1000
MOV CX, 4
MOV SI ,2000
CLC
LOP:MOV AL[SI]
SBB [DI],AL
INC SI
INC DI
LOOP LOP
INT 20。