【问题标题】:Why is my second digit the same as my third digit value?为什么我的第二个数字与我的第三个数字值相同?
【发布时间】:2020-08-20 23:50:25
【问题描述】:

请问我犯了什么错误导致我的第 2 位值(R2)总是与第 3 位值(R1)相同?

例如:
我所做的是总价:88,
给予金额:100,
所以最终答案由 3 位组成,应该是 012,但它显示为 022

例如:
2 是总价 99,
金额:100,
最终答案应该是 001,但结果是 011

下面是我用来计算的函数。

GIVECHANGE:

MOV AH,09H
LEA DX,STRCHANGEGIVEN
INT 21H

MOV AL,TTL  ;--move total price into AL TTL=88
SUB TTG,AL  ;--use total given - AL TTG = 100
MOV BL,TTG  ;-- BL = 100-88 = 12

MOV TTC,BL  ;--store result to TTC = 12

MOV AX,0
MOV AL,TTC
DIV TEN

MOV Q1,AL
MOV R1,AH
MOV AX,0
MOV AL,R1
DIV TEN

MOV Q2,AL
MOV R2,AH

ADD Q2,30H
ADD R2,30H
ADD R1,30H

MOV AH,02H
MOV DL,Q2
INT 21H

MOV AH,02H
MOV DL,R2
INT 21H
    
MOV AH,02H
MOV DL,R1
INT 21H 

【问题讨论】:

  • 我会在调试器中单步调试代码,检查每一步的寄存器和变量会发生什么变化,看看代码的行为与我的预期有何不同。
  • MOV AL,R1 应该是 MOV AL,Q1
  • W.Chang 谢谢你,你提供的方式解决了我的问题:D

标签: assembly x86-16 dosbox


【解决方案1】:

在不运行它的情况下回答您的问题有点困难,但是对于这个问题或其他问题,我可以向您建议的是使用调试器并查看您的变量、内存、标志、寄存器......状态,一个我使用的是 emu8086 它是一个用户友好的,它有一个非常好的调试器,正如你所看到的(下图)它有很多选项,它会为你节省很多时间搜索错误,您可以自己检测它们。 Image about emu8086 debugger interface

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多