第041课 80x86寻址方式与函数

80x86汇编系列(一):寄存器 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 阅读详情
 第041课   80x86寻址方式与函数
​1. 指令1 -- 组成
                                                  操作码     操作数
指令由操作码和操作数两部分组成
操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分
操作数是指令执行的参与者,即各种操作的对象
有些指令不需要操作数,通常的指令都是有一个或两个操作数,也有个别指令由3个甚至4个操作数

​1. 指令2 -- 操作码和操作数
各种指令的操作码:
用一个唯一的助记符表示(指令功能的英文缩写)
对应着机器指令的一个二进制码
指令中的操作数:
可以是一个具体的数值
可以是存放数据的寄存器
或指明数据在主存位置的存储器地址
                                             MOV          AX,                12
                                           操作码   目的操作数      源操作数
一般左手: 目的操作数
一般右手: 源操作数

mov AX, 12          // 一个机器码
mov BX, 12          //另一个机器码

​1. 指令3 -- 指令的助记符格式
                               操作码  操作数1, 操作数2 ; 注释
操作数2, 称为源操作数src,它表示参与指令操作的一个对象
操作数1,  称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果
分号后的内容是对指令的解释
例如:
                         mov dest, src ;  dest  ---> src
 mov指令的功能时将源操作数src传送至目的操作数dest
例如:
                         mov AL, 05     ;    AL  <--- 05
                         mov BL, AX     ;    BX  <--- AX    

​1. 指令4 -- MOV指令动画原理

​1. 指令5 -- 指令操作数的表达
r8      :   任意一个8位通用寄存器
              AH  AL  BH  BL  CH  CL  DH  DL
r16    :   任意一个16位通用寄存器
              AX   BX  CX  DX  SI   DI   BP  SP
reg    :   代表r8或r16(32位环境下代表r8或r16或r32,64位同)
seg    :   段寄存器 CS/DS/ES/SS
m8    :   一个8位寄存器操作数单元(所有主存寻址方式)
m16  :   一个16位寄存器操作数单元(所有主存寻址方式)
mem :   代表m8或m16(32位环境下代表m8或m16或m32,64位同)
i8       :   一个8位立即数(C中一个整型常量)
i16     :   一个16位立即数
imm   :  代表i8或i16(32位环境下代表i8或i16或i32,64位同)
dest   :  目的操作数
src      :  源操作数




鲁鹏飞 2014/9/28 22:22:31

1. 指令6 -- 汇编语言的多种表达方式

同一寻址方式可以写成不同的形式:
MOV AX, [BX][SI]
             ; 等同于 MOV AX, [BX + SI]
MOV AX, 12[SI]
            ;  等同于 MOV AX, [SI + 12]               ----> 推荐写法
MOV AX, 12[BX][SI]
            ;  等同于MOV AX, 12[BX + SI]
            ;  等同于MOV AX, [BX + SI + 12]        ----> 推荐写法

​2. 8086的寻址方式1 -- 学习方法

从8086的机器代码格式入手, 论述:
立即数寻址方式
寄存器寻址方式
存储器寻址方式

进而熟悉8086汇编语言指令格式,尤其是其中操作数的表达方法;为展开8086指令系统做好准备

​2. 8086的寻址方式2 -- 立即数寻址

指令中的操作数之间存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)
这种操作数被称为立即数imm
它可以是8位数值i8(00~FF)
也可以是16位数值i16(0000~FFFF)
立即数寻址方式常用来给寄存器赋值
 MOV AL, 34h      ; 34为立即数寻址,在代码段里面
 opcode: B0 34
10100    B0
10101    34
  CS:1000
  IP   : 100
CS*10h + IP = 10100处读字节运行



---------------------------------------------------------------------------------------------

