2013-11-05 109 views
0

所以我目前正在爲班級進行任務。我不需要爲我完成的工作,儘管如果有解釋它總是有幫助的。我真的只是想要朝正確的方向推進。我的任務是:彙編:不知道從哪裏出發

編寫一個解決以下問題的彙編語言程序。信天翁公司有四個銷售人員(1至4人),銷售五種不同的產品(1至5)。每天一次,每個銷售人員報告每個產品的銷售情況。這些報告隨着時間的推移被整合到文件中。文件中的每個記錄包含三個值: •從1到4的銷售員編號(3個字符寬,右對齊) •從1到5的產品編號(3個字符寬,右對齊) •美元價值當天銷售人員銷售的產品(9個字符寬,右對齊) 您的程序必須提示用戶輸入文件名,處理文件並報告每個銷售人員和每個產品的總計。一個稱爲「Albatross.dat」的示例數據文件可以讓您測試您的程序。 您的程序必須能夠處理包含任意數量銷售記錄的數據文件。這意味着輸入數據文件可能包含每個銷售人員和產品組合的多個記錄。不要編寫程序,以便它始終(且僅)預期發生在樣本數據文件中的記錄數。您的程序將通過使用包含少於樣本數據文件記錄的數據文件,樣本數據文件以及包含比樣本數據文件更多記錄的數據文件來執行測試和分級。

到目前爲止,這是我:

.data 

askfile BYTE "Enter the data file name: ",0 
fileMessage BYTE "Error while opening file: ",0dh,0ah,0 
fileName BYTE 256 DUP(0) 
byteCount DWORD ? 
handle DWORD ? 

.code 
main PROC 

mov edx,OFFSET askfile 
call WriteString 

;File name 

mov edx,OFFSET filename 
mov ecx,SIZEOF filename 
call ReadString 
mov byteCount,eax 

;Open 

mov edx,OFFSET filename 
call OpenInputFile 
cmp eax,INVALID_HANDLE_VALUE 
je file_error 
mov handle,eax 
jmp Alpha 

file_error: 
mov edx,OFFSET fileMessage 
call WriteString 
jmp Omega 

Alpha: 
.data 
BUFFER_SIZE = 17 
buffer BYTE BUFFER_SIZE DUP(?) 
bytesRead DWORD ? 

.code 

;Read from file 

mov eax,handle 
mov edx,OFFSET buffer 
mov ecx,BUFFER_SIZE 
call ReadFromFile 
jc read_error 
cmp eax,BUFFER_SIZE 
jl Omega 

read_error: 
mov edx,OFFSET readMessage 
call WriteString 
jmp Omega 


main ENDP 
END main 
+0

我不明白這個問題。你已經有了一個打開的文件,所以你可以逐行閱讀文件,合計數字,到達最後時停止打印結果。 – 2013-11-05 04:03:59

+1

「將數字加起來」可能是一個問題。對於您找到的每個「美元價值」,您都希望將其添加到至少兩個總和中 - 該銷售人員的總和以及該產品的總和。您可能需要爲「此銷售人員,此產品」添加一筆款項......雖然「規格」似乎並不需要。我設想了一個「總和矩陣」。爲什麼17個字節的緩衝區大小?這些值是逗號分隔的嗎?如果是這樣,你不想要18個字節?如果不是,15?那麼,你已經有了「Albatross.dat」。閣下,我希望「美元價值」是一個整數,而不是「349.99」... –

+0

緩衝區大小爲17,因爲它是銷售人員3個字符,產品3個,產品編號9個,cr,lf。幸運的是它是整個美元的金額。值由空格分隔。我怎麼會得到這筆款項。我知道我需要做一個二維數組,但我不太明白二維數組。在二維數組中,如果銷售員1銷售1000,項目1將(1,1)始終爲1000?以及我如何按照銷售人員或產品的順序對其進行排序? – Fireurza

回答

0

開始編寫和測試a2i2a程序。當你有這個和文件I/O時,其餘的都很簡單。

+1

什麼是a2i2a程序嗎? – Fireurza

+0

ASCII爲整數,整數爲ASCII。如果我正確理解,你需要將字符串轉換爲整數並返回。 – valplo