微机原理上机大作业的一部分,题目要求如下:
有了前面学习的基础,这次代码复制粘贴 花了20分钟就写完了。
DATAS SEGMENT
SINPUT DB 'Please input a string: $'
SOUTPUT DB 'The changed string is: $'
BUF1 DB 20H
DB 0
DB 20H DUP(0)
DATAS ENDS
STACKS SEGMENT PARA STACK
DW 30H DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,09H;显示字符串
LEA DX,SINPUT;取段内偏移地址
INT 21H;调用系统dos中断
MOV AH,0AH;键盘输入到缓冲区
LEA DX,BUF1;取段内偏移地址
INT 21H;调用系统dos中断
;换行
MOV DL,0DH;CR
MOV AH,2;显示一个字符
INT 21H;调用系统dos中断
MOV DL,0AH;LF
MOV AH,2;显示一个字符
INT 21H;调用系统dos中断
MOV AH,09H;显示字符串
LEA DX,SOUTPUT;取段内偏移地址
INT 21H;调用系统dos中断
;初始化
MOV DX,0
MOV BX,10
MOV SI,2
MOV AX,0
REREAD:
MOV AL,BUF1[SI];寄存器相对寻址,从缓冲区取一个字符
CMP AL,0DH;是否是CR
JE FINAL;等于就跳转退出,JNE相反
CMP AL,'z';小于等于z
JBE LESSZ;小于等于z跳转
JMP LOP;否则下一个
LESSZ:
CMP AL,'a';大于等于a
JGE GREATERA;大于等于a跳转
JMP LOP;否则下一个
GREATERA:
SUB AL,32;ASCII码减32,变大写
LOP:
MOV DL,AL;传送字符
MOV AH,2;显示一个字符
INT 21H;调用系统dos中断
INC SI;自加1
JMP REREAD;
FINAL:
;退出代码
MOV AH,4CH
INT 21H
CODES ENDS
END START
运行结果如下图: