我正在使用“8086 emu”学习汇编编程(它是一个软件程序。模拟器。)我正在评估基本表达式 -
a = b + c-d * e
我的问题是,当我使用int 21h接收值时,它只取一个数字(字符)作为每个变量的输入。
同样在评估之后,我无法打印输出屏幕上变量'a'中存储的值。
任何人都可以为这两个问题提供解决方案吗?
答案 0 :(得分:2)
对于第一部分(读取一个字符串直到一个标记键,例如输入键被命中),你将写一个循环来做到这一点。
还需要一个将ASCII十进制字符串解析为寄存器值的函数。
要打印到屏幕,您需要:
int 21h, AH = 02h
(http://www.ctyme.com/intr/rb-2554.htm)一次一个字符int 21h, AH = 09h
(http://www.ctyme.com/intr/rb-2562.htm)一整个字符串您还需要一个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