这段代码是如何工作的(汇编)

时间:2015-12-24 08:24:59

标签: assembly

我的老师没有解释得那么好,所以我问你为什么这段代码会将一个字符改成十六进制?

proc convert  
  cmp DL, 9  
  jbe its_a_digit ;JUMP IF ( DL <= 9 )  
;its_a_letter:  IF NO JUMP, STAYS HERE  
  add dl, 55 ;CONVERT TO LETTER  
  jmp finish 

its_a_digit:    
  add dl, 48 ;CONVERT TO DIGIT  
finish:  
  ret  
endp   

例如a-&gt; 61 A-> 41 0-> 30

1 个答案:

答案 0 :(得分:2)

该代码只是将数字从[0-15]范围内的DL寄存器转换为 ASCII 代码。

将寄存器DL的输入编号与9

进行比较
cmp DL, 9
jbe its_a_digit ;JUMP IF ( DL <= 9 )

如果输入数字大于9,请添加“A”符号

的ASCII代码
add dl, 55 ;CONVERT TO LETTER
jmp finish

如果输入数量小于或等于9,则添加“0”(零)符号的ASCII码

its_a_digit:
add dl, 48 ;CONVERT TO DIGIT