如何在Assembly 8086中打印一个数字?

时间:2013-03-04 15:07:50

标签: function assembly x86 x86-16

我正在尝试编写一个接收数字的函数(我之前推过),并打印出来。我该怎么办?

到目前为止我所拥有的:

org 100h

push 10
call print_num

print_num:

push bp
mov bp, sp
mov ax, [bp+2*2]
mov bx, cs
mov es, bx
mov dx, string
mov di, dx
stosw
mov ah, 09h
int 21h
pop bp
ret

string:

1 个答案:

答案 0 :(得分:2)

您在string地址放置的是一个数值,而不是该值的字符串表示形式。

值12和字符串“12”是两个不同的东西。看作16位十六进制值,12将是0x000C而“12”将是0x3231(0x32 =='2',0x31 =='1')。

您需要将数值转换为字符串表示形式,然后打印生成的字符串。
而不是仅仅粘贴完成的解决方案,我将展示如何在C中完成此操作的简单方法,足以让您以8086实现为基础:

char string[8], *stringptr;
short num = 123;

string[7] = '$';  // DOS string terminator    

// The string will be filled up backwards
stringptr = string + 6;

while (stringptr >= string) {
    *stringptr = '0' + (num % 10);  // '3' on the first iteration, '2' on the second, etc
    num /= 10;  // 123 => 12 => 1 => 0
    if (num == 0) break;
    stringptr--;
}