指令字节缓冲器
送去cpu执行时,是一个字节一个字节执行的
cpu直接交互  <----> 一级缓存  <---> 二级缓存 <---> 三级缓存
代码不是一个数,没有必要根据大、小尾方式反着读
Intel精妙之处,google查阅opcode hack
通过修改有效的几个字节完成复杂的功能
人为制造截断,截断后指令完成了新功能,看似是错误代码,实际是被精心构造的代码
内存hook, 指令引擎
返回指令长度,inlinehook
MOV AL, B0 ;这种情况,指令截断时,将B0解释成MOV AL, XX解释了
总结可重复利用的规则
不断挖掘新规则,可利用的规则越多,故意向这些规则倾斜

处理器 无法区分指令和数据
如果10100执行的是图片数据,将IP指向其,CPU都会尝试执行

MOV AX, 1234
先移动34到内部暂存器,在移动12到内部暂存器
再整合,做加法运算

只能区分一条指令内,哪是代码哪是数据

让小孩分辨男人、女人,要告诉他哪是男哪是女
计算机也一样,先告诉它B0 34是一条指令,计算机才能识别出B0是代码,34是数据

CS和IP搭配,从代码段取机器码,执行
SS和SP搭配,从堆栈取数据
----------------------------------------------------------------------------------------------------------

​2. 8086的寻址方式3 -- 寄存器寻址

操作数存放在CPU的内部寄存器reg中,可以是:
8位寄存器r8:
AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器r16:
AX、BX、CX、DX、SI、DI、BP、SP
4个段寄存器seg:
CS、DS、SS、ES

MOV BX, AX(以源操作数为准说明寻址方式)
MOV后, AX里的内容不变,和一般的移动理解不同
MOV ds, ax
10100 8E   MOV DS,
10101 D8  AX

MOV DS, CX    8ED9          
MOV DS, BX    8EDB
MOV DS, DX    8EDA
D9,DB,DA表示源操作数代表哪个寄存器

​2. 8086的寻址方式4 -- 存储器寻址方式

指令中给出了操作数的主存地址信息(偏移地址,称之为有效地址EA),
而段地址在默认的或用段超越前缀指定的段寄存器中

8086设计了多种寄存器寻址方式
直接寻址方式
寄存器间接寻址方式
寄存器相对寻址方式
基址变址寻址方式
相对基址变址寻址方式

​2. 8086的寻址方式5 -- 直接寻址

有效地址在指令中直接给出
默认的段地址在DS段寄存器,可使用段超越前缀改变
MOV AX, [2000H]
; AX <-- DS:[2000H]
; 指令OPCode: A10020
MOV AX, ES: [2000H]
; AX <-- ES:[2000H]
; 指令OPCode: A10020

​2. 8086的寻址方式6 -- 寄存器间接寻址

有效地址存放在基址寄存器BX或变址寄存器SI、DI中
默认的段地址在DS段寄存器,可使用段超越前缀改变
MOV AX, [SI]  ; AX <--- DS:[SI]

MOV AX, [BX]
10100 8B
10101 07

用途:
call eax;                //虚函数调用方式
3环 --> 0环          //系统服务调度表,大数组, 某个函数调用 

鲁鹏飞 2014/9/28 22:22:42

2. 8086的寻址方式7 -- 寄存器相对寻址(加一偏移)

有效地址是寄存器内容与有符号8位或16位位移量之后,寄存器可以是BX、BP或SI、DI
有效地址 = BX/BP/SI/DI + 8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS,可用短超越前缀改变
例如:
MOV AX, [DI + 06]   ; AX <---DS:[DI+06]
MOV AX, [BP + 06]  ; AX <---SS:[BP+06]
用于寻址结构体成员,BX/BP/SI/DI指向首结构体首地址,偏移为跳过的成员大小

MOV AX, 1000[SI]                 ;SI内为1000
10100 8B                                 ; MOV AX, 
10101 84                                 ; [SI]       
10102 00                                 ; 1000的00
10103 10                                 ; 1000的10

计算SI+1000时会用到ALU( 逻辑算术单元)

​2. 8086的寻址方式8 -- 基址变址寻址(俩寄存器)

