Assembly 装配作业
程序是家庭作业的一部分,问题是-程序卡住(冻结) 通过使用Assembly 装配作业,assembly,x86-16,tasm,Assembly,X86 16,Tasm,程序是家庭作业的一部分,问题是-程序卡住(冻结) 通过使用Turbo调试器我知道程序可以工作,并返回正确值(0)。但是,不知道为什么,输出没有显示在屏幕上,程序卡住了 节目 因为您将帮助定义为一个单词(HELP DW 0),所以指令DIV HELP将帮助除以DX:AX。因此,您需要将DX设置为零: xor dx, dx DIV HELP xor dx, dx <-- You need to change the code (remainder is in DX) DIV TEN
Turbo调试器
我知道程序可以工作,并返回正确值(0)
。但是,不知道为什么,输出没有显示在屏幕上,程序卡住了
节目
因为您将帮助定义为一个单词(
HELP DW 0
),所以指令DIV HELP
将帮助除以DX:AX
。因此,您需要将DX设置为零:
xor dx, dx
DIV HELP
xor dx, dx <-- You need to change the code (remainder is in DX)
DIV TEN
因为您将十定义为一个单词(
TEN DW 10
),指令DIV TEN
将DX:AX
除以十。因此,您需要将DX设置为零:
xor dx, dx
DIV HELP
xor dx, dx <-- You need to change the code (remainder is in DX)
DIV TEN
xor-dx,dx当你在调试器中运行时,它在哪里卡住了?另外,特别是如果你想让别人帮忙,请注释你的代码。此外,请仔细检查操作数的大小,因为它们到处都是。更不用说,每次你把两只猫分开,一只小猫就死了。事实并非如此。它在TurboDebugger.hh tnx中运行良好。这是我第一次来这里,只是第一次学习ASM。。二乘二的DIV或MUL有什么问题?那么糟糕吗?通过mul/div
做*2/2就像纸上的人通过计算完整的乘法并对结果求和来做2345*10,而不是仅仅在2345的末尾加零。对于二进制值,“*10”是*2,“/10”是/2,所以您只需在末尾添加/删除一位。这就是左/右移位对二进制值的作用div-HELP
是我看到的第一个错误(您没有将dx
设置为任何值,但是div r/m16
确实将dx:ax
除以r/m16
,请检查)。。。也许TD会更宽容地以dx=0开始您的代码,而DOS则不然。