注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

12章源程序练习  

2013-02-23 14:31:09|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
脑袋有些不灵光,看了好几遍书里的程序才写出来. 只是个练习,没有什么特别的.

mov ax,cs
mov ss,ax
mov sp,0x7c00

mov eax,[cs:pgdt+0x7c00+0x2]
xor edx,edx
mov ebx,16
div ebx
mov ds,eax
mov ebx,edx

;创建全局描述符表
mov dword [ebx+0x0],0
mov dword [ebx+0x4],0
;代码段
mov dword [ebx+0x8],0x7c0001ff
mov dword [ebx+0xc],0x00409800

;4gb 数据段
mov dword [ebx+0x10],0xffff
mov dword [ebx+0x14],0xcf9200

;(代码段的别名段,数据段)
mov dword [ebx+0x18],0x7c0001ff
mov dword [ebx+0x1c],0x00409200

;栈段
mov dword [ebx+0x20],0x7c00fffe
mov dword [ebx+0x24],0x00cf9600

mov word [cs:pgdt+0x7c00],39
lgdt [cs:pgdt+0x7c00]

in al,0x92
or al,2
out 0x92,al

cli

mov eax,cr0
or eax,1
mov cr0,eax

jmp 0x8:pemode

[bits 32]
pemode:

mov eax,0x10
mov es,eax ;ES指向4GB内存数据段

mov eax,0x18
mov ds,eax ;DS指向别名代码段(可写)

mov eax,0x20
mov ss,eax
xor esp,esp

mov dword [es:0xb8000],0x0c450c50
mov word [es:0xb8004],0x0c21

mov ecx,pgdt-string
dec ecx

px:
push ecx
xor ebx,ebx 
px1:
mov ax,[string+ebx]
cmp ah,al
jge px1_s
xchg ah,al
mov [string+ebx],ax
px1_s:
inc ebx
loop px1
pop ecx
loop px

mov ecx,pgdt-string
xor ebx,ebx
show:
mov ah,10
mov al,[string+ebx]
mov [es:0xb80a0+ebx*2],ax
inc ebx
loop show

hlt

string: db 's0ke4or92xap3fv8giuzjcy5l1m7hd6bnqtw.'
pgdt dw 0
dd 0x7e00

times 510-($-$$) db 0
db 0x55,0xaa
  评论这张
 
阅读(23)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017