汇编:输入一个字符,将其ASCII码加1后输出
1.功能:用DOS 功能调用实现I/O;
2.目的:掌握在PC 机上利用DOS 功能调用实现简单输入输出的基本方法;
3.内容:利用DOS 功能调用从键盘输入一个字符,将其ASCII 码加1 后在屏幕上显示;按ESC 键后返回DOS。
data ends
code segment
start:
mov ax, data
mov ds,ax
lea dx,State ;输出声明
mov ah,09h
int 21h
;----------------------------------------------------------------------------------
;============================ 将字符的ASCII码加1后循环输出 ========================
Input: ;进入循环
lea dx,Line1 ;输入提示行
mov ah,09h
int 21h
mov ah,01h ;DOS 1号功能调用,输入一个字符并回显
int 21h
and ax,00ffh ;AX高位清零,为取法做准备
inc ax ;ASCII码加1
mov cx,0 ;cx清零,输出余数时作为循环结束标志
push ax ;保存ax值,以调用09h中断输出换行
lea dx,NextLine ;换行
mov ah,09h
int 21h
pop ax ;返回ax值,转化为ASCII码输出
;------------------------------
;1.判断,输入是Esc就退出程序
mov bx,ax
cmp bx,1ch
jz Exit
;---------------------------------------------------------------------
; 算法分析:字符在内存中是以二进制的ASCII码形式存放的,这里用除法来
;实现二进制与十六进制的转换;余数存放在栈里,然后顺序出栈并输出,已达到
;倒序输出余数的目的
;---------------------------------------------------------------------
;------------------------------
;2.除法
Divide:
sub dx,dx ;dx清零,余数压栈时它将作为媒介
cmp ax,10h ;与十六相比较
jl Last ;小于十六转入Last
mov bx,10h ;16h做除数
div bx
push dx ;存余数
inc cx ;计算存入栈的数据个数
jmp Divide
Last:
push ax ;保存最后的余数
inc cx
;------------------------------
;输出
Output:
pop dx ;余数出栈
add dx,30h ;加30H转为ASCII码
mov ah,2 ;DOS 2号功能,显示中的内容
int 21h
loop Output ;循环,继续将余数出栈
lea dx,NextLine ;换行
mov ah,09h
int 21h
loop Input ;循环,继续输入字符
Exit:
mov ax,4c00h ;回到DOS
int 21h
code ends
end start