能力值:
( LV2,RANK:15 )
2 楼
用mov语句到其他寄存器里,ascii码减去31就是对应的16进制的数字了
能力值:
( LV2,RANK:10 )
3 楼
可以调用int 21h的0Ah功能,举例如下:
data segment
buf db 10, 0, 10 dup (0)
data ends
code segment
assume cs:code, ds:data
main:
mov ax, data
mov ds, ax
mov ah, 0Ah
mov dx, offset buf
int 21h
...
code ends
end main
调用int 21h的0Ah功能后,buf[1]中存放你实际输入的字符数,但不包括最后所敲的回车符;
从buf[2]起就是你具体输入的字符。
buf[0]必须在调用int 21h前赋值,它的值用来限制最多可以输入的字符数(含最后所敲的回车符)。
若对以上程序及解释有不明之处,请进一步参考Ralf Brown的interrupt list。
能力值:
( LV2,RANK:10 )
4 楼
很有意思帮你顶一顶
能力值:
( LV2,RANK:10 )
5 楼
第一个问题:定义个变量,然后把输入的值暂存到变量。或向楼上说的那样用0ah功能,直接输入到缓冲区。
第 二个问题:楼上说的接收到的还是字符串,是‘2’和‘3’的ASCII值。
你只需要将输入的ASCII值转换为二进制的数值或是十进制的BCD数(你可以看下汇编教材中代码转换那课)。
例子:从键盘输入一个以回车为结束符的十进制数,然后将其转换为机内二进制数
data segment
num dw 0
str1 db "please input a number(1-65535):$"
data ends
code segment
assume: cs:code ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset str1
mov ah,09h
int 21h
mov cx,5
L1:
mov ah,01h
int 21h
--------------------------------这一段式ASCII转换为数值
cmp al,0dh ;如果是回车就退出
je exit
and al,0fh ;等同于al-30h
shl num,1 ;*2
mov bx,num
shl num,1 ;*2
shl num,1 ;*2
add num,bx ;+2*num
----------------------------------相当于num*8+num*2=10*num
mov ah,0
add num,ax ;加上新输入的一位
loop L1
exit:
mov ah,4ch
int 21h
code ends
end start
num中存放的就是输入的数值。。。
希望对你有帮助。