【问题标题】:16-bit MASM implement this algorithm into code (confusion) ASCII to decimal16位MASM将此算法实现成代码(混淆)ASCII转十进制
【发布时间】:2023-12-27 13:11:01
【问题描述】:

我需要接受用户输入的 ASCII 字符,然后将其转换为十进制字符。 这是我为此想到的算法,但不确定如何在代码中显示它。想法?它只需要 0-9 个字符,并将对此进行验证。我没有写任何与 ASCII 相关的东西,也不确定使用什么语法。这是我的伪代码算法

Give it a counter variable: 
counter = 0
getCharacters( next character ) ; next ASCII character from left
while ( next character != CR(enter key)
    validate next character
    digit = next character - 30hex 
    counter = (counter * 10) + digit
end loop
return counter in AX

我如何将其放入直接 masm 中?我是菜鸟。

【问题讨论】:

  • "如何在汇编中实现这个算法?"是一个糟糕的问题。开始编写汇编代码,如果有特定部分是您无法从可用文档中找出的;作为一个问题。

标签: assembly decimal ascii masm


【解决方案1】:

我使用类似的东西将输入数字存储在AX 中。您可以在 gist.github.com 上找到程序here

INDEC PROC
    PUSH BX
    PUSH DX
    XOR BX, BX
    XOR AX, AX
  READ:
    MOV AH, 1
    INT 21H
    CMP AL, CR
  JE END_READ
    CMP AL, LF
  JE END_READ
    CMP AL, '0'
  JNGE NON_INTEGER
    CMP AL, '9'
  JNLE NON_INTEGER
  MY_LOOP:
    AND AX, 000FH
    PUSH AX
    MOV AX, 10
    MUL BX
    POP BX
    ADD BX, AX
  JMP READ
  END_READ:
    MOV AX, BX
    POP DX
    POP BX
   RET
  NON_INTEGER:
    LEA DX, NON_NUM      ;; The NON_NUM is a `$` terminated string to display error
    MOV AH, 9
    INT 21H
  JMP READ
INDEC ENDP

【讨论】:

    最近更新 更多