汇编中的CS

来源:百度知道 编辑:UC知道 时间:2024/06/28 05:36:39
怎么避免修改CS的时候,所出现的错误问题~~
大哥请给小弟一个实例来解答~~

若避免修改CS时出错、通不过编译,这个好办,只要记住一条规则即可:目的操作数只能是通用寄存器或存储器。

如下指令都是错误的:
mov cs,1234h
mov cs,6789
mov cs,ds
mov cs,es
mov cs,ss
mov cs,ip

下列指令是正确的:
mov ax,1234h
mov cs,ax
mov bx,6789
mov cs,bx
push ds
pop cs
push si
pop cs
mov cs,[1234h]
mov cs,[si]
mov cs,[bx]
mov cs,[bx][di]

修改段寄存器CS,是一个很有风险的操作,要求程序设计者对内存地址有精准的计算。否则,很容易导致不可预料的结果。请慎用!

修改段寄存器CS,有两个间接方法:

一、段间跳转

1、直接跳转
jmp 0ffff:0
在16位dos系统下,运行这条指令将产生系统复位。

2、间接跳转
Data segment
Sys_Reset dw 0,0ffffh
Data ends

Code segment
Assume cs:Code,ds:Data
mov ax,Data
mov ds,ax
jmp far ptr Sys_Reset
Code ends

这两个段间跳转实现相同的功能,都是产生系统复位。

二、利用中断返回指令iret
运行下面的程序段,将导致死循环。
Start:
lea si,Start
push cs
push si
iret

修改CS?直接用jmp跳转语句改IP不就行了?这是在实时模式下。
要是在保护模式,一般不要改CS