【问题标题】:Converting a program to accept unsigned integer将程序转换为接受无符号整数
【发布时间】:2016-01-03 21:22:00
【问题描述】:

我编写了这个程序来对输入的整数执行 ulam 猜想,但是当输入诸如 38836 之类的数字时,它超出了 16 位有符号整数的范围。我相信使用无符号可以解决我的问题,但是我无法弄清楚如何调整此代码段以接受无符号整数。任何帮助将不胜感激!

            DOSSEG
            .MODEL  SMALL, BASIC, FARSTACK

            EXTRN   GETDEC:FAR
            EXTRN   NEWLINE:FAR
            EXTRN   PUTDEC:FAR
            EXTRN   PUTSTRNG:FAR

            .STACK  256


    .DATA
NUM           DW      ?
CNT           DW      0
PROMPT        DB      'Enter an integer: '
TOTAL         DB      'Number Total: '
FLOWMSG       DB      'OVERFLOW      '

       .CODE

ULAMS:                      
  MOV    AX,SEG DGROUP        
  MOV    ES,AX

    LEA      DI,PROMPT
    MOV      CX,18
    CALL     PUTSTRNG
    CALL     GETDEC

    MOV  NUM,AX
    MOV  CNT,0

    --->Rest of program cut for brevity<-----

【问题讨论】:

  • 据我所知,汇编语言中的无符号整数和有符号整数没有区别。唯一的区别是您如何解释在算术函数期间设置的数据和标志。
  • 您没有展示程序的相关部分。但是在 80x86(如果看起来是这样的话)中,有一组不同的分支指令可用于有符号和无符号算术。
  • 问题是在输入 38836 时,我收到一条错误消息,并且不允许我输入它。分配要求这个数字有效,因此使用无符号整数输入,但我不知道如何做到这一点。
  • 在这种情况下,您必须发布GETDEC的相关代码。

标签: assembly unsigned-integer


【解决方案1】:

至少在我的情况下,这个问题是通过使用一个单独的命令来解决的,该命令将输入​​指定为无符号,称为 GETDEC$。这解决了这个问题,并允许无符号 16 位的整数范围,而不是有符号的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2012-03-03
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多