有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:
有效地址 = BX/BP + SI/DI
段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS,可用段超越前缀改变
例子:
MOV AX, [BX + SI]        ;  AX  <-- DS:[BX + SI]
MOV AX, [BP + DI]        ;  AX <-- SS:[BP + DI]
MOV AX, DS:[BP + DI]  ;  AX <-- DS:[BP + DI]

MOV AL, [BX][SI]             ; BX: 1500, SI: 500
10100 8B
10101 00
-------------------------------------------------------------
反汇编引擎,不用写商业代码
某一指令的所有操作数都解析出来,就可以了
其他指令也就会了
--------------------------------------------------------------

​2. 8086的寻址方式9 -- 相对基址变址寻址(俩寄存器加一偏移量)

有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:
有效地址 = BX/BP + SI/DI + 8/16位位移量
段地址对应BX基址寄存器默认是DS, 对应BP基址寄存器默认是SS, 可用段超越前缀改变
例子:
MOV AX, [BS + SI + 06H]   ; AX  <--- DS:[BX + SI + 06H]

MOV AL, 1000[BX][SI]
10100 8B
10101 80
10102 00
           10

以上例子中,所有8B机器码, 代表mov al或mov ax或mov eax

3. 栈1 --- 介绍

堆栈是一个"后进先出LIFO"(或说"先进后出FILO")的主存区域,位于堆栈段中,SS段寄存器记录其段地址
堆栈只有一个出口,即当前栈顶; 用堆栈指针寄存器SP指定,栈顶是地址较小的一端(低端),栈底不变


​push ebp              //保存旧栈底

mov  ebp, esp      //打开栈帧
sub   esp,0c          //开辟空间,抬高栈顶(由高到低增长)

函数分析示例:
Add(nNum1, nNum2, nNum3)  //3个数相加求和
0x002000E4  0000 0003  <---  Local_3
0x002000E8  0000 0002  <---  Local_2
0x002000EC  0000 0001  <---  Local_1
0x002000F0      旧EBP       <---  EBP = 0x002000F0 (mov ebp,esp)
0x002000F4   ?????????    <---  返回地址
0x002000F8   00001111   <---  Parm_1
0x002000FC   00002222   <---  Parm_2
0x00200100   00003333   <---  Parm_3


栈帧: 从EBP到ESP之间, 属于函数内部的东西

​push ebp              

mov  ebp, esp
debug版有,release没有了

栈只保存这三种数据: 函数参数、局部变量、返回地址

栈溢出,到栈里面运行
stdcall,是这种模式的调用

push ebx          //保存要使用的寄存器的原值
push esi
push edi

堆栈开辟一大片空间,填充成0xcc(即int 3断点),相当于下一大片int3断点。形成错误着陆区

lea edi, [ebp-0C0]
mov ecx,30
mov eax,CCCCCCCC
rep stos dword ptr [edi]

mov eax, dword prt [ebp + 8]              //第一个参数
add  eax, dword prt [ebp + 0C]           //第二个参数
add  eax, dword prt [ebp + 10]           //第三个参数


pop edi                                                   //恢复寄存器值
pop esi
pop ebx

恢复sub开辟的栈空间:
1.可以add esp, 0xC0

2.由于将以前的esp保存到了ebp中,所有直接用ebp恢复esp也行
mov esp,ebp       

pop ebp                                                   //恢复旧ebp       

汇编默认规定,将返回值保存在eax里面
dword ptr : 双字类型的指针,ptr 即 pointer缩写              

​debug模式下,各个参数之间添加0xCCCCCCCC,方便出错时调试

00000003
CCCCCCCC
00000002
CCCCCCCC
00000001
CCCCCCCC
原EBP
返回地址

鲁鹏飞 2014/9/28 22:22:52

交换两个数的值的另一种方法:
push eax
push ecx
pop eax
pop ecx

堆栈平衡
人为构造不平衡
push eax
push ecx
push 123123
pop ecx
pop ecx

内核中,有个专门的线程,在系统空闲时,将栈内垃圾值置0


实验一:
将Add函数的默认开辟栈空间大小由0xE4, 改为0xA1


