使用dos功能调用,实现在DosBox终输入一个字符串,返回一个都是小写的相同字符串。
一、实验原理
1、DOS功能调用
使用到的DOS功能和作用:
1号功能_键盘输入一个字符
2号功能_显示器输出一个字符
10号功能_键盘输入缓冲区
9号功能_显示字符串
4CH号功能_返回DOS控制
INT 21H_中断指令
2、ASCII码中,小写字母的ASCII码=大写字母的ASCII码+32(或20h)
二、代码
data segment
data ends
stack segment
db 10 dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
call atoA ;调用子程序
mov ax,4c00h
int 21h
atoA proc
jmp donext
string db 20,?,20 dup(?) ;第一个字符是最多允许字符个数
;第二个字符记录实际输入字符的个数
;最后一个是记录我们输入的字符。
donext:
mov dx,offset string
mov ah,0ah ;10号功能输入字符串
int 21h
mov si,offset string+1
xor cx,cx
mov cl,[si]
do:
inc si
mov ah,[si]
cmp ah,'A'
jb next
cmp ah,'Z'
ja next
add ah,20h ;小写=大写+32
mov [si],ah
next:
loop do
mov byte ptr [si+1],'$'
mov dl,0ah
mov ah,02h
int 21h
mov dx,offset string+2
mov ah,09h ;9号功能显示
int 21h
ret
atoA endp
code ends
end start
三、执行过程和结果
四、缓冲区过程和结果
原有的空缓冲区:
输入完成的空缓冲区:
替换之后的缓冲区:
你的关注和点赞是对我莫大的鼓励。如有错误或不足,欢迎评论区指正。