xor ecx, ecx ; TempResult = 0
More:
mov ebx, eax ; Copy to another temporary register where
and ebx, 15 ; we only keep the lowest digit
add ecx, ebx ; TempResult + LowestDigit
shr eax, 4 ; Shift the original digits to the right discarding the one(s) we already added to the TempResult
jnz More ; Only looping if more non-zero digits exist
mov eax, ecx ; EAX = TempResult
1条答案
按热度按时间kzipqqlq1#
给定寄存器AX=0425h
这个十六进制数的位数是0、4、2和5。赋值语句要求您将这些数字相加,得到0 + 4 + 2 + 5 = 11。
一种可能的解决方案如下:
该代码适用于任何值AX=[0000h,FFFFh],生成AX=[0,60]。
使用循环的解决方案,可以处理任何值EAX=[00000000h,FFFFFFFFh],生成EAX=[0,120]: