32位代码段不能写显存吗?==里面提到怎么在汇编使用16位,32位标志

导读:
  DESCRIPTOR ENDS
  伪描述符结构类型定义
  PDESC STRUCT
  LIMIT DW 0
  BASE DD 0
  PDESC ENDS
  DSEG SEGMENT USE16
  GDT LABEL BYTE
  DUMMY DESCRIPTOR <>
  CODE DESCRIPTOR <0FFFFH,0,0,98H,0H>
  CODE_SEL = CODE - GDT
  LDT DESCRIPTOR
  LDT_SEL = LDT - GDT
  VIDEO1 DESCRIPTOR <0FFFFH,8000H,0BH,92H,0>
  VIDEO_SEL1 = VIDEO1 - GDT
  GDTLEN = $ - GDT
  GDTR PDESC
  DSEG ENDS
  LDTSEG SEGMENT USE16
  _LDT LABEL BYTE
  VIDEO DESCRIPTOR <0FFFFH,8000H,0BH,92H,0>
  VIDEO_SEL = VIDEO - _LDT + 04H
  LDTLEN = $ - _LDT
  LDTSEG ENDS
  CSEG SEGMENT USE16
  ASSUME CS:CSEG,DS:DSEG
  START:
  MOV AX,DSEG
  MOV DS,AX
  
  ;设置GDTR
  MOV BX,16
  MUL BX
  ADD AX,OFFSET GDT
  ADC DX,0
  MOV WORD PTR GDTR.BASE,AX
  MOV WORD PTR GDTR.BASE+2,DX
  ;设置代码段
  MOV AX,C32SEG
  MUL BX
  MOV CODE.BASEL,AX
  MOV CODE.BASEM,DL
  MOV CODE.BASEH,DH
  LGDT FWORD PTR GDTR
  CLI
  MOV EAX,CR0
  OR EAX,1
  MOV CR0,EAX
  
  JUMP ,0
  C16:
  MOV AX,4C00H
  INT 21H
  CSEG ENDS
  C32SEG SEGMENT USE16 <这里找成use32就行不了>
  MOV AX,VIDEO_SEL1
  MOV ES,AX
  MOV AX,8A41H
  MOV WORD PTR ES:[160*5],AX
  MOV EAX,CR0
  AND EAX,0FFFFFFFEH
  MOV CR0,EAX
  JUMP
C16>,   C32SEG ENDS
  END START
  [本帖最后由 xjtdy888 于 2008-3-1 13:43 编辑 ]

本文转自
http://www.oldlinux.org/oldlinux/viewthread.php?tid=10905&extra=page%3D2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值