汇编 输入一个字符,怎样把它转化成为数字
MOVAH,1INT21HSUBAX,'0'我用这个程序,只能在AL里输入一个0-9的字符,但是我希望把它转化成一个数字,能够进行运算,比如如果输入的是3想要SARAX3...
MOV AH, 1
INT 21H
SUB AX, '0'
我用这个程序,只能在AL 里输入一个0-9 的字符,但是我希望把它转化成一个数字,能够进行运算,比如
如果输入的是3
想要SAR AX 3, 乘8 倍得到24
但是这个仅仅是字符而已,根本不能做这种数学运算,一旦这么做了,得到的不是数字,而是一个ASCII 码所对应的符号,比如$ ~ 这样的东西
求助, 如何把输入的字符转换成数字
或者,如何直接通过键盘输入数学的数字? 而不只是一个符号而已 展开
INT 21H
SUB AX, '0'
我用这个程序,只能在AL 里输入一个0-9 的字符,但是我希望把它转化成一个数字,能够进行运算,比如
如果输入的是3
想要SAR AX 3, 乘8 倍得到24
但是这个仅仅是字符而已,根本不能做这种数学运算,一旦这么做了,得到的不是数字,而是一个ASCII 码所对应的符号,比如$ ~ 这样的东西
求助, 如何把输入的字符转换成数字
或者,如何直接通过键盘输入数学的数字? 而不只是一个符号而已 展开
展开全部
mov ah,1
int 21h
第一行表示字符输入功能(1号)赋值给ah
第二行是触发上面的那条指令 内部中断指令 使得输入并显示在屏幕上。
内存中存放的是一个字符的ASCII码 比如‘$’这个是美元符 对应的ASCII码为24 通常表示字符串的结尾。
(1)1号系统功能调用-键盘输入并回显
此调用的功能是系统扫描键盘并等待键盘输入一个字符,有键按下时,先检查是否是Ctrl+Break键,若是则将字符的键值(ASCII码)送入AL寄存器中,并在屏幕上显示该字符。
此调用没有入口参数。
例如:下列语句可实现键盘输入。
MOV AH,01H ;01H为功能号
INT 21H
(2)2号系统功能调用-显示输出
此调用的功能是向输出设备输出一个字符。
入口参数:被显示字符的ASCII送DL。
例如:要在屏幕上显示“$”符号,可用以下指令序列
MOV DL,’$’
MOV AH,02H
INT 21H
(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。
int 21h
第一行表示字符输入功能(1号)赋值给ah
第二行是触发上面的那条指令 内部中断指令 使得输入并显示在屏幕上。
内存中存放的是一个字符的ASCII码 比如‘$’这个是美元符 对应的ASCII码为24 通常表示字符串的结尾。
(1)1号系统功能调用-键盘输入并回显
此调用的功能是系统扫描键盘并等待键盘输入一个字符,有键按下时,先检查是否是Ctrl+Break键,若是则将字符的键值(ASCII码)送入AL寄存器中,并在屏幕上显示该字符。
此调用没有入口参数。
例如:下列语句可实现键盘输入。
MOV AH,01H ;01H为功能号
INT 21H
(2)2号系统功能调用-显示输出
此调用的功能是向输出设备输出一个字符。
入口参数:被显示字符的ASCII送DL。
例如:要在屏幕上显示“$”符号,可用以下指令序列
MOV DL,’$’
MOV AH,02H
INT 21H
(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。
展开全部
输入的字符也是ASCII码啊,比如输入'1',存在寄存器里的值应该是31H,只要把这个值减去30H就可以得到1了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汇编语言中,输入一个数字字符,转化成为数字,可参照以下示例程序:
data segment
str db db 'INPUT STR:$'
num db ?
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inputr: mov dx,offset str;显示“INPUT STR:”
call crlf;回车换行
mov ah,09h
int 21h
mov ah,01h;等待输入直到输入一个数字字符
int 21h
cmp al,30h;确认是数字字符0至9
jc inpstr
cmp a1,3ah
jnc inputr
sub al,30h;转换为数字逆序输出字符串
mov [si],al;存入num
mov ah,4ch;结束程序
int 21h
ret
main endp
crlf proc near ;回车换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
code ends
end start
data segment
str db db 'INPUT STR:$'
num db ?
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea si,str
inputr: mov dx,offset str;显示“INPUT STR:”
call crlf;回车换行
mov ah,09h
int 21h
mov ah,01h;等待输入直到输入一个数字字符
int 21h
cmp al,30h;确认是数字字符0至9
jc inpstr
cmp a1,3ah
jnc inputr
sub al,30h;转换为数字逆序输出字符串
mov [si],al;存入num
mov ah,4ch;结束程序
int 21h
ret
main endp
crlf proc near ;回车换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
code ends
end start
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询