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

编程学习

我的网上家园

 
 
 

日志

 
 

12章习题1: 内存写测试  

2013-02-23 17:07:38|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大体写了下,还是为了练习.
每间隔4KB, 也就是4096字节,刷新一下显示,显示当前写成功的内存地址.
写内存出错后,显示出错信息.

源代码如下:


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 eax,1*1024*1024 ;EAX用做偏移地址. 从1M处开始写内存测试.


mem_test:
mov dword [eax],0x55aa55aa
cmp dword [eax],0x55aa55aa
jne error_test
mov dword [eax],0xaa55aa55
cmp dword [eax],0xaa55aa55
jne error_test

test eax,0xfff   ;每间隔4KB,显示一次当前检测的进度
jnz mem_show_skip
call show_num
mem_show_skip:
add eax,4
jmp mem_test


error_test:
call show_num
call show_err
hlt


;数值转换字符串与显示子过程
;EAX是要转换的数值
show_num:
push eax
push ecx
push edx
push ebx

xor ecx,ecx
mov ebx,10
show_num_div:
xor edx,edx
div ebx
add edx,30h
push edx
inc ecx
or eax,eax
jz show_s
jmp show_num_div

show_s:
xor ebx,ebx
show_s_1:
pop edx
mov dh,10
mov [es:0xb8140+ebx*2],dx
inc ebx
loop show_s_1

pop ebx
pop edx
pop ecx
pop eax
ret

show_err:
push ebx
push eax
xor ebx,ebx
show_err_s:
mov al,[string+ebx]
or al,al
jz show_err_ret
mov ah,0xc
mov [es:0xb81e0+ebx*2],ax
inc ebx
jmp show_err_s
show_err_ret:
pop eax
pop ebx
ret



string: db 'memtest error!',0
pgdt dw 0
dd 0x7e00

times 510-($-$$) db 0
db 0x55,0xaa

  评论这张
 
阅读(86)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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