【问题标题】:How to output a value stored in a variable in assembly 8086?如何输出存储在程序集 8086 中的变量中的值?
【发布时间】:2012-03-14 17:21:11
【问题描述】:

我正在使用“8086 emu”学习汇编编程(它是一个软件程序。模拟器。)我正在评估一个基本表达式 -

a=b+c-d*e

我的问题是,当我使用 int 21h 获取值时,它只将单个数字(字符)作为每个变量的输入。

同样在评估之后,我无法在输出屏幕上打印存储在变量“a”中的值

谁能给出这两个问题的解决方案?

【问题讨论】:

  • 您可能更需要有关 x86 编程的教程,而不是问答网站上的答案。像this 这样的东西可能是一个不错的起点。
  • 欢迎来到组装的美妙世界。这里没有牵手。如果你需要它,你带来它。就像去南极或月球旅行一样。

标签: assembly x86 dos


【解决方案1】:

对于第一部分(读取一个字符串,直到一个标记键,例如按下回车键),您将编写一个循环来执行此操作。

还需要一个将ASCII十进制字符串解析为寄存器值的函数。

要打印到屏幕,您需要:

您还需要一个 itoa 函数 (http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/) 将寄存器值转换为多位 ASCII 字符串。

这些 URL 是名为 Ralf Brown 的中断列表 (RBIL) 的汇编编程教程的一部分。

【讨论】:

  • itoa 函数正是我需要知道的。这就是我的第二个问题的确切解决方案。谢谢 :) 第一个问题的解决方案,虽然不是那么清楚,但足以让我对我应该如何进行有一个好主意。 :)
【解决方案2】:

对于一个字节的值,我曾经将其转换为字符串并使用 bios 函数... 以前是这样的:

 mov ah, 0
 mov al, ds:["yourvalueaddress"]
 mov di, 100 ;temporary string address
 mov cx, 0
 cmp ax, 0
 jge label1
 mov bl, 45
 mov ds:[di], bl
 add di, 1
 neg ax
 label1:
 mov bx, 10
 label2:
 add cx, 1
 mov dx, 0
 idiv bx
 push dx
 cmp ax, 0
 jne label2
 label3:
 pop dx
 add dx, 30h
 mov ds:[di], dl
 add di, 1
 add cx, -1
 cmp cx, 0
 jne label3:
 mov dl, 24h            ;ENDL
 mov ds:[di], dl        
 mov dx, 100         ;100 => temporary string address
 mov ah, 09h
 int 21h

【讨论】:

  • 感谢您的努力 :)
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 2021-02-20
  • 1970-01-01
  • 2022-10-19
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多