众所周知,汇编语言是一门十分重要并且有趣的课程,为了帮助大家提前了解汇编语言这门课程,以便给接下来的学习打好基础,Third决定让你手写一个汇编语言Debug程序,为了减小题目难度,出题人对该程序进行了适当的要求,以下是该程序的相关介绍
初始状态下,程序不会有任何动作,也不会有任何输出
该程序共有五种
命令,分别用字母a,u,d,r,g表示
其中输入a,表示接下来开始向程序输入
汇编指令(只是输入,并未执行,接下来要输入,如果前面有已输入的
汇编指令,a
命令之后输入的
汇编指令不会覆盖,而是在末尾追加)
汇编指令形式见下方介绍
输入g,表示从第一条汇编指令开始,执行到第n条汇编指令,n的值在接下来一行给出(请注意,已经执行过的汇编指令不会再执行,详见样例解释)
输入u,表示查看程序中未执行的
汇编指令
你需要按顺序输出当前所有未执行的指令,每条指令占一行,和输入形式相同
输入d,表示要查看某一个
寄存器的内容,
寄存器名称在接下来一行给出
你需要输出当前该
寄存器的值
输入r,表示要修改某一个
寄存器的内容,
寄存器名称和要改为的值在接下来一行给出(空格隔开,并且注意,r指令是立即生效的)
对于u,d
命令,你需要按要求输出,对于a,r,g
命令,你只需要按要求操作即可
汇编指令形式以及
寄存器介绍如下:
共有四个通用
寄存器,分别是 ax bx cx dx,每个
寄存器占16位,表示数据范围为 0 到 2^16-1
共有七种
汇编指令,分别是 mov,add,sub,mul,div,push,pop,并且初始状态下程序中存在一个空栈,所有
寄存器的值为0
对于 pop push mul div
汇编指令,按照以下格式给出
pop/push/mul/div reg/imd
reg表示为
寄存器名称,imd表示一个整数
例如 pop ax 表示取出栈顶元素并赋值给ax(程序保证不会存在 pop 数字 这种情况,也不会在栈为空的情况下执行pop操作)
push 23 表示将元素23入栈
对于mul,div指令,其被除数(被乘数)默认放在ax中,运算结果默认放入ax中
例如
div 4 表示 ax = ax / 4
mul cx 表示 ax = ax * cx
对于 mov add sub
汇编指令,按照以下形式给出
mov/add/sub reg reg/imd
例如 mov ax 123 表示把123放入ax中
sub cx ax 表示 cx = cx - ax
add bx ax 表示 bx = bx + ax
你的程序需要输出正确的结果,快来编程实现它吧!