调用子程序把键盘输入的字母转化为大写
声明:本文为个人学习总结笔记,如有谬误,望不吝指教。
注意:代码在win10系统的dosbox中运行,运行过程无异样,代码部分解释程序中给出
assume cs:code, ds:data
data segment
crlf db 0aH,0dH,"$";回车换行
string db"Please input your string(a~z,A~Z)", "$"
number db 16 ;预留16个空间(即输入值最大长度为16, 但不能完全存储进去,因为需要填入$置末尾)
data ends
code segment
start:
;初始化
mov ax, data
mov ds, ax
mov es, ax
;输入提示信息
lea dx, string
mov ah, 09h
int 21h
;输入字符串
mov ah, 0ah
lea dx, number
int 21h
mov al, number + 1
add al, 2
mov ah, 0
mov si, ax
mov number[si], "$"
call line_feed ;换行, 下同
LEA DX, number + 2
MOV AH, 09H
INT 21H
call line_feed
;转换为大写,可知number+1处为输入值个数,则有
mov ch, 0
mov cl, [number + 1] ;多少个值,就循环多少次
mov si, offset number + 2 ;获取偏移地址
call LowToHig
LEA DX, number + 2
MOV AH, 09H
INT 21H
call line_feed
mov ah, 04ch
int 21h
line_feed proc ;换行
LEA DX, crlf
MOV AH, 09H
INT 21H
ret
line_feed endp
LowToHig proc
s:
and byte ptr [si], 11011111b
inc si
loop s
ret
LowToHig endp
code ends
end start
过程踩坑点
- push 时在push后多加一个逗号,折磨自己将近一个小时
- 子程序末尾记得ret
- 子进程放后面(不然子程序后面需要使用的无法到达)