发布网友 发布时间:2022-04-24 18:56
共1个回答
热心网友 时间:2023-11-04 06:25
装入全指针指令LDS,LES,LFS,LGS,LSS
这些指令有两个操作数。第一个操作数是一个有效地址,第二个是一个通用寄存器。指令从该地址
取得48位全指针,将选择符装入相应的段寄存器,而将32位偏移量装入指定的通用寄存器。注意在
内存中,指针的存放形式总是32位偏移量在前面,16位选择符在后面。LDS/LSS等装入指针以后,
就可以用DS:[ESI]/SS:[ESP]等这样的形式来访问指针指向的数据了。
比如这里:
lss init_stack,%esp
而:
init_stack:
.long init_stack ;四字节地址
.word 0x10 ;段选择符,同数据段选择符
这样执行后SS中装入段选择符0x10,ESP中装入init_stack的地址,栈顶在init_stack标号处。
*/
// 在新的位置重新设置IDT和GDT表。
热心网友 时间:2023-11-04 06:25
装入全指针指令LDS,LES,LFS,LGS,LSS
这些指令有两个操作数。第一个操作数是一个有效地址,第二个是一个通用寄存器。指令从该地址
取得48位全指针,将选择符装入相应的段寄存器,而将32位偏移量装入指定的通用寄存器。注意在
内存中,指针的存放形式总是32位偏移量在前面,16位选择符在后面。LDS/LSS等装入指针以后,
就可以用DS:[ESI]/SS:[ESP]等这样的形式来访问指针指向的数据了。
比如这里:
lss init_stack,%esp
而:
init_stack:
.long init_stack ;四字节地址
.word 0x10 ;段选择符,同数据段选择符
这样执行后SS中装入段选择符0x10,ESP中装入init_stack的地址,栈顶在init_stack标号处。
*/
// 在新的位置重新设置IDT和GDT表。