我正在尝试编写一个接收数字(我之前推送过的)并打印它的函数。我该怎么做?
到目前为止我所拥有的:
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:
您放置在地址的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--;
}