实验内容:
编写子程序:输入大写字母,改写成小写字母,其他则不变。共判断10次。
利用debug中的mov指令往寄存器里输入相应的ASCII码,在debug状态下进行调试。用单步跟踪的方法验证指令的功能。在DOSbox虚拟机下进行相应操作。如果是小写的话需要进行减去20H,如果是大写的则保持不变
代码如下:
stack segment stack
dw 512 dup (?)
stack ends
data segment
string db 'please input a character',0dh,0ah,'$' ;定义字节型字符串
data ends
code segment
assume cs:code,ds:data,ss:stack;
start:
mov ax, data ;定义数据段地址给ds
mov ds,ax
MOV DX,OFFSET string ;展示标题
MOV AH,09H ;在屏幕上显示一个字符串
INT 21H
mov cx,9 ;定义循环次数
mov ah,00h ;从键盘输入字符,存入al当中
int 16h
call change ;定义子程序
jmp next
next: ;循环,该段代码重复九次,即键盘输入九个字符
mov ah,00h
int 16h
call change
dec cx ;cx自减
jz ending ;若cx=0,程序结束
jmp next
change proc ;定义子程序
mov ah,02h ;显示从键盘当中输入的字符到屏幕上
mov dl,al
int 21h
cmp al,'a' ;如果字符的ASCII码小于a的ASCII码
jb toSmall
cmp al,'z' ;如果字符的ASCII码大于z的ASCII码
ja toSmall
sub al,20h ;如果在a到z之间,al自减20h
toSmall: ;如果大于z或者小于a,直接输出
mov ah,02h
mov dl,al
int 21h
ret
ending:
MOV AX,4C00H ;go back to dos
INT 21H
CODE ENDS
END START
通过观察可以发现可以从键盘逐个输入字符,并在屏幕上完成大写到小写的转换。