2014-03-24 21 views
0

我需要使用函數23h http://www.ousob.com/ng/asm/ng4d85d.php打印文件大小,但我不明白如何從FCB的(offset 21h)獲得值,它應該是4byte的值,所以需要將其移入一對16位寄存器,例如BX和CX 這是我簡單的代碼:程序集8086:使用16位寄存器獲取並打印32位文件大小

mov dx,offset input 
mov ah,23h 
int 21h 

然後我需要打印出來,但我只知道如何打印一個16位的寄存器,我不知道找一些教程如何爲32位值做到這一點(2寄存器), 謝謝

回答

0

FCB同時返回記錄數(FCB偏移21h處的32位數量)和每條記錄的大小(FCB偏移量0Eh處的16位數量) 。您需要將它們相乘以獲得文件大小的近似值。這只是一個近似值,因爲對於此調用,部分塊被計爲整個塊。

因此,假設input已被聲明爲數據段內存中的FCB結構,並且您的文件僅包含27個字節長的記錄,那麼您的代碼可能如下所示。

mov dx,offset input ; point to FCB 
mov si, dx  ; copy pointer 
add si,0Eh  ; point to record size within FCB 
mov [si],27 ; load record size = 27 bytes 
mov ah,23h  ; get file size 
int 21h  ; call the DOS interrupt 
cmp al,0  ; was the call successful? 
jnz error  ; if not, handle the error 
add si,13h  ; advance pointer to point to FCB:21h 
; now ds:si points to file size in records 

看到古老的「拉爾夫·布朗的中斷名單」,爲一些關於這個中斷了許多注意事項列表的this derivation

+0

謝謝,但我只是不知道語法如何訪問FCB的一些偏移量,eg23h在我的情況下,當我的指針未開啓的fcb是:偏移量輸入,我的記錄大小總是1B,我只需要記錄數進入一些寄存器 – jokuja

+0

我添加了一些代碼來更好地解釋。 – Edward

+0

thanx,它的工作原理,但我做了一點不同,現在我只需要從一對寄存器打印32位值 – jokuja

相關問題