作业要求:

(1)统计学生成绩:
设有10个学生的成绩分别为46、68、88、87、76、89、99、65、100和80分。试编制程序统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放到S5、S6、S7、S8、S9及S10单元中。
(2)对键盘键入的小写字母用大写字母显示出来;若键入的为非字母键,则程序结束。

统计学生成绩:

代码参考见附件:
tongji.asm

  1. ;定义数据段
  2. DATA SEGMENT
  3. table db 46,68,88,87,76,89,99,65,100,80;定义成绩表
  4. S5 db 0;0-59
  5. S6 db 0;60-70
  6. S7 db 0;71-80;
  7. S8 db 0;81-90
  8. S9 db 0;90-99
  9. S10 db 0;100
  10. DATA ENDS
  11. CODE SEGMENT
  12. ASSUME CS:CODE,DS:DATA
  13. START:
  14. MOV si,OFFSET table
  15. MOV AX,DATA
  16. MOV DS,AX
  17. MOV Cl,0;Cl用作计数器,控制循环的次数
  18. XOR aL,AL;--->S5
  19. XOR ah,AH;--->S6
  20. XOR bl,BL;--->s7
  21. XOR bh,bh;--->s8
  22. XOR dl,DL;--->s9
  23. XOR dh,dh;--->s10
  24. ;开始进行比较
  25. COM:
  26. CMP Cl,10;
  27. Je Save;计数结束,跳转保存
  28. MOV CH,[si] ;接受数据
  29. CMP CH,60
  30. JL case1;
  31. CMP CH,70
  32. JL case2;
  33. CMP CH,80
  34. JL case3;
  35. CMP CH,90
  36. JL case4;
  37. CMP CH,100
  38. JL case5;
  39. Je case6;
  40. case1:
  41. inc al;
  42. JMP finish
  43. case2:
  44. inc ah
  45. JMP finish
  46. case3:
  47. inc bl
  48. JMP finish
  49. case4:
  50. inc bh
  51. JMP finish
  52. case5:
  53. inc dl
  54. JMP finish
  55. case6:
  56. inc dh
  57. JMP finish
  58. finish:
  59. inc Cl
  60. inc si
  61. JMP COM
  62. Save:
  63. MOV s6,ah
  64. MOV S5,aL
  65. MOV s7,bl
  66. MOV s8,bh
  67. MOV s9,dl
  68. MOV s10,dh
  69. MOV ax,4c00h
  70. int 21H
  71. CODE ENDS
  72. end START

思路分析:

汇编语言上机报告2 - 图1

调试过程如下:

Step1: XOR指令对需要用到的计数寄存器进行清零
image.png

Step2 :
image.png

Step3:
image.png

Step4:
image.png

Step5:
image.png

Step6:
image.png

大小写转换:

代码参考附件:
convert.asm

  1. DATA SEGMENT
  2. MSG1 DB 'Enter an English word(a-z):','$'
  3. MSG2 DB 0DH,0AH,'the Rwitting word is :','$'
  4. MSG3 DB 'input error!','$'
  5. DATA ENDS
  6. CODE SEGMENT
  7. ASSUME CS:CODE,DS:DATA;,SS:STACK
  8. START:
  9. MOV AX,DATA ;将数据段的数据移到DS寄存器中,因为无法直接数据从内存移到DS,只能从寄存器移到DS
  10. MOV DS,AX ;所以需要先把数据移到AX寄存器,然后再移到DS寄存器。
  11. MOV DX,OFFSET MSG1;输出提示文本
  12. MOV AH,9
  13. INT 21H
  14. MOV AH,1 ;键盘输入字符自动存入AL
  15. INT 21H ;int中断
  16. ;判断输入的ascII码值
  17. ;已知ASCII码的a的整型数字为97z122A的整型数字对应数字为65,因此小写字母ascii码=大写字母ascii + 32
  18. CMP AL,65;65-90代表大写字母
  19. JL OVER
  20. CMP AL,90;如果是大写字母则直接输出
  21. JLE OUTPUT
  22. CMP AL,97
  23. JL OVER
  24. CMP AL,122;97-122代表小写字母,是小写字母就进行转换,
  25. JG OVER
  26. SUB AL,32 ; 小写变大写
  27. JMP OUTPUT
  28. OUTPUT:
  29. MOV BL,AL ;赋值给BX
  30. MOV DX,OFFSET MSG2;提示文本
  31. MOV AH,9
  32. INT 21H
  33. MOV AH,2 ;显示输出 DL=输出字符
  34. MOV DL,BL
  35. INT 21H ;int中断
  36. MOV AH,4CH ;带返回码结束,AL=返回码
  37. INT 21H
  38. OVER:;输入的不是字母就结束程序
  39. MOV DX,OFFSET MSG3;输出提示文本
  40. MOV AH,9
  41. INT 21H
  42. MOV AH,4CH ;带返回码结束,AL=返回码
  43. INT 21H
  44. CODE ENDS
  45. END START

思路分析:

汇编语言上机报告2 - 图8

调试过程如下:

Step1:初始化代码段
image.png

Step2:调入提示性语句
image.png

Step3:中断指令
image.png

Step4:提示用户该输入了
image.png

Step5:输入需要的小写字母
image.png

Step6:ASCII码转换后进行输出
image.png

运行结果如下:

image.png

image.png

image.png