+ -
当前位置:首页 → 问答吧 → 请教一个程序?

请教一个程序?

时间:2011-04-19

来源:互联网

程序的功能是从键盘接受10进制数,并存在bx中。

程序如下;
mob bx, 0
newchar: mov ah, 1 ;键盘输入
  int 21h
  sub al, 30h  
  jl exit ; <0退出
  cmp al, 9
  jg exit ; >9退出
  cbw
  xchg ax, bx
  mov cx, 10
  mul cx
  xchg ax, bx
  add bx, ax
  jmp newchar
exit: ……

以下程序是什么意思,始终没有看懂这个算法,请指教?
cbw
  xchg ax, bx
  mov cx, 10
  mul cx
  xchg ax, bx
  add bx, ax
  jmp newchar

作者: CAILI54321   发布时间: 2011-04-19

看不懂楼主在说什么

作者: masmaster   发布时间: 2011-04-19

mob bx, 0
newchar: mov ah, 1 ;键盘输入
  int 21h
  sub al, 30h  
  jl exit ; <0退出
  cmp al, 9
  jg exit ; >9退出
  cbw
  xchg ax, bx
  mov cx, 10
  mul cx
  xchg ax, bx
  add bx, ax
  jmp newchar
exit: ……

以上是一个从键盘接收10进制数 并存入bx的程序
我看懂了前半部分,mob bx, 0
newchar: mov ah, 1 
  int 21h  
(以上是调用中断,输入数字)
  sub al, 30h  
  jl exit  
  cmp al, 9
  jg exit 
(以上是通过输入数字的ASC码的比较来判断输入的是不是0-9这几个数字,不是就退出) 
  cbw
xchg ax, bx
mov cx, 10
mul cx
xchg ax, bx
add bx, ax
(以上这一段,就看不懂了,是怎么把asc码变成数字存到bx的)
  jmp newchar
exit: ……

作者: CAILI54321   发布时间: 2011-04-19

cbw,将al中的符号扩展到AX中,即,如果al的MSB是0,则AH=0,若al的MSB是1,则AH=FFH,不过就题意来说, 貌似没多大意义, 通过1号功能输入的ASCII在al里, 如果大于等于30H并小于等于39H的话,直接传送给bl即可(假如bx=0)。

作者: masmaster   发布时间: 2011-04-19