dop*_*umi 0 x86 assembly x86-16
如果我的问题很愚蠢的话,我只是开始玩装配一点点,请原谅.
我的问题是关于这个(我试图将100除以5,当然要玩内存和变量!)

为什么DW(定义Word)指令是这样执行的?我的意思是,我了解所有其他线路,但对我来说尤其是黑暗的线路.
另外,你能解释一下为什么var在地址0010Ah被实例化了吗?我认为这是因为实例化之前的4个结构占用4*16bits = 4*2bytes = 8bytes,因此var就在堆栈之后立即归档.但教学不应该在其他地方吗?一旦程序开始运行,它们是否被加载到堆栈中?
奖金问题:如何查看emu8086中的堆栈内容?
小智 5
因为您使用的是汇编程序,而不是编译器.它实际上是将您的助记符和数据转换为平面二进制文件(或者更常见的是,包括标题,即PE).
dw字面意思是"宣称一个字".它放在$0200代码中的那个地方.如果我们查看这个方便的表,我们可以看到操作码
add r8, r/m8
Run Code Online (Sandbox Code Playgroud)
虽然我不打算进入整个操作码结构和反汇编,但你也会看到[r]它在操作码后面有一个modrm字节的含义.这是另一个方便的表,显示了modrm字节的含义.我们可以看到$00的[bx+si].
我们得到了整个指令的组合
add ax, [ax+si]
Run Code Online (Sandbox Code Playgroud)
(我们从reg2位中的0获得ax - ax是第一个索引的寄存器,cx第2,dx第3,bx第4等).这是我汇编程序中文档的简单表:
modrm:
0 0 0 0 0 0 0 0
| | | | |___|
|_| | | reg1
mod |___| (r/m)
reg2
Run Code Online (Sandbox Code Playgroud)
即: op reg2, reg1
这有点深入,但希望您了解您使用的是汇编程序,而不是编译器,还有一些关于指令编码的知识.有些事情可能有点过时(我已经习惯了32位).
这就是大多数可执行格式具有数据和代码部分的原因,或者是16比特段的"隔离"部分.在平面二进制文件中,您可以在末尾或空白区域中有一个数据部分,您可以在其中使用它/在被调用的函数之间.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |