从数字中获取一个数字(汇编(.jas))

时间:2013-11-27 13:05:34

标签: assembly

我正在尝试使用汇编语言(.jas)构建程序。我想要构建的程序得到一些输入,如:333450。该输入存储在一个变量中。比有一些输出。 (你可以看到下面的代码)。但现在我希望程序读取上面数字的第一个数字(所以,我希望333450中的3)。我怎么得到前3?我对装配很新,所以欢迎任何提示。

我认为类似于数组,但我认为它不可能在汇编中。所以必须有另一种方法来做到这一点。经过一番研究后,我想出了这个:Reading a number using INT 21h (DOS) & 8086 assmebly 但似乎存在问题。我没有该示例中使用的所有命令。还有什么我可以做的吗?也许有些比特移位可能吗?我已经读过有关位移的信息,它可以将你的号码改为其他东西。

是否可以读取16位2补码表示中的数字并读取每个位以获得数字?

适用于MIC1模拟器。

CODE:

.constant
OBJREF 0x40                         // Needed for method invokation
.end-constant

.main                               // Start of main program
.var                                // Local variables for main program
counter
number
last
.end-var

start: ISTORE counter               // Initialize variables
ISTORE number
ISTORE last
BIPUSH 0x49                     // Print "UITVOER:"
OUT
BIPUSH 0x4E
OUT
BIPUSH 0x56
OUT
BIPUSH 0x4F
OUT
BIPUSH 0x45
OUT
BIPUSH 0x52         
OUT
BIPUSH 0x3A                     
OUT
BIPUSH 0x20                     
OUT 
LDC_W OBJREF                    // Prepare for a method call
INVOKEVIRTUAL getnumber
ISTORE number                   // Store return value in number
OUT

.end-main                           // End of main program

.method getnumber()
.var
number
.end-var

BIPUSH 0x0
ISTORE number
get:    IN                          // Read a key press
DUP                             // Duplicate key for comparison
BIPUSH 0xa                      // If key = pressed,
IF_ICMPEQ return                // Return
DUP
BIPUSH 0x30                     // If key < "0"
ISUB            
IFLT geta2                      // Goto geta2 (key is not a hex digit)
DUP
BIPUSH 0x3a                     // Else if key < ":"
ISUB            
IFLT geta1                      // Goto geta1 (key is numeric character - "0"-"9")
DUP
BIPUSH 0x3A                     // Else if key > ":"
SWAP             
ISUB            
IFLT geta2                      // Goto geta2 (key is not a hex digit)
get1:  DUP
OUT                             // Print key (numeric character)
BIPUSH 0x30                     // Convert key from character to number
ISUB
get2:   POP                         // Pop invalid character
GOTO get                        // Get next key
return: OUT                         // Print cr
ILOAD number                    // Load a as return value
IRETURN                         // Return
.end-method

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。发现在装配中不可能读出如此长的整数。这是我的一个愚蠢的问题。

现在程序通过读取键盘给出的字节来单独读取每个整数。