+ -
当前位置:首页 → 问答吧 → 请教程序中的两个问题?谢谢!

请教程序中的两个问题?谢谢!

时间:2011-04-15

来源:互联网

这是一段将二进制数依次以16进制的形式显示出来的程序,已经调试通过运行。

STACK SEGMENT STACK 'STACK'
STACK ENDS

CODE SEGMENT
ASSUME CS:CODE,SS:STACK

START: MOV AX,STACK
  mov dx,3f2eh
  mov bx,dx
  MOV CX,4H
 x0: rol bx,1  
  rol bx,1  
  rol bx,1  
  rol bx,1  
  mov dl,bl 
  and dl,0fh  
  cmp dl,0ah  
  jl x1  
  add dl,37h  
  jmp x2  
x1: add dl,30h  
x2: mov ah,02h  
  int 21h  
  loop x0  
  mov dl,0ah  
  int 21h
  mov dl,31h  
  int 21h
  mov dl,36h
  int 21h

 mov ah,1
 int 21h

CODE ENDS
  END START

程序我已经调试通过运行,基本原理和代码前面已经读懂,原理就是将16位的二进制数,以4为一组,转移出来,一共转移四次。
但是有几点我看不懂,请教如下:
1、在执行完 and dl,0fh 以后,就已经取得了第一组(第一个4位)的数字了,再执行cmp dl,0ah,与1010比较是什么意思?

2、与1010比较以后,为什么小于就直接加30h,然后输出,大于或者等于确要 add dl,37h,我知道这是ASC吗的转换,但是这个具体数值关系是怎么样呢?为什么是30和37呢,我看了ascii马表,怎么样没看明白。

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

终于自己看懂了,不好意思......

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