+ -
当前位置:首页 → 问答吧 → 用汇编写的一个 敲7控制台程序不知道哪部分有问题

用汇编写的一个 敲7控制台程序不知道哪部分有问题

时间:2011-10-09

来源:互联网

include F:\huibian\huibian.h
include D:\masm32\include\msvcrt.inc
includelib D:\masm32\lib\msvcrt.lib
.data
sNum dd ?
sNum1 dd ?
sNum2 dd ?
.const
sNotice db '请输入你想要的敲⑦范围:',‘0dh,0ah',0
sScanf db '%l',0
sString db '-------------------------------',0
sSub db '-------------------------------'
  db '符合要求的数总的有:%d',0
.code
start:
  invoke StdOut,addr sNotice
  invoke crt_scanf,addr sScanf,addr sNum
  invoke StdOut,sString
  mov ebx,7
  mov ecx,10
  mov eax,7
  mov sNum1,eax
  mov sNum2,0
   
  .while eax<=sNum
  div ebx
 
;判断是否是7的倍数
  .if edx==0
invoke crt_printf,addr sScanf,addr sNum1 ;为什么输出时对字符串后面的0ah,0dh不编译回车换行直接输出
inc sNum2
call @F
.elseif eax<7
invoke StdOut,addr sString
call @F
;判断是否含有7这个数
.elseif
 
.while eax
div ecx
.break .if edx==7
sub edx,edx
.endw
.if eax!=0
invoke crt_printf,addr sScanf,addr sNum1
inc sNum2
call @F
.endif
.endif

@@:
   
  inc sNum1
mov eax,sNum1
  .endw
  invoke crt_printf,addr sSub,addr sNum2
  invoke StdIn,NULL,NULL
  invoke ExitProcess,NULL
  end start

作者: xiaozhou10   发布时间: 2011-10-09

是说 crt_printf 将 0dh,0ah 输出成图形符号了?这应该是该函数的特点吧。换个通常的 printf() 函数试试了。

作者: zara   发布时间: 2011-10-09

你应该用:
sNotice db '请输入你想要的敲⑦范围:',0dh,0ah,0

作者: G_Spider   发布时间: 2011-10-09

引用 2 楼 g_spider 的回复:

你应该用:
sNotice db '请输入你想要的敲⑦范围:',0dh,0ah,0

谢谢回车换行解决了
但是这个程序可以通过编译运行输入数据后就出错不知道哪错

作者: xiaozhou10   发布时间: 2011-10-09