cc6431 2016-05-24 10:04 采纳率: 100%
浏览 1260
已采纳

要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中。

这个怎么弄啊
要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中。其中所有
段的段描述符均放臵在全局描述符表 GDT 中。

  • 写回答

5条回答 默认 最新

  • kiki1566 2016-05-25 10:42
    关注

    具体来说可以这么实现:
    在程序开始声明一个数据段‚ DSEG‛,来描述这三个段的描述符,其中有代码段描述符CODEM,源数据段描述符 DATAS 和目标数据段描述符 DATAD,将它们相应的选择子分别定义为 CODEM_SEL, DATAS_SEL, DATAD_SEL,为这三个段分别定义描述符。
    再定义GDN
    部分代码:
    DSEG SEGMENT USE16 ;定义 16 位数据段
    GDT LABEL BYTE ;全局描述符表
    DUMMY DESC <> ;空描述符
    CODEM DESC ;代码段描述符
    DATAS DESC ;源数据段描述符
    DATAD DESC ;目标数据段描述符
    VGDTR PDESC ;伪描述符
    GDTLEN = $-GDT ;全局描述符表长度
    CODEM_SEL = CODEM-GDT ;代码段选择子
    DATAS_SEL = DATAS-GDT ;源数据段选择子
    DATAD_SEL = DATAD-GDT ;目标数据段选择子
    DSEG ENDS ;数据段定义结束
    ............................
    ..........................
    START PROC
    MOV AX,DSEG
    MOV DS,AX
    ;准备要加载到 GDTR 的伪描述符
    MOV BX,16 ;计算并设臵 GDT 基地址
    MUL BX ;数据段地址左移 4 位
    MOV WORD PTR VGDTR.BASE,AX ;将得到的物理地址填入 VGDTR 描述符
    MOV WORD PTR VGDTR.BASE+2,DX
    ;设臵代码段描述符
    MOV AX,CS ;计算并设臵代码段基址
    MUL BX ;代码段地址左移 4 位
    MOV WORD PTR CODEM.BASEL,AX ;代码段开始偏移为 0
    MOV BYTE PTR CODEM.BASEM,DL ;将得到的物理地址填入 CODEM 描述符
    MOV BYTE PTR CODEM.BASEH,DH
    ;设臵源数据段描述符
    MOV AX,DSEG1 ;计算并设臵源数据段基址
    MUL BX ;;源数据段地址左移 4 位
    ADD AX,OFFSET TDATA ;加上 TDATA 的偏移得到物理地址
    ADC DX,0
    MOV WORD PTR DATAS.BASEL,AX ;将得到的物理地址填入 DATAS 描述符
    MOV BYTE PTR DATAS.BASEM,DL
    MOV BYTE PTR DATAS.BASEH,DH
    ;加载 GDTR
    LGDT QWORD PTR VGDTR
    CLI ;关中断
    ;切换到保护方式
    MOV EAX,CR0
    OR EAX,1
    MOV CR0,EAX
    ;清指令预取队列,并真正进入保护方式
    JUMP16 ,
    VIRTUAL: ;现在开始在保护方式下运行
    MOV AX,DATAS_SEL
    MOV DS,AX ;加载源数据段描述符
    MOV AX,DATAD_SEL
    MOV ES,AX ;加载目标数据段描述符
    XOR DI,DI ;DI 清零
    XOR SI,SI ;SI 清零
    MOV CX,D1LEN ;设臵数据长度
    M1: MOVSB ;通过串传送指令传数
    LOOP M1
    ;切换回实模式
    MOV EAX,CR0
    AND AL,11111110B
    MOV CR0,EAX
    ;清指令预取队列,进入实方式
    JUMP16 ,
    REAL: ;现在又回到实方式
    STI ;开中断
    MOV AX,4C00H
    INT 21H ;程序终止
    START ENDP

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备