【问题标题】:How input number if greater than 9大于9如何输入数字
【发布时间】:2013-01-15 17:47:46
【问题描述】:

我使用 TASM, 我正在尝试输入 2 个大于 9 的数字并计算这些数字的总和,然后简单地打印数字和总和;

像这样:

Number1=109 Number2=90 sum=199

我想如何转换这个数字以及如何计算总和。 如果大于 9,我使用该代码输入一个数字。 谢谢

MOV Numbre1,0
lecture: int 21h ; 
Cmp AL, "0"
JB fin
Cmp AL,"9"
JA fin
Sub AL,"0" 
SHL Numbre1,1 
Mov BL,Numbre1
SHL BL,1
Add Numbre1,BL
Add Numbre1,AL
jmp lecture

【问题讨论】:

    标签: assembly x86 dos tasm


    【解决方案1】:

    这一定是有史以来最常见的问题。如果您找不到示例,请升级您的搜索技能。

    从你所拥有的......你将需要al(编辑:ah!)中的一个子函数用于int 21h。您正确检查了有效的十进制数字。 shl 不会为您提供十进制数的帮助(但可能对十六进制有用)。

    要将文本转换为数字,这就是您的代码正在执行的操作,请将“迄今为止的结果”的寄存器清零。每次找到一个有效的十进制数字(从左到右),减去“0”(30h 或 48 十进制,但“0”更容易阅读),将“到目前为止的结果”乘以 10,然后添加新数字。直到完成...

    要将数字转换为文本以便打印它,您的问题实际上是这样问的,重复除以十 - 注意div 除以什么!余数(在ahdxedx 中,取决于)是十进制数字。为每个添加“0”。您将获得从右到左的数字,并且您想从左到右打印它们 - 有几种方法可以处理这个......

    找一个例子,或者启动一个调试器并解决它。您的程序崩溃的最可能原因是您没有注意div 除以什么!询问您是否有特定问题...

    编辑:叹息...

    mov ax, the_number
    xor cx, cx ; digit counter
    mov bx, 10
    pushem:
    xor dx, dx ; important!
    div bx ; quotient in ax, remainder in dx
    add dl, '0' ; convert to character
    push dx  ; save 'em to get back in right order
    inc cx ; count 'em
    test ax, ax  ; done?
    jnz pushem ; no, do more
    popem:
    pop ax ; we're only interested in al
    int 29h ; print al
    loop popem  ; until done
    

    这是我所知道的最简单的方法(也许不是“最好的”)。您当前的一组数字可以容纳在一个字节中,但做一个完整的单词同样容易。

    【讨论】:

    • 感谢 frank,现在我在 Number1 中取得了不错的成绩,但是如何使用 div 进行打印转换?
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多