用于将一定数量的0加载到地址的伪装配

时间:2013-12-17 20:22:55

标签: assembly copy

  

使用'伪汇编语言'来表示将:初始化的代码   AX,BX和CX寄存器为零;在DX寄存器中存储0xFEAD;   并将1024个零的块复制到从地址0xF000开始的内存。解释为什么这个初始化代码不足以允许使用子程序或中断服务程序。

我接受了这个练习。讲师想要伪装配。

我已经走到这一步了:

mov 0, ax
mov 0, bx
mov 0, cx
mov 0xFEAD, dx

我应该谷歌如何

  

将1024个零的块复制到从地址0xF000开始的内存

但找不到我要找的东西(可能因为我不知道我正在寻找的asm)

2 个答案:

答案 0 :(得分:1)

通常,您希望设置某种循环。因此,选择一个寄存器来存储您已写入的许多零或者留下多个零。另一个寄存器用于存储基址。在循环的每次迭代中,您都想写一些零,调整您的计数器寄存器并查看您是否已完成。

(*搜索mov byte ptr以获取如何写入内存的语法。您可以在字节ptr表达式中包含基址和偏移量 *您可以从将设置标志寄存器的变量中减去或添加 *您可以使用标志更改来有条件地跳转;有关条件跳转指令的讨论,请参阅here

无论您选择向上还是向下计数都会影响循环结束时跳转的容易程度。

我希望我已经做了一个合理的平衡工作,让你看不到为你做运动的事情;我没有很多经验,如果我的错误得到了对不起,我很抱歉。

答案 1 :(得分:1)

如果我根据汇编的惯例和你在这里显示的语法进行猜测,我建议你做一些像

这样的事情。
mov 0, si
.loop:
mov 0, 0xF000(si)
add 4, si
cmp si, 0x400
je  .loop

它只是你在C中找到的for循环的翻译。我们将si寄存器初始化为0,然后我们设置0xF000 + si处的内存区域,增量si 4(这似乎是您正在使用的寄存器大小),并重复直到我们设置0x400字节(也称为1024字节)。

je指令是传统的“Jump if equal”指令。