我学习汇编语言而且表现不佳。我无法在谷歌上找到它,所以我轻轻地请你们帮我解决这个问题。
下周我有一个测试,我正在努力学习它,但正如我所说,我无法在google上找到我真正需要的汇编语言。以下是我的考试可能会出现的一些问题:
我想快速回答他们,只是为了有一个概念,如果可以的话。非常感谢你的帮助!:
寄存器被压入堆栈但以相反的顺序弹出。解释为什么会这样。
典型的过程定义包括寄存器的备份和恢复。解释为什么这是必要的
注册以注册移动,例如。 ' MOV AL,BL'在SMZ模拟器中不支持使用 类。鉴于此限制,解释如何将BL寄存器的内容复制到AL。
解释“cmp”指令和条件跳转指令(如“jz”)之间的联系。
非常感谢你!
答案 0 :(得分:1)
关于堆栈如何工作,你总是看顶部项目,所以如果你插入项目x然后y,y在顶部,所以当你弹出参数时,你首先弹出y然后是x。您可以编写自定义汇编代码,在您输入参数时弹出参数,但这对于堆栈来说并不合乎逻辑。
您并不总是知道被调用过程中的代码,它可能会更改寄存器值,因此您先保存它们,因此无论被调用的程序执行什么操作,它何时返回,寄存器状态与您离开时相同
不确定,不知道模拟器...
这个程序集如何实现if语句之类的东西。如果语句为真,则跳转到特定代码,如果不是,则跳转到其他地方(或不跳转)。例如,if(a == b)
当EAX保持a的值而EBX保持b的值时,汇编代码将减去这些值(cmp减去寄存器并将结果保存在标志寄存器中),如果是零,它跳转到if中的代码,如果没有,继续或跳转到else语句
希望我帮助了,抱歉我的英语不好:)