汇编语言lea指令取数组偏移地址

2024-08-21 09:04

本文主要是介绍汇编语言lea指令取数组偏移地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近看到一条指令,x86汇编,

    LEA BX, 6[DI]
根据资料,它的含义是,某数组含20个元素,每个元素占一个字节,序号为0~19。设DI指向数组开头处,把序号为6的元素的偏移地址送到BX中;

lea指令,

Load effective address,取有效地址,也就是取偏移地址;
lea指令用于把源操作数的地址偏移量传送目的操作数。

不知道这条指令是不是对的,6[DI] 这种写法没见过;

不太熟悉汇编;下面dosbox,debug看一下;

assume cs: codesg,ds:datasgdatasg segment
arr1 db 1,2,3,4,5,6,7,8,9,11,22,33,44,55,0h  
datasg ends   codesg segment
START:
MOV AX, datasg  
MOV DS, AX 
MOV DI, DS
LEA BX, 6[DI]    
codesg endsEND START

它是说DI指向数组开头,数据段里只有一个数组arr1,把datasg赋给DS,DS现在应指向数组开头,再把DS赋给DI,现在DI应指向数组开头;

然后再执行 LEA BX, 6[DI] ;debug看一下bx寄存器的值;

代码保存为2.asm,可以构建出2.exe,所以代码的写法是可以的;

debug 2.exe,先打r看一下寄存器的值,此时程序还没开始执行,

然后打t, t, t,单步执行3条;各寄存器的值如上图,此时还没执行 LEA BX, 6[DI],BX寄存器的值是0,如上图;

然后再单步执行一条,看一下BX寄存器的值变为0770,

 

看上去没问题,还不熟悉,有时间继续;

另外我用emu8086编译了一个2.bin出来,

 

debug可能不能调试bin的可执行文件,debug装载2.bin以后,它出来的第一条指令不是我们的指令,是乱的,

 

 

这篇关于汇编语言lea指令取数组偏移地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092712

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,