在字符串汇编8086 masm末尾提取数字

时间:2018-11-11 03:10:07

标签: assembly dos x86-16

我必须提取存储在si寄存器中的数字。这是我的代码

lea si, userInput
inc si

mov bx, [si]

mov dx, [si+bx]
add dx, 30h
mov ah, 2h 
int 21h

因此,我认为,如果我将硬值放在mov dx, [si+2]之类的dx寄存器中,代码会很好地工作,但是如果尝试使用mov dx, [si+bx],则它无法正常工作,并且无法按预期提供输出

1 个答案:

答案 0 :(得分:0)

假设您的 userInput 指向DOS的缓冲输入功能0Ah所需的输入结构,这些是我对修改代码的建议:

  • 第二个字节保存输入的字符数。您错误地将其当作是单词
  • 输入包含 1个字节宽的字符。您目前可以将其检索为 2个字节
  • 由于输入已经由个字符组成,因此您无需对其进行任何转换。 (尝试mov dx, 30h)此字符可以表示一个(数字)数字,一个字母,一个标点符号或其他任何东西,这一事实并没有改变。

您的代码将变为:

lea si, userInput
inc si

mov bl, [si]     ;Number of inputted characters
mov bh, 0        ;Need to zero to be able to use the whole address-register BX next

mov dl, [si+bx]  ;Retrieve the last inputted character (right before the terminating CR)
mov ah, 02h 
int 21h          ;Display the character