使用'伪汇编语言'来表示将:初始化的代码 AX,BX和CX寄存器为零;在DX寄存器中存储0xFEAD; 并将1024个零的块复制到从地址0xF000开始的内存。解释为什么这个初始化代码不足以允许使用子程序或中断服务程序。
我接受了这个练习。讲师想要伪装配。
我已经走到这一步了:
mov 0, ax
mov 0, bx
mov 0, cx
mov 0xFEAD, dx
我应该谷歌如何
将1024个零的块复制到从地址0xF000开始的内存
但找不到我要找的东西(可能因为我不知道我正在寻找的asm)
答案 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”指令。