如何在程序集8086中输出存储在变量中的值?

时间:2012-03-14 17:21:11

标签: assembly x86 dos

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

a = b + c-d * e

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

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

任何人都可以为这两个问题提供解决方案吗?

2 个答案:

答案 0 :(得分:2)

对于第一部分(读取一个字符串直到一个标记键,例如输入键被命中),你将写一个循环来做到这一点。

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

要打印到屏幕,您需要:

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

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

答案 1 :(得分:0)

对于我用过的一个字节值将其转换为字符串并使用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