ASSUME CS:CODE
BUFF DB 13,10,' INSERT:','$'
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA DX,BUFF
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CALL ISLOW
CALL LFCR
CMP AH,1
JE @1
MOV DL,AL
MOV AH,2
INT 21H
JMP @2
@1:
SUB AL,20H
MOV DL,AL
MOV AH,2
INT 21H
@2:
MOV AH,4CH
INT 21H
========================================================
al--为要判断的字符,ah--为返回结果
ah=1 为是 ah=0 为否
ISLOW PROC NEAR
PUSH ES
PUSH CX
PUSH DI
PUSHF
PUSH 游配CS
POP ES
神纯指 LEA DI,@LOWCHS
MOV CX,26
REPNE SCASB
JE @ISLOW1
MOV AH,0
JMP @ISLOWEXIT
@ISLOW1:
MOV AH,1
@ISLOWEXIT:
POPF
POP DI
POP CX
POP ES
RET
@LOWCHS DB 'abcdefghijklmnopqrstuvwxyz'
ISLOW ENDP
====================================================
LFCR PROC NEAR
PUSH AX
PUSH DX
裤好 MOV AH,2
MOV DL,13
INT 21H
MOV DL,10
INT 21H
POP DX
POP AX
RET
LFCR ENDP
=============================
CODE ENDS
END START
我自己简单编了一个。。。 下面的程序是16位汇编,以十进制数89158为例,明正编译通过,运行正确。Program Name: Dec_ASCII.asm
Dec_ASCII SEGMENT
ASSUME CS:Dec_ASCII,DS:Dec_ASCII
ORG 100H
Start: jmp Begin
ASCII DB 5 dup(' ') 保存十进制无符号数的ASCII
ASCII_End DB '$' 字符串结束标志
DecimalDW 89158 十进制无符号数,最大65535。
Begin: lea di,ASCII_End 字符串尾地址
dec di
mov bx,10 用于除10,取商数和余数
std 设置变址寄存器变址方向
mov ax,Decimal 取十进制无符号数
ASCII_Ctr: xor dx,dx
div bx 除10,取商数和余数
xchg ax,dx 交换商数和余数
or al,30h 转换成ASCII码
stosb 保存ASCII码
mov ax,dx 把商数放入ax中
cmp ax,0
ja ASCII_Ctr 商数大改兆于0,继续核槐租取余数
lea dx,ASCII 字符串首地址
mov ah,9 显示结果
int 21h
Exit_Proc: mov ax,4c00h 结束程序
int 21h
Dec_ASCII ENDS
END Start
mov ah,1int 21h
第一行表示字符输入功能(1号)赋值给ah
第二行是触发上面的那条指令 内部中断指令 使得输入并显示在屏幕上。
内存中存放的是一个字符的ASCII码 比如‘$’这个是美元符 对应的ASCII码为24 通常表示字符串的结尾。
(1)1号系统功能调用-键盘输入并回显
此调用的功能是系统扫描键盘并等待键盘输入一个字符,有键按下时,先检查是否是Ctrl+Break键,若是则将字符的键值(ASCII码)送入AL寄存器中,并在屏幕上显示该字符。
此调用没有入口参数。
例如:下列语句可实现键盘输入。
MOVAH,01H ;01H为功能号
INT21H
(2)2号系统功能调用-显示输出
此调用的功能是向输出设弊枯备输出一个字符。
入口参数:被显铅裂示字符的ASCII送DL。
例如:要在屏幕上显示“$”符号,可用以下指令序列
MOVDL,’$’
MOVAH,02H
INT21H
(3)3号系统功能调用-异步通信输入(从串口输入字符)
3号系统功能调用的功能是将从异步串行通信口(默认为COM1)输入一个字符(或者ASCII码)。
出口参数:输入的ACSII码送AL寄存器中。
DOS系统初始化时此端口的标准是字长8位、2400波特、一个停止位、没有奇偶校验位。
(4)4号系统功能调用-异步通信输出(从串口输租激洞出字符)
此调用的功能是系统将从异步通信口(默认为COM1)输出一个字符(或者ASCII码)。
入口参数:被输出的字符的ASCII码送入DL中。
例如:现要将“$”这个符号通过异步串行通信口输出,指令序列如下:
MOV DL,’$’
MOV AH,04H
IN 21H
5)5号系统功能调用-打印机输出(从串口输出字符)
此调用的功能是将一个字符输出到打印机(默认1号并行口)。
入口参数:欲打印的字符的ASCII码送入DL寄存器中。
6)6号系统功能调用-直接控制台输入输出字符
此调用的功能是从键盘输入一个字符,或输出一个字符到屏幕。
如果(DL)=0FFH,表示是从键盘输入字符。
当标志ZF=0时,表示有键被按下,将字符的ASCII码送入AL寄存器中。
当标志ZF=1时,表示没有键按下,寄存器AL中不是键入字符的ASCII码。
如果(DL)≠0FFH,表示输出一个字符到屏幕,将被输出字符ASCII码送到DL中。此调用与1号、2号调用的区别在于不检查Ctrl+Break。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)