今天在做2023年408的试卷时,题目中询问jge(指令为EB 09)与jmp(指令为7D 32) ,EB、7D为操作码,9,32为偏移量。题目询问jge的寻址方式,虽然我写出了正确答案为相对寻址,但是不凑巧瞥了一眼王道书上关于跳跃寻址的相对转移与相对寻址的定义,我陷入了无限的沉思。
虽然该书认为“寻找下一条将要执行的指令称之为指令寻址,寻找本条指令的数据地址称为数据寻址”,但是对于2023年408的试卷的题目这个定义便无法使用。本题给出了一个循环for(int i=0;i<24;i++) 当i>=24时应当进行跳转,题目使用了jge指令跳出当前for循环,因此如果按照王道书的定义,本题的jge指令是为了寻找下一条要执行的指令,所以应当归为指令寻址的跳跃寻址中的相对转移方式。但是答案认为jge是相对寻址。
因此王道书在这部分的描述是有问题的,对于那些不需要偏移值的跳转如 jmp 282888 不用pc的值加上偏移值,而是直接将要跳转的地址放入PC的这类指令为跳跃指令,对于那些需要使用偏移值才能去寻找下一条指令的存放地点的指令应当归类为相对寻址。
欢迎对这个问题进行讨论。