⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infilbuf.s

📁 坦尼保姆
💻 S
字号:
! Program to show file access by reading
! an entire file, and storing the addresses
! of the records. Afterwards these records 
! can be randomly accessed by the SEEK and
! READ calls. See text section 9.8.7.

#include "..\\syscalnr.h"	!  1
bufsiz	= 512			!  2
.SECT .TEXT			!  3
infbufst:			!  4
	MOV  BP,SP		!  5
	MOV  DI,filnam		!  6
	PUSH _GETCHAR		!  7
1:	SYS			!  8
	CMPB AL,'\n'		!  9
	JL   9f			! 10
	JE   1f			! 11
	STOSB			! 12
	JMP  1b			! 13
1:	PUSH 4			! 14
	PUSH filnam		! 15
	PUSH _OPEN		! 16
	SYS			! 17
	CMP  AX,0		! 18
	JL   9f			! 19
	MOV  (fildes),AX	! 20
	MOV  BX,0		! 21
	MOV  SI,linhed+2	! 22
1:	CALL vulbuf		! 23
	CMP  CX,0		! 24
	JLE  3f			! 25
2:	MOVB AL,'\n'		! 26
	REPNE  SCASB		! 27
	JNE  1b			! 28
	INC  (count)		! 29
	MOV  AX,BX		! 30
	SUB  AX,CX		! 31
	XCHG SI,DI		! 32
	STOS			! 33
	XCHG SI,DI		! 34
	CMP  CX,0		! 35
	JNE  2b			! 36
	JMP  1b			! 37

9:	MOV  SP,BP		! 38
	PUSH filnam		! 39
	PUSH errmess		! 40
	PUSH _PRINTF		! 41
	SYS			! 42
	PUSH _EXIT		! 43
	PUSH _EXIT		! 44
	SYS			! 45

3:	CALL getnum		! 46
	CMP  AX,0		! 47
	JLE  8f			! 48
	MOV  BX,(curlin)	! 49
	CMP  BX,0		! 50
	JLE  7f			! 51
	CMP  BX,(count)		! 52
	JG   7f			! 53
	SHL  BX,1		! 54
	MOV  CX,linhed(BX)	! 55
	MOV  AX,linhed-2(BX)	! 56
	PUSH 0			! 57
	PUSH 0			! 58
	PUSH AX			! 59
	PUSH (fildes)		! 60
	PUSH _LSEEK		! 61
	SYS			! 62
	SUB  CX,AX		! 63
	PUSH CX			! 64
	PUSH buf		! 65
	PUSH (fildes)		! 66
	PUSH _READ		! 67
	SYS			! 68
	ADD  SP,4		! 69
	PUSH 1			! 70
	PUSH _WRITE		! 71
	SYS			! 72
	ADD  SP,14		! 73
	JMP  3b			! 74

8:	PUSH scanerr		! 75
	PUSH _PRINTF		! 76
	SYS			! 77
	ADD  SP,4		! 78
	JMP  3b			! 79

7:	PUSH 0			! 80
	PUSH _EXIT		! 81
	SYS			! 82

vulbuf:				! 83
	PUSH bufsiz		! 84
	PUSH buf		! 85
	PUSH (fildes)		! 86
	PUSH _READ		! 87
	SYS			! 88
	ADD  SP,8		! 89
	MOV  CX,AX		! 90
	ADD  BX,CX		! 91
	MOV  DI,buf		! 92
	RET			! 93

getnum:				! 94
	MOV  DI,filnam		! 95
	PUSH _GETCHAR		! 96
1:	SYS			! 97
	CMPB AL,'\n'		! 98
	JL   9b			! 99
	JE   1f			!100
	STOSB			!101
	JMP  1b			!102
1:	MOVB (DI),'\0'		!103
	PUSH curlin		!104
	PUSH numfmt		!105
	PUSH filnam		!106
	PUSH _SSCANF		!107
	SYS			!108
	ADD  SP,10		!109
	RET			!110

.SECT .DATA			!111
errmess:			!112
.ASCIZ "Open %s failed\n"	!113
numfmt:	.ASCIZ "%d"		!114
scanerr:			!115
.ASCIZ "No number. Try again\n"	!116
.ALIGN 2			!117
.SECT .BSS			!118
filnam: .SPACE 80		!119
fildes: .SPACE 2		!120
linhed: .SPACE 8192		!121
curlin: .SPACE 4		!122
buf:	.SPACE bufsiz+2		!123
count:  .SPACE 2		!124

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -