汇编语言(第三版)王爽著(实验十一)编写子程序

三、实验内容、程序清单及运行结果

 

1.编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母,描述如下。

名称:letterc

功能:将以0结尾的字符串中的小写字母转变成大写字母

参数:ds:si指向字符串首地址

代码:

DATAS SEGMENT
    db "Beginner's All-purpose Symbolic Instruction Code.",0
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    mov ax,DATAS
    mov ds,ax
    mov si,0
    call letterc
ok:
      mov ah,4Ch
    int 21H
letterc:
      mov ch,0
      mov cl,ds:[si]
      jcxz ok;判断是否为零
      cmp byte ptr [si],97;大写
      jb no
      cmp byte ptr [si],122;小写
      ja no
      sub byte ptr [si],20h
no:
      inc si
    jmp letterc
CODES ENDS
END START

思路:

通过cmp改变标志寄存器,结合ja,jb指令判断标志寄存器来实现判断大小的功能,通过jcxz进行循环判断是否为字符串结束

截图:

原来的样子:

汇编语言(第三版)王爽著(实验十一)编写子程序_第1张图片

后来的样子:

汇编语言(第三版)王爽著(实验十一)编写子程序_第2张图片

汇编语言(第三版)王爽著(实验十一)编写子程序_第3张图片

修改相关数据后:

原数据:

汇编语言(第三版)王爽著(实验十一)编写子程序_第4张图片

处理后:

汇编语言(第三版)王爽著(实验十一)编写子程序_第5张图片

汇编语言(第三版)王爽著(实验十一)编写子程序_第6张图片

附加题:

定义一个班级的成绩数组,数组长度N>=15。统计其中优秀[100,90]、良好[89,80] 、中等[79,70] 、及格[69,60] 、不及格[59,0]的人数,分别存于A_NUM、 B_NUM、 C_NUM、 D_NUM、 E_NUM中。

要求各个分数段都有人员分布

代码:

DATAS SEGMENT
    db 55,45,65,66,60,70,73,77
    db 80,88,85,87,99,95,95,93,-1
A_NUM db 0
B_NUM db 0
C_NUM db 0
D_NUM db 0
E_NUM db 0
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    mov ax,DATAS
    mov ds,ax
    sub si,si
    mov cx,16
  s:
    cmp byte ptr [si],-1;判断是否结束
    je ok
    cmp byte ptr [si],100
    ja s1;非法数据,跳过
      cmp byte ptr [si],90;大于等于90
      jae ae90
      cmp byte ptr [si],80;大于等于80
      jae ae80
      cmp byte ptr [si],70;大于等于70
      jae ae70
      cmp byte ptr [si],60;大于等于60
      jae ae60
      cmp byte ptr [si],0;大于等于0
      jae ae0
ae90:
      inc A_NUM[0]
    jmp s1
ae80:
      inc B_NUM[0]
      jmp s1
ae70:
      inc C_NUM[0]
      jmp s1
ae60:
      inc D_NUM[0]
      jmp s1
ae0:
      inc E_NUM[0]
      jmp s1
 s1:inc si
      jmp short s
ok:
      mov ah,4Ch
    int 21h
CODES ENDS
    END START

思路:

通过cmp和ja,jb,jae,jbe实现类似C语言的if(a>90),if(a>80)……..,通过jmp等跳转语句实现类似C语言的{i++;},即子程序,通过-1判断结束

截图:

源数据:

汇编语言(第三版)王爽著(实验十一)编写子程序_第7张图片

处理后的:

汇编语言(第三版)王爽著(实验十一)编写子程序_第8张图片

汇编语言(第三版)王爽著(实验十一)编写子程序_第9张图片

  • 实验结论、实验体会

第一题:

通过cmp改变标志寄存器,结合ja,jb指令判断标志寄存器来实现判断大小的功能,通过jcxz进行循环判断是否为字符串结束

第二题:

通过cmp和ja,jb,jae,jbe实现类似C语言的if(a>90),if(a>80)……..,通过jmp等跳转语句实现类似C语言的{i++;},即子程序,通过-1判断结束

其它实验:

汇编语言(第三版)王爽著(实验一)查看CPU和内存

汇编语言(第三版)王爽著(实验二)用机器指令和汇编指令编程

汇编语言(第三版)王爽著(实验三)编程、编译、连接、跟踪

汇编语言(第三版)王爽著(实验四)[bx]和loop的使用

汇编语言(第三版)王爽著(实验五)编写、调试具有多个段的程序

汇编语言(第三版)王爽著(实验六)实践课程中的程序

汇编语言(第三版)王爽著(实验七)寻址方式在结构化数据访问中的应用

汇编语言(第三版)王爽著(实验八)分析一个奇怪的程序

汇编语言(第三版)王爽著(实验九)根据材料编程

汇编语言(第三版)王爽著(实验十)编写子程序

汇编语言(第三版)王爽著(实验十一)编写子程序

汇编语言(第三版)王爽著(实验十二)编写0号中断的处理程序

DOSBox+MASM搭建汇编环境

你可能感兴趣的:(Assembly)