int Add(int nNumA, int nNumB, int nNumC)
{
   int nNA = 1;
   int nNB = 2;
   int nNC = 3;
   return nNumA + nNumB + nNumC + nNA + nNB + nNC;
}
int _tmain(int argc, _TCHAR* argv[])
{
   int nNum = Add(0x1111, 0x2222, 0x3333);
   return 0;}  


步骤1:
查找main函数,在C运行时库里找,enter进入



步骤2:

找到main函数,enter进入



步骤3:

找到Add函数,enter进入



步骤4:

记录sub指令地址, 0x013A2363



步骤4:

查看Add模块基址0x0139000



步骤5:

计算相对虚地址(Relative Virtual Addresses): 0x013A2363 - 0x0139000 = 0x12363
LoadPE计算文件偏移0x1763



步骤6:

010edit打开Add.exe, cltr+g,1763


找到数据81 EC E4,将E4修改成A1



步骤7:

OD重新打开后,开辟栈空间大小即0x0A1




实验二:

OD内写一个两个数的加法函数,并调用它




实验三:

修改一个程序,使其在运行前弹出对话框
80x86汇编系列(二):寻址方式 80x86汇编系列(二):寻址方式 概述 80x86汇编代码中,一条带有操作数的指令要确定寻找操作数存放地址的寻址方式。80x86 指令中的操作数可以存放在三种不同的部件中:第一种是 CPU 内的寄存器中,第二种是主存中,第三种是 I/O 设备的端口中。这里主要记录了前两种寻址方式。 文章目录80x86汇编系列(二):寻址方式概述寄存器寻址寄存器间接寻址变址寻址基址加变址寻址立即寻址直接寻址寻址方式的有关问题 寄存器寻址 在寄存器寻址方式中,指令所指明的寄存器就是操作数的存放地址。 使用格式:R 示例: 阅读详情

相关推荐

OD汇编指令集(不断更新)

一、快捷键 F7 执行一行代码,遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。 F8 执行一行代码,遇到 CALL 等子程序不进入其代码。 F2 在显著行设置断点,再次按 F2 删除断点。 F9 F9运行调试程序,直到遇到断点停止运行,Debug->Run。 F12 临时暂停程序,Debug-> Pause。 二、寄存器 ESP 指向堆栈最顶端的地址。 EIP 指向当前将要执行的指令的地址。 EAX ECX EDX EBX ESP EBP ESI E

业精于勤,荒于嬉 2430

复古硬件编程实战:手把手教你用8086和8253芯片,在Proteus中仿真一个数字频率计

本文详细介绍了如何使用8086 CPU和8253定时器芯片在Proteus仿真环境中构建数字频率计。通过深入解析硬件电路设计、芯片配置和混合编程技巧,帮助开发者掌握复古硬件编程的核心技术,实现精确的频率测量功能。

weixin_30460489的博客 551

从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战

本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。

weixin_30520015的博客 1285

汇编指令 栈现场保护 算数运算 位运算 比较指令 跳转指令 循环指令 寻址方式

定义:对操作数进行赋值,操作数可以是寄存器、数值、间接寻址的内存数据。add:加法指令,2个操作数相加,结果返回给第1个操作数。sub:减法指令,2个操作数相减,结果返回给第1个操作数。定义:是对标志位进行的现场保护。定义:去内存地址(非数据)定义:对寄存器的现场保护。定义:不执行任何操作。popad作用则相反。

有勇气的牛排博客 3415

关于石墨烯费米能级和偏置电压之间的关系问题

石墨烯费米能级与电压的关系问题

qq_37946542的博客 3514

MFC工具栏增加EditBox和Button

