ライブラリ関数を使用せずに、あるメモリ位置から別のメモリ位置に情報をバイト単位で移動したいと考えています。qemuでエミュレートされた16ビットアーキテクチャを使用しています。このコードは、私が書いている小さな小さなカーネルの一部であるため、システムコールを使用できません
// The struct i want to copy
struct procinfo info_tmp;
// here i put some stuff in my struct
info_tmp.pid = tablaprocesos[indiceProceso].pid;
kstrcpy(info_tmp.nombre, tablaprocesos[indiceProceso].nombre);
info_tmp.segmento = tablaprocesos[indiceProceso].memoria;
if(tablaprocesos[indiceProceso].estado==PROCESO_LISTO)
info_tmp.estado = 0;
else if(tablaprocesos[indiceProceso].estado==PROCESO_RUN)
info_tmp.estado = 1;
else if(tablaprocesos[indiceProceso].estado==BLOQ_TECLADO ||
tablaprocesos[indiceProceso].estado==PROCESO_SYSCALL)
info_tmp.estado = 2;
else
info_tmp.estado = 3; // Zombie
// Tiempo total = tiempoSYS + tiempoUSER
info_tmp.tiempo = tablaprocesos[indiceProceso].tiempoUSER +
tablaprocesos[indiceProceso].tiempoSYS;
// pointer to destination that i want to copy to
infoProc = (struct procinfo *)(((int)es << 16) + (0x0000ffff & ebx));
// now pointer to my source struct
procinfo * origen = &info_tmp;
int limit = sizeof(struct procinfo);
int i;
for(i=0;i<limit;i++){
// I need here to read only one byte from my source pointer to a variable "byte"
// macro written in ASM to copy one byte to a pointed location
// it writes in another data segment of another process
WRITE_POINTER_FAR(infoProc,byte);
// next byte
origen += 1;
infoProc += 1;
}
手動で行うために ASM で小さなコードを記述する必要なく、それを行う直接的な方法はありますか?
注: このコードは 16 ビットのセグメント化された OS カーネル (プロセスごとに 64KB のセグメント) の一部であり、ソース構造体はカーネル セグメントにあり、それを別のプロセス セグメントの場所にコピーしたいのですが、*targetBytePointer のようにすることはできません。 = *sourceBytePointer.