phydisknt.asm
来自「windows下汇编语言 学习汇编语言好助手」· 汇编 代码 · 共 109 行
ASM
109 行
;*****************************
;AbsDiskNT.asm *
;功能:Windows NT中绝对 *
; 磁盘读写 *
;*****************************
.386p
.model flat,stdcall ;平坦内存模式
;外部过程声明
extrn MessageBoxA:proc
extrn ExitProcess:proc
extrn CreateFileA:proc
extrn ReadFile:proc
extrn CloseHandle:proc
;常量定义
NULL = 0
MB_OK = 0
INVALID_HANDLE_VALUE = -1
GENERIC_READ = 80000000H
GENERIC_WRITE = 40000000H
FILE_SHARE_READ = 1
FILE_SHARE_WRITE = 2
FILE_SHARE_DELETE = 4
OPEN_EXISTING = 3
.data
FileName db '\\.\PHYSICALDRIVE0',0
align 4 ;双字对齐
readed dd 0
Buffer db 4096 dup (0)
hFile dd 0
Caption db 'NT中读写物理磁盘',0
ErrCreate db '建文件错!',0
ErrRead db '读盘错误!',0
ShowText db 4096*3 dup (0)
Digit db '0123456789ABCDEF'
.code
main:
;建立文件
call CreateFileA,offset FileName,GENERIC_READ,FILE_SHARE_READ OR FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL
mov [hFile],eax
cmp eax,INVALID_HANDLE_VALUE
jnz read
;显示错误信息
call ShowError,offset ErrCreate
read: ;读数据
call ReadFile,eax,offset Buffer,512,offset readed,NULL
cmp eax,0
jnz show
;显示错误信息
call ShowError,offset ErrRead
show: ;显示读出的内容
call ShowBuffer
;关闭文件句柄
call CloseHandle ,[hFile]
;退出
call ExitProcess,0
ShowError proc ,MESSAGE:DWORD ;显示出错信息并退出
call MessageBoxA,NULL,MESSAGE,offset Caption,MB_OK
cmp [hFile],0
jz endShowErr
call CloseHandle ,[hFile] ;关闭句柄
endShowErr:
call ExitProcess,0 ;退出
ShowError endp
ShowBuffer proc ;显示所读出的信息
;把数据转换成16进制的形式
mov esi,offset Buffer ;数据
mov edi,offset ShowText ;转换后的数据
mov ebx,offset Digit
mov ecx,0
xor eax,eax
computeAgain:
cmp [readed],0
jz endCompute
dec [readed]
mov al,[esi]
push eax
shr eax,4 ;高4位
mov al,[ebx+eax]
mov byte ptr[edi],al
inc edi
pop eax
and eax,0fH ;低4位
mov al,[ebx+eax]
mov byte ptr[edi],al
inc edi
mov byte ptr[edi],' ' ;空格
inc edi
inc esi
inc ecx
cmp ecx,16
jnz computeAgain
xor ecx,ecx
mov byte ptr[edi-1],13 ;回车
jmp computeAgain
endCompute:
;显示
call MessageBoxA,NULL,offset ShowText,offset Caption,MB_OK
ret
ShowBuffer endp
end main
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?