汇编:代码段寄存器和指令指针的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 19:31:32
我初学汇编,有些概念性的东西不理解,在这里请教高人了。。
1.代码段寄存器和指令指针确定的CUP下一步读取的指令,也就是下一步执行的指令是吗?
能不能这样假设,如果我想执行一个程序,那么我只需要让代码段寄存器里储存的地址变为我这个程序在内存里的地址,计算机就会运行这个程序的指令了是吗?

2.书上说不能直接给这两个寄存器赋值,而只能用jmp, ret, jnz, call 等指令来改变程序流程,那么能不能给我讲讲,这四个指令在功能上有什么异同?

谢谢大家了啊!

1.是
但如果遇到中断的话,CPU还是要去执行中断程序的

2.
jmp是无条件跳转,CPU执行到这个指令的时候直接跳转到相应的位置
call和ret是一组的,call是子程序调用指令,执行的时候会将当前的IP或CS和IP压到栈里,然后跳转到指定的地址,跳转的时候改变的CS和IP,当遇到ret指令时,再将栈里的CS和IP修改到CS和IP寄存器
jnz应该是一类指令中的一个,类似的还有jno,jns,jo,js等,这些都是条件转移指令,他们会根据相应的标志寄存器中的数值来决定是否执行跳转.很多指令都会影响标志寄存器,所以这类条件指令一般都是和其他指令配合使用的,比较典型的是CMP比较指令.条件转移指令配合其他指令,可以实现和高级语言中的IF等语句相当的功能.比如,当AX内的数值为64H的时候跳转到指定的位置,而不是的时候,接着下一条指令执行(WDSYMH是标号):
CMP AX,0064H
JNZ WDSYMH