absdisknt.asm

来自「windows下汇编语言 学习汇编语言好助手」· 汇编 代码 · 共 110 行

ASM
110
字号
;*****************************
;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 '\\.\C:',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 + -
显示快捷键?