我正在做一个大学课程的项目.
首先,我不是要求完整的解决方案.我很难找到错误的地方.当我输入有效的ISBN,3201541974时,我的程序会打印"无效"的代码块.我很欣赏你可以看到的任何逻辑错误的提示,而且我也想知道是否有更好的调试方法,而不是一次盯着我的所有代码.我习惯于依赖简单的打印语句和断点.
编辑:问题出在这里
L1_top:
mov al, [esi] ; get a character
inc esi ; update source pointer
sub al, 0
add ah, al
cmp ah, 11
.......
Run Code Online (Sandbox Code Playgroud)
我从al中减去0的原因是因为al最初是一个char.从al中减去'0'将其转换为int或w/e.我错误地减去0而不是'0'
正确的是
sub al, '0'
Run Code Online (Sandbox Code Playgroud)
首先,我想说我实际上是你的TA课程,很好,你只是寻求帮助调试,而不是寻求答案,但我们确实有办公时间,我们非常友好.
我将首先回答更简单的问题.有一种更简单的方法可以在代码中找到问题,它被称为gdb.它基本上只是一个调试器.以这种方式调试非常有用,因为它允许您在运行程序时查看寄存器和内存中的实际内容.以下是有关如何使用它的一些信息的链接.我建议你阅读它,因为它真的很有帮助.gdb帮助.
现在进入更复杂的部分.