我正在尝试使用汇编语言(.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
答案 0 :(得分:0)
我已经解决了这个问题。发现在装配中不可能读出如此长的整数。这是我的一个愚蠢的问题。
现在程序通过读取键盘给出的字节来单独读取每个整数。