三、实验内容、程序清单及运行结果
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进行循环判断是否为字符串结束
截图:
原来的样子:
后来的样子:
修改相关数据后:
原数据:
处理后:
附加题:
定义一个班级的成绩数组,数组长度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判断结束
截图:
源数据:
处理后的:
第一题:
通过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搭建汇编环境