1. 在资源视图中增加EditBox, Button控件,ID分别为ID_EDIT_SEED, ID_BTN_SEED 2. 在CMainFrame中增加成员变量 CMFCToolBarEditBoxButton *m_editSeed; CMFCToolBarButton *m_btnSeed; 3. 在CMainFrame::OnCreate中创建控件 m_editSeed = new CMFCToolBarEditBoxButton(ID_EDIT_SEED, GetCmdMgr()-&.

学习是为了探索这个世界的本质 802

汇编(五)堆栈平衡和寻址方式-ESP EBP

文章目录前言环境函数构架模型编写代码:堆栈传参ESP寻址堆栈平衡EBP寻址 前言 本文汇总五个重点,为了学起来更加方便我将他们按照递进关系重新排列。分别是: 函数、传参、ESP寻址、堆栈平衡、EBP寻址。 看完本文就能感受到我这么安排的用意。 环境 为了更加深入理解,先假设你接到了一项任务:用汇编语言实现一个两数相加求结果的功能,并且要多次使用。 函数 因为要多次使用该功能,所以我们要选择函数来解决。和c语言差不多,汇编的函数也是在一个“模块”中调用另一个“模块”。这只是笼统的介绍,下面演示一下实际操作:

weixin_51555115的博客 1709

RK3576的ISP和VPSS图像处理能力实测:对比海思方案能做什么?

本文深度评测了RK3576芯片的ISP和VPSS图像处理能力,并与海思方案进行对比。测试显示,RK3576在MIPI接口灵活性、多路视频支持、HDR动态范围和降噪效果等方面表现优异,特别适合智能视觉和安防监控应用。通过实测数据展示了其在低照度、高动态范围等复杂场景下的卓越性能。

weixin_42713608的博客 265

关于用二维数组调用函数的寻址(多维数组和指针)

<br />本文是关于C语言多维数组与指针的一个例子。直接上代码,我们来分析程序运行结果<br /><br /> <br />#include <stdio.h><br />#include <stdlib.h><br /><br />//使用数组表达式访问元素<br />void output(int** a)<br />{<br />        int i;<br />        int j;<br />       for (i=0; i<2; i++)<br />       {<br />

alionkun 4308

链接文件及功能安全:基于Tasking的LSL链接文件知识点梳理及实际应用分析

本文旨在记录研究链接文件时所遇到的问题及个人理解,以便日后查阅。在探索过程中,我遇到了诸多问题,同时对链接文件有了初步的认识。通过记录这些问题与理解,我希望能够为后续的研究提供清晰的思路和有价值的参考。这不仅是对研究过程的总结,更是对未来学习和实践的有力支持。

梦想技术家 1103

指纹浏览器指纹工厂(下):基于真实设备数据特征的马尔可夫链生成与校验

本文揭示了静态指纹生成算法在高级风控时序追踪下的致命缺陷,指出违背设备演进马尔可夫性质(如无状态跳跃、因果断裂)是导致指纹存活率骤降的核心原因。通过分析风控系统的时序状态机与多维特征验证机制,提出基于隐马尔可夫模型(HMM)的动态指纹架构:以真实设备的状态转移链为蓝本,构建异步演进的“数字基因熔炉”,通过非均匀时间步长、突发事件响应及微观因果绑定,模拟软硬件独立更新的物理法则。最终实现指纹在时间维度与微观特征上的自洽,规避风控的时序陷阱。

数据知道的博客 418

【汇编程序】最全80x86指令详解

声明:博主原创,禁止转载。邮箱:qxlxi@qq.com 8086指令系统 传送寻址方式 寻址特点: 计算机的指令通常包含操作码和操作数部分。 立即寻址方式 Mov al,32 立即数只能作源操作数,不能作目的操作数。(遇到A-F开头的数字出现在指令中时,要加上一个数字0 Mov AX,0FF00H) 寄存器寻址方式 在寄存器寻址方式下,操作数包含在寄存器中, 对于1...

芝兰生于深谷,不以无人而不芳 6738

如何使用tinyalas接口从usb录音的同时从扬声器播放

3、 以上步骤确认完后,就可以修改tinyhostless.c程序,tinyhostless的本质就是边pcm_read(),边pcm_write();但原本tinyhostless只支持对同一声卡进行操作,所有需要修改其代码,改成录音和播放可支持不同声卡,如果是模拟声卡,有回环测试,可以实现边录边播放,但涉及USB声卡时,就没有现场的类似功能,有时候客户因为硬件特殊性,会有从USB录音的同时从扬声器播放出来的需求,本文简要描述如何使用tinyalsa接口实现该需求;

sdrgtywretyeruet的专栏 971

汇编语言数据寻址方式

数据寻址方式 1、 立即数寻址 立即数寻址:指令需要的操作数紧跟在操作码之后称之为指令机器码的一部分,并随着处理器的取址操作需要从主存进入指令寄存器。这些操作数用常量形式直接表达,从指令代码中立即得到立即数,立即数寻址方式只用于指令的原操作数,在传送指令过程中常用来给寄存器和存储单元赋值。 2、 寄存器寻址 指令的操作数存放在处理器的寄存器中,就是寄存器存储方式绝大多数的指令采用通用寄存器寻址(I...

Clown_pan的博客 1737

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汇编语言(二)——80x86指令系统和寻址方式

3.1 80x86的寻址方式 寻址的概念 汇编指令格式:操作码 [操作数1 [,操作数2 [,操作数3]]] [;注释 ] 寻址、寻址方式的概念:寻址——寻找操作数的地址;寻址方式——寻找操作数地址的方法 ...

Double___H的博客 1145

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汇编指令说明

" "∶教材符号 +、-、*、/∶算术运算符。 &∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。 $∶地址计数器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。 ?∶操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空

alee007的空间 4233

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

获取函数地址的方法

获取函数地址

一个勤奋的coder的博客 1995

80X86寻址方式与常见汇编指令

1、指令      指令:操作码和操作数组成(不定有操作数);      操作码:执行操作,用一个唯一的助记符表示,对应着机器指令的一个二进制编码;      操作数:操作对象,可以是数值,寄存器或存储器地址;      助记符格式:      操作码  目的操作数,源操作数;注释      指令操作数:      r8:任一8位通用寄存器;      r16:任一16位通

Floydwish的博客 3960

80X86寻址方式总结

80X86寻址方式总结

cay22的专栏 2157

80x86的7种寻址方式

80x86的7种寻址方式 所需知识点:一个寄存器可以储存16bit信息,即1个字,也可以分成2部分(高位字节和低位字节),每部分存储8bit即1字节 1.立即寻址 操作数在指令中,紧跟在操作码之后,这样的操作数成为立即数 例如: MOV AL,12H MOV AX,1234H 2. 直接寻址 操作数的地址中的偏移量直接跟在操作码之后,默认情况下基址存放在DS中,这个时候不需要加前缀,如果是加了别的...

qq_43748400的博客 4666

寻址方式

寻址方式就是寻找操作数或操作数地址的方式。8086提供了与操作数有关和与I/O端口地址有关的两类寻址方式。与操作数有关的寻址方式有七种,分别是立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址加变址寻址,相对基址加变址寻址;与I/0端口有关的寻址方式有直接端口寻址和间接端口寻址方式。另外还有隐含寻址,即把要寻找的地址包含在操作码中。 目录 1简...

weixin_30321449的博客 766

回调函数寻址速度

一直搞不清回调函数寻址速度是内嵌的快还是先声明的快,所以写了个测试代码!发现结果是速度相当,没有分别  代码如下 unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  T

Im17benteng的专栏 1042

8086的寻址方式及例题解析_【80x86汇编】与数据有关的寻址方式

寻址方式(addressing mode)是指令取得操作数地址所使用的方式,与数据有关的寻址方式通过确定操作数地址来找到操作数。以下方式以MOV指令为例。非存储器寻址MOV AX, 1234HMOV指令将目标操作数(第二个操作数)1234H赋值给源操作数(第一个操作数),即赋值给AX寄存器。此时3064H这个数被称为立即数,它是指令的一个组成部分,与指令存放在一起,即存放在代码段中。这是立即寻址...

weixin_30789297的博客 1829
上一篇: 基本指令的汇编格式
下一篇: MultiByteToWideChar(char *转Unicode)
why99fun
博客等级 码龄18年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值