- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
mov ax,10
mov bx,4
mov si,ax
mov ax,bx+si+1
LEA ax,[bx+si+1]
当我将 bx,si 和 1 加在一起并移动到 ax 时,结果为 0。在下一行,当我使用 LEA 时它起作用并且我得到 15。
为什么我在使用 move 时得到零?
最佳答案
您的问题是:“为什么我从 mov ax, bx+si+1 得到零?”。很难给你一个准确的答案,因为你忘了告诉你使用的是什么编译器,而且你的代码片段不包含数据段,所以我们看不到你的数据。我们可以做的是用数据段中的一些数字测试您的代码并查看结果:
.model small
.stack 100h
.data
xy db 0A0h,0A1h,0A2h,0A3h,0A4h,0A5h,0A6h,0A7h,0A8h,0A9h,0AAh,0ABh,0ACh,0ADh,0AEh,0AFh,0B0h
.code
mov ax, @data
mov ds, ax
mov ax, 10
mov bx, 4
mov si, ax
mov ax, bx+si+1 ;◄■■ #1 (EXPLANATION BELOW ▼)
LEA ax, [bx+si+1] ;◄■■ #2 (EXPLANATION BELOW ▼)
让我们来说明这里发生了什么:
这是正在发生的事情:
#1 由于基址寄存器 (bx
) 和变址寄存器 (si
) 的存在,总和被解释为内存寻址,因此代码获取内存位置 15 中的数据。ax
寄存器大小为 2 个字节,因此结果是 ax
从内存位置 15 开始获取 2 个字节,在我们的数据段中,这 2 个字节是 0AFh
和 0B0h
。 al
是ax
的低字节,所以第一个字节(0AFh
)存储在那里,高字节ah
获取第二个字节 (0B0h
),这就是 ax
变成 0B0AFh
的方式。
#2 我们说过基址寄存器 bx
和索引寄存器 si
的存在被解释为内存寻址,所以 [bx+si+1]
指向内存位置 15 (0AFh
)。 lea
指令代表load effective address
,其目的是从数据段内部获取一个地址。您的代码行正在获取内存位置 15 (0AFh
) 的有效地址,即 15。
这么多的理论需要论证,这里是:
接下来是 EMU8086 的截图:BLUE 箭头指向原始代码行,GREEN 箭头指向被解释的代码行(作为内存寻址),RED 箭头显示寄存器 ax
(B0AFh
) 中的效果。
现在是下一条指令的屏幕截图:BLUE 箭头指向原始代码行,GREEN 箭头指向被解释的代码行(注意它与前一个相同),RED 箭头显示寄存器 ax
(0Fh
) 中的效果。
最后,让我们在Visual Studio 2013中测试代码:下一个截图证明mov ax, bx+si+1
是无效的,而另一行给出了与EMU8086相同的结果(斧头
=0FH
) :
那么,“为什么你从 mov ax, bx+si+1 得到零?”因为您的数据段内的内存位置 15 中可能有一个零。您可能认为 bx+si+1
会给您一个正常的数字 15,但现在您知道使用基址寄存器和变址寄存器将被解释为内存寻址,所以您不必'得到数字 15 但内存位置 15 中的数据。
关于assembly - 为什么我从 mov ax, bx+si+1 得到零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719027/
我正在尝试运行以下命令: -i "2020_11_30_03_37_37.mp4" -i "2020_11_30_03_37_44.jpg" -f lavfi -t 6.016 -i anul
我正在设计一个散点图。在以下示例中,比例函数的输入域为[0.04, 0.9]。 .tickFormat(d3.format(".1s")) 用于轴上,以便在需要时显示 SI 缩写。运行以下截图时,您会
我正在尝试计算下面给定的 c 程序的输出,但无法弄清楚。 为什么 si = 0? #include int main(void){ float p = 1000; float r =
我有一个使用 spring-integration 的代码库。 myCustomFilter 的 bean 工作正常,我在 myDataGetter
是否有 R 函数(或任何包)允许使用标准单位前缀(Kilo、Mega 等...)格式化数字(整数),所以 10 -> 10 1000 -> 1K 0.01 - > 10m 等等... 我可以自己做,但
我正在寻找一个正则表达式来检查 http 表单中的有效 SI 单位输入。例如, kg/m^3 对密度或 m/s^2 为加速。 似乎是在一些开放图书馆中可能已经解决的那种问题;或者可能有一种聪明的方法可
使用文件适配器移动文件你好我想在文件被消耗或失败后移动成功文件夹中的文件出现问题时的文件夹。 我发现了不同的例子,但我想不出一个简单的例子使用文件适配器移动文件的解决方案 可能我在使用 Spring
以我为例: d3.format("~s")(656628); //656.628k 但我的预期结果:656.63k 我想使用 d3-format 选项而不是手动处理它。 现场测试:https://np
我有一个 CSV 文件,其中包含一列,其值以 SI 比例给出因素。我需要对该列进行数字排序。具体来说,CSV 文件包含著名天文物体(Messier 物体)的列表,我需要按距离对它们进行排序。问题是距离
我正在绘制一个图表,该图表获取美元值(value)(从 0 到数百万),并且我试图显示漂亮的刻度。我已经使用 d3.nice 获得了 5 个刻度,所有刻度都有很好的值,这非常酷。但由于差异如此之大,我
我正在寻找一种优雅的方式来使用最合适的前缀来漂亮地打印物理量(例如 12300 克 是 12.3 千克)。一个简单的方法如下所示: def pprint_units(v, unit_str, num_
我正在理论上从高中学习ASM 8086。 当我这样做时:MOV BX,[SI] SI + 1是去BH还是BL? 谢谢 :-) 最佳答案 因为x86是little endian,所以存储位置SI + 1
为了在SI图像中进行漂移校正,如下图所示: 我写代码: number max_shift=5 image src := GetFrontImage() number sx, sy, sz src.Ge
我经常在 GNU R/ggplot 中绘制一些与字节相关的测量图表。内置轴标签可以是普通数字或科学记数法,即 1 MB = 1e6。我想要 SI 前缀(Kilo = 1e3、Mega=1e6、Giga
我不明白有什么区别。 最佳答案 当您使用 movsb 等指令时,si 被视为源源寄存器,而 di 被视为目标目标寄存器。但它们都是普通的 x86 寄存器。 关于assembly - SI 和 DI 寄
我准备了一个小型 WPF 应用程序: 查看: View-Model 如下所示: 现在,出于某种原因,斯洛文尼亚文化的日、月和年之间有空格: 我的意思是,我得到的不是 14.01.2019,而是 14.
在高网络流量下,在CentOS上使用LVS或Nginx进行负载均衡。网络流量主要是具有大量连接和相对低带宽的小数据包。 唯一似乎成为瓶颈的是高 SoftIRQ,这对基于事件的 IO 来说并不奇怪。 机
嗯,这显然是一个初学者的问题,但这是我第一次尝试用 C 制作操作系统(实际上,我对 C 几乎完全陌生.. 我已经习惯了 asm) 那么,为什么这到底是无效的呢?据我所知,C 中的pointer 只是一
我正在寻找一个支持在各种 SI 前缀之间转换数字的 python 库,例如,kilo 到 pico,nano 到 giga 等等。你会推荐什么? 最佳答案 我移植了一个简单的函数(original C
我想在医学环境中的 Modelica 模型中使用非 SI 单位。我在 Dymola 中使用 Modelica。作为一名工程师,我更喜欢 SI 单位。但是我的模型参数来自医学出版物,我想避免转换错误。医
我是一名优秀的程序员,十分优秀!