汇编实验4.1文件代号下的文件管理中为什么buf_size为80而buf可以容纳200个字节,矛盾吗?(不矛盾)
文件代號下的文件管理
data segment
Pgsize dw ?
buf_size db 80
s_buf db ?
buf db 200 dup(?)
cur dw ?
handle dw ?
mess_getname db 0dh,0ah," Please input filename:$"
mess_err1 db 0ah,0dh," Illegal filename ! $"
mess_err2 db 0ah,0dh," file not found ! $"
mess_err3 db 0ah,0dh," file read err! $"
········
data ends
上面的
buf_size db 80
s_buf db ?
buf db 200 dup(?)
看起來很奇怪,通過做這個實驗,我明白了buf_size和實際的buf大小是可以不同的,源代碼中的buf_size為了增加可讀性,改為filename_buf_size可能會更好一些,因為它定義為80,僅僅是為了約束輸入的文件名不能超過79個字符(加上回車一共最多80個字符),而后面讀取文件內容時,用到了DOS中的ah=3fh的功能,它可以一次讀取200的字符到緩沖區中,然后再慢慢一行一行顯示在屏幕上。
(當一個buf有兩種以上不同的用途時,或者存放字符或者字符串的最大長度不同時,尤其是約束輸入的字符串不能長于某個個數而buf作另外的用途可以容納更多字符是,實際定義的buf大小就會比聲明的輸入緩沖區長度要大)
本例子中,buf作為鍵盤輸入緩沖區,最大為80,作為讀入文件數據緩沖區時,最大為200.
;-------------------------------------------------------------------------
getline proc near
push ax
push bx
push cx
push dx
mov dx,offset mess_getname
mov ah,09h
int 21h
mov dx,offset buf_size
mov ah,0ah
int 21h ;讀入文件名,文件名本身不超過79字符
mov dx,offset crlf
mov ah,09h
int 21h
mov bl,s_buf
mov bh,0
mov [buf+bx],0
pop dx
pop cx
pop bx
pop ax
ret
getline endp
;---------------------------------------------------------------------
;-------------------------------------------------------------------------
read_block proc near
push bx
push cx
push dx
cmp cur,200
jnz back
mov cx,200
mov bx,handle
mov dx,offset buf
mov ah,3fh
int 21h ;讀文件內容,一次讀入200個字節到buf中
mov cur,0
mov ax,1
jnc back
mov cur,200
mov ax,0
back:
pop dx
pop cx
pop bx
ret
read_block endp
;-----------------------------------------------
字符串輸入功能調用(0AH號功能調用)
格式:
MOV DX,已定義緩沖區的偏移地址
MOV AH, 0AH
INT 21H
功能:從鍵盤接收字符,并存放到內存緩沖區。
在使用0AH號功能調用時,應當注意以下問題。.
①執行前先定義一個輸入緩沖區,緩沖區內第一個字節定
義為允許最多輸入的字符個數,字符個數應包括回車符
0DH在內,不能為“0” 值。第二個字節保留,在執行程
序完畢,后存入輸入的實際字符個數。從第三個字節開始存
入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數
少于定義的最大字符個數,則緩沖區其他單元 自動清0.
若實際輸入的字符個數大于定義的字符個數,其后輸入的
字符丟棄不用,且響鈴示警,直到輸入回車鍵為止。整
個緩沖區的長度等于最大字符個數再加2。
0A中斷會向保存在dx中的地址存放來自鍵盤的輸入。
[dx]是緩沖區最大容量,也就是從鍵盤最多能夠輸入的字符數,需要提前告訴程序。
返回值[dx+1]是你實際輸入的字符個數,dx+2是字符串首。
總結
以上是生活随笔為你收集整理的汇编实验4.1文件代号下的文件管理中为什么buf_size为80而buf可以容纳200个字节,矛盾吗?(不矛盾)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对B样条的理解和整理
- 下一篇: GLUT键盘控制(glutKeyboar