我最近刚刚触及汇编语言和调试的表面。我有以下代码:
Address Hex dump Command Comments
006E3689 . E8 C5F9FFFF CALL 006E3053
->006E368E E9 DB E9
->006E368F 35 DB 35 ; CHAR '5'
->006E3690 80 DB 80
->006E3691 . 0000D490 DD 90D40000
006E3695 /> E8 72040000 CALL 006E3B0C
Run Code Online (Sandbox Code Playgroud)
再往下...
Address Hex dump Command Comments
006EB6C8 /. 6A 58 PUSH 58
006EB6CA |. 68 A0372A00 PUSH 2A37A0
006EB6CF ^ E9 C17FFFFF JMP 006E3695
Run Code Online (Sandbox Code Playgroud)
现在,在我编译 -> 指示的代码之前,实际上都包含在 a 中,JMP 006EB6C8当然只是跳到第二组代码,推送了一些内容并返回到顶部。
现在这段代码仍然有效,但我不确定为什么代码在编译时发生了变化(使用 Ollydbg),但更重要的是(我相信)代码如何知道跳转以及跳多远。到目前为止,我的研究告诉我E9是跳转的操作码,但我还没有找到有关 和35的信息80。
我假设这 …
我刚开始学习汇编编程.我在linux上使用NASM.我写了这段代码,基本上是为了计算某事物的某些功能而且我知道它可能不是很好,但我真的不在乎这一点,我想要的只是一些想法为什么我一直得到那个错误,因为我我试图修改和切换操作数和操作以及问题部分中的所有内容,但是如果有的话只给了我更多的错误消息.就像我说的那样,我真的,对这整个事情都很陌生,我可能只是愚蠢.问题必须在其中一行中.如果你需要它,我当然会发布更多的代码,我只是不希望你不得不去70-80行奇怪的,不必要的复杂代码.我只是想知道这可能是什么原因导致这种情况发生,因为我现在非常,非常绝望,而且我已经达到了考虑它并且没有任何新想法只会让一切变得更糟的程度.我将把这部分留在这里.但我会给你任何你需要知道的帮助.
mov dword [power], 2
mov ecx, 0
while:
mov eax, [neededforloop]
cmp eax, ecx
je endwhile
mov eax, [power]
mul eax, 2
mov [power], eax
mov eax, ecx
add eax, 1
mov ecx, eax
jmp while
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以用等效的操作码替换汇编指令。(即能够编译操作码而不是指令)如果是这样,是否可以在运行时操作这些操作码?干杯
我需要帮助了解如何在 RISCV 中解决这个问题。提供以下十六进制值的汇编语言指令:
地址 1000:b3 地址 1001:0b 地址 1002:9c 地址 1003:41
我知道我必须更改为二进制,并且 RISCV 是小端字节序,但除此之外我不知道如何继续。我有几个这样的问题,但我想自己解决剩下的问题。
我目前正在学习计算机组织课程,并且一直在研究 MIPS-32 架构。我注意到我们使用的书列出的操作码全部为小写,而教授列出的操作码全部为大写。我在不同的网站上查找了这一点,发现有些网站的操作码全部为大写,而其他网站的操作码全部为小写。我在堆栈溢出上查找了类似的问题,但没有找到。
例如,要添加,我们可以这样:
ADD $s2, $s1, $s0
Run Code Online (Sandbox Code Playgroud)
但是,其他网站和本书将其描述为:
add $s2, $s1, $s0
Run Code Online (Sandbox Code Playgroud)
谁能澄清哪种操作码格式更传统?我还没有构建汇编语言程序,所以我不确定操作码是否区分大小写;他们是吗?
所以我最近试图进入组装,并发现自己真的与NASM的工作方式混淆.据我所知,它是一种用于汇编的"编译器",它将(记忆)指令转换为实际的机器代码.现在我想知道NASM手册(www.nasm.us/doc/nasmdocb.html)中列出的说明和我的机器所采用的操作码之间有什么区别?比如,让我们假装我的英特尔处理器有某种秘密操作码,没有人知道并且没有在手册中列出,NASM是否仍然可以组装它?或者只是返回'无效指令'?并说我知道操作码的机器码格式,我能够手动插入吗?