- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的老师在类里面给我们布置了一项作业。问题是我们在类里面没有讨论位移位,所以我有点不知道如何做到这一点。在作业说明中,他告诉我们以下内容:
我们从 4 个变量开始:
作业的第一部分是移动它们,因此我们最终得到以下顺序:
我成功完成了这一部分,我只是提供了上下文。下一部分是我遇到问题的地方。在第二部分中,我们需要将这些变量移至寄存器 eax 中。 var1 必须存储在 eax 的最高字节中,var2 存储在第二高字节中,war3 存储在第二低字节中,var4 存储在最低字节中。
最终结果应为 eax = 444144243
所以这是我对这个问题的了解:
我该如何移动 var1,使其最终与其他变量一起位于 eax 的高 16 位中?
注意:我没有代码,因为我不知道从哪里开始这部分作业。我不想解决它,我只是想帮助找到解决它的正确路径。
最佳答案
要将值向左移动,您需要将相同的值添加到自身
例如,如果您有 0011
0011 + 0011 = 0110 (shift 1 left)
0110 + 0110 = 1100 (shift 1 left again)
为了解决您的问题,我将采用以下方法(快速方法)
MOV ah, var1 (move 44h to 0000h -> 4400h)
MOV al, var2 (move 41h to 4400h -> 4441h)
ADD eax, eax (4441h + 4441h = 8882h)
ADD eax, eax (8882h + 8882h = 11104h)
ADD eax, eax (11104h + 11104h = 22208h)
ADD eax, eax (22208h + 22208h = 44410h)
ADD eax, eax
ADD eax, eax
ADD eax, eax
ADD eax, eax (444100h)
ADD eax, eax
ADD eax, eax
ADD eax, eax
ADD eax, eax (4441000h)
ADD eax, eax
ADD eax, eax
ADD eax, eax
ADD eax, eax (44410000h)
现在进入另一部分
MOV ah, var3 (move 42h to 44410000h -> 44414200h)
MOV al, var4 (move 43h to 44414200h -> 44414243h)
现在您的 eax 寄存器如下:4441 4243h
关于assembly - 如何在汇编中使用 ADD 而不是使用 SHL 左移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58140691/
在mutagen ,我使用特化来变异可能的二进制操作。基本上,我替换了 a + b和 ::mutagen::AddSub::add(a, b, mutation_count) las,它在场时失败了移
我需要将 EAX 乘以 37,我知道我可以使用 shl eax,5 和 shl register,2 然后将寄存器添加到 eax 来乘以 38,但我不确定乘以奇数的代码,我只能使用 shl add 和
我正在尝试将shl应用于Kotlin中的Int值: val a = 1092455 println(a.toString()) println(toString(bits(one))) println
请考虑以下英特尔8086汇编程序: CX保持非零值。 L: ADD AX, AX ADC DX, 0 LOOP L 我被要求理解上面的代码并重写它以提高效率。 据我了解: 它将2 ^ CX
这是我试图转换为 gcc 样式 asm 内联汇编代码的实际代码。 #include using namespace std; int reverse(int num); int main(){
这个问题的灵感来自于我尝试回答另一个问题:Converting decimal/integer to binary - how and why it works the way it does? 唯一
我们的老师在类里面给我们布置了一项作业。问题是我们在类里面没有讨论位移位,所以我有点不知道如何做到这一点。在作业说明中,他告诉我们以下内容: 我们只能使用 mov、add 、sub 指令来完成赋值。
我在 Assembly x86 类的代码中遇到这个编译错误, A2070: invalid instruction operands 这条线是 shl eax, ecx ecx 应该是循环的(减 1)
我正在基于 Delphi(转换代码)在 C# 中创建一个应用程序,但我发现了一个我不认识的命令 (shl),我想知道是否有与 C# 等效的命令。 提前致谢。 最佳答案 Shl是left shift .
声明... const n = 2 shl 33 会将常量n设置为值4,而不会出现任何编译器投诉! 还有... Caption := IntToStr(2 shl 33); ...返回 4 而不是
Result:= b8; Result:= Result+ (b7 SHL 8); Result:= Result+ (b6 SHL 16); Result:= Result+ (b5
这个问题是关于我们如何将一个整数与一个常数相乘。那么让我们看一个简单的函数: int f(int x) { return 10*x; } 如何才能最好地优化该函数,尤其是在内联到调用方时? 方
在/O2(发行版)模式下查看Visual Studio(2015U2)生成的程序集时,我看到此“手动优化”的C代码片段已转换回乘法: int64_t calc(int64_t a) { retur
我正在学习汇编语言,我已经开始使用宏来缩短我的程序。其中一个宏未按预期工作。 这是我正在尝试运行的基本程序, include pcmac.inc .model small .stack 100h .d
您为什么要使用: MOV EAX, 22 SHL EAX, 2 ...乘以 4 时而不是仅使用 MUL 指令? 据我所知,这也可以使用 SHR 而不是 DIV 来完成。 这样做有什么好处? 另外,你可
我不明白问题出在哪里,因为结果是正确的,但其中有问题,我不明白。 1.这是我必须转换为 C 的 x86 代码: %include "io.inc" SECTION .data mask DD
我要将以下 AT&T x86 程序集转换为 C: movl 8(%ebp), %edx movl $0, %eax movl $0, %ecx jmp .L2 .L1 shll $
我是一名优秀的程序员,十分优秀!