在做课设二的时候,如何去修改cs的值,突然之间成为了一个问题。
cs作为代码段寄存器,是不可以随便修改的。比如 mov ds,cs 这样的指令是可以的,但是mov cs,ds是不行的
段寄存器如ds的赋值也得由其它reg寄存器来给予,比如 mov ds,ax .
那么cs的值是怎么确定的
第一种情况,当我们写下一个程序,由dos加载。 由end start所指定的段为代码段,由标号赋与。如果没有start指定代码段
那么dos会自动初始化一个值给cs,就是ds+10h
那么有什么指令可以单独修改呢?好象还没有吧。
我注意到所有的修改指令都是连ip一起修改的,可以单独修改ip,如jmp 寄存器, jmp 内存,jmp 标号,ret
这和栈段的修改有相似之处,修改ss,一般来说sp也要跟着修改。
那么修改cs,通常 来说 ip也要跟着修改
retf jmp 就是常用的修改命令。