汇编实验4.1文件代号下的文件管理中为什么buf_size为80而buf可以容纳200个字节,矛盾吗?(不矛盾)
文件代號(hào)下的文件管理
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(?)
看起來很奇怪,通過做這個(gè)實(shí)驗(yàn),我明白了buf_size和實(shí)際的buf大小是可以不同的,源代碼中的buf_size為了增加可讀性,改為filename_buf_size可能會(huì)更好一些,因?yàn)樗x為80,僅僅是為了約束輸入的文件名不能超過79個(gè)字符(加上回車一共最多80個(gè)字符),而后面讀取文件內(nèi)容時(shí),用到了DOS中的ah=3fh的功能,它可以一次讀取200的字符到緩沖區(qū)中,然后再慢慢一行一行顯示在屏幕上。
(當(dāng)一個(gè)buf有兩種以上不同的用途時(shí),或者存放字符或者字符串的最大長(zhǎng)度不同時(shí),尤其是約束輸入的字符串不能長(zhǎng)于某個(gè)個(gè)數(shù)而buf作另外的用途可以容納更多字符是,實(shí)際定義的buf大小就會(huì)比聲明的輸入緩沖區(qū)長(zhǎng)度要大)
本例子中,buf作為鍵盤輸入緩沖區(qū),最大為80,作為讀入文件數(shù)據(jù)緩沖區(qū)時(shí),最大為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 ;讀文件內(nèi)容,一次讀入200個(gè)字節(jié)到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
;-----------------------------------------------
字符串輸入功能調(diào)用(0AH號(hào)功能調(diào)用)
格式:
MOV DX,已定義緩沖區(qū)的偏移地址
MOV AH, 0AH
INT 21H
功能:從鍵盤接收字符,并存放到內(nèi)存緩沖區(qū)。
在使用0AH號(hào)功能調(diào)用時(shí),應(yīng)當(dāng)注意以下問題。.
①執(zhí)行前先定義一個(gè)輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個(gè)字節(jié)定
義為允許最多輸入的字符個(gè)數(shù),字符個(gè)數(shù)應(yīng)包括回車符
0DH在內(nèi),不能為“0” 值。第二個(gè)字節(jié)保留,在執(zhí)行程
序完畢,后存入輸入的實(shí)際字符個(gè)數(shù)。從第三個(gè)字節(jié)開始存
入從鍵盤上接收字符的ASCII碼。若實(shí)際輸入的字符個(gè)數(shù)
少于定義的最大字符個(gè)數(shù),則緩沖區(qū)其他單元 自動(dòng)清0.
若實(shí)際輸入的字符個(gè)數(shù)大于定義的字符個(gè)數(shù),其后輸入的
字符丟棄不用,且響鈴示警,直到輸入回車鍵為止。整
個(gè)緩沖區(qū)的長(zhǎng)度等于最大字符個(gè)數(shù)再加2。
0A中斷會(huì)向保存在dx中的地址存放來自鍵盤的輸入。
[dx]是緩沖區(qū)最大容量,也就是從鍵盤最多能夠輸入的字符數(shù),需要提前告訴程序。
返回值[dx+1]是你實(shí)際輸入的字符個(gè)數(shù),dx+2是字符串首。
總結(jié)
以上是生活随笔為你收集整理的汇编实验4.1文件代号下的文件管理中为什么buf_size为80而buf可以容纳200个字节,矛盾吗?(不矛盾)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对B样条的理解和整理
- 下一篇: GLUT键盘控制(glutKeyboar