assembly MASM32中二进制到十进制的转换

ssm49v7z  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(188)

在MASM32中将十进制转换为二进制。

include \masm32\include\masm32rt.inc

.code

start:
  call main
  exit

main proc
  LOCAL var1: DWORD
  LOCAL dem: DWORD
    
  mov var1, sval(input("Enter Binary Number: "))
  mov dem, strlen(str$(var1))
  mov ecx, dem
  mov ebx, 1
  mov dec, 0
  
lbl0:
  DEC ecx
  cmp ecx, 0
  jl lbl1
  
  mov eax, var1
  and eax, ebx
  mov edx, eax
  shl edx, cl
  add dec, edx
  shl ebx, 1
  jmp lbl0
  
lbl1:
  print chr$(13,10)
  print chr$("Decimal Equivalent: ")
  print str$(dec)
  print chr$(13,10)
  
  ret
  main endp
  
end start

这是我代码,但是不起作用

qvk1mo1f

qvk1mo1f1#

标题要求“将二进制转换为十进制”,但文本要求“将十进制转换为二进制”。
你的程序试图按照标题...

mov var1, sval(input("Enter Binary Number: "))
...
print chr$("Decimal Equivalent: ")
print str$(dec)

既然您无论如何都要使用这些高级函数,为什么不使用str$(var1)来解决这个问题呢?

print chr$("Decimal Equivalent: ")
print str$(var1)

你给我们看的“转换”循环根本没有转换成十进制表示。

mov dem, strlen(str$(var1))
mov ecx, dem

strlen提供了字符串中的字符数,那么ECX中的这个特定循环计数将做什么呢?
关于如何将整数转换为十进制字符串,请参见如何在汇编级编程中打印整数而不从c库中打印?(itoa,整数到十进制ASCII字符串)。

相关问题