彙編語言實驗之文件內容大小寫轉換

本實驗題目:將一個文件myprog.txt裏面的內容中的大寫字母全部轉化爲小寫,且不能使用臨時文件。

題目實現思路:

1、採用讀和寫的方式打開myprog.txt文件

2、讀取文件的數個內容放入緩衝區BUFF中

3、將BUFF緩衝區中的內容全部轉化爲小寫

4、將指針移動到每一次讀取文件的開始位置

5、將BUFF緩衝區中的內容覆蓋原位置的內容

6、讀取內容和覆蓋內容以及大小寫轉化都可用循環實現

7、關閉文件並退出

源代碼如下:

  1. DATA SEGMENT;定義數據段 
  2. MESS DB 'File Handle Error!',07,13,10,'$'
  3. FN1 DB 'myprog.txt',00H;myprog.txt放在工作目錄下
  4. FH1 DW ?
  5. BUFF DB 20 DUP(0)
  6. DATA ENDS

  7. SSEG  SEGMENT STACK;定義棧段
  8. DB 256 DUP(?)
  9. TOP LABEL BYTE
  10. SSEG  ENDS

  11. CODE  SEGMENT;定義代碼段
  12. ASSUME CS:CODE,DS:DATA,SS:SSEG
  13. MAIN  PROC FAR
  14. START:MOV AX,SSEG;棧初始化
  15. MOV SS,AX
  16. LEA SP,TOP
  17.   
  18. MOV AX,DATA;數據段初始化
  19. MOV DS,AX
  20.   
  21. MOV AH,3DH;以讀和寫方式打開已存在的文件
  22. LEA DX,FN1
  23. MOV AL,2
  24. INT 21H
  25. JC Error
  26. MOV FH1,AX
  27.   
  28. MOV BX,FH1
  29. LEA DX,BUFF
  30. L1:MOV AH,3FH;讀取文件內容,每次讀取10字節
  31. MOV CX,10 
  32. INT 21H
  33. JC Error;文件處理錯誤提示
  34. CMP AX,0
  35. JE ENDFILE
  36.   
  37. PUSH AX
  38. PUSH CX
  39. PUSH DX
  40. PUSH BX
  41. MOV CX,AX
  42. XOR SI,SI
  43.   
  44. TRANL:MOV DL,00100000B;將大寫字母轉化爲小寫字母用OR DL 00100000B
  45. OR  BUFF[SI],DL;將小寫字母轉化爲大寫字母用AND DL 11011111B             
  46. INC SI
  47. LOOP TRANL
  48.   
  49. POP BX;移動指針到每一次讀取文件的地方進行轉化後的覆蓋
  50. MOV CX,0FFFFH;指針要向前移動,故CX:DX應爲負值
  51. NEG AX
  52. MOV DX,AX
  53. MOV AL,1
  54. MOV AH,42H
  55. INT 21H
  56. JC Error
  57.    
  58. POP DX
  59. POP CX
  60. POP AX
  61.   
  62. MOV CX,AX;用轉化後的內容覆蓋原位置文件內容
  63. MOV AH,40H
  64. INT 21H
  65. JC Error
  66. JMP L1
  67.   
  68. Error:LEA DX,MESS;文件處理錯誤提示
  69. MOV AH,9
  70. INT 21H
  71. MOV AX,4C00H
  72. INT 21H
  73.   
  74. ENDFILE:MOV BX,FH1;結束操作
  75. MOV AH,3EH
  76. INT 21H
  77. MOV AX,4C00H
  78. INT 21H

  79. MAIN ENDP
  80. CODE ENDS
  81.  END START
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章