TASM 打印一个数字数组

TASM Printing a number array

我正在尝试提前完成我的大学课程并自己学习汇编程序,所以我有点卡住了。

我有这个练习题,我不明白如何正确打印。

我得到了 3 个数字值:var1、var2、var3。例如:var1 = 4,var2 = 5 和 var3 = 6。 我还得到了一个数组 nstr db 7 dup(' ').

我需要做的是将 var1 + var2 + var3 添加到 nstr[5],将 var1 + var2 添加到 nstr[4] 并将 var1 添加到 nstr[3] 并打印新数组。

.model small
.STACK 100h
.data
    var1 db 4
    var2 db 5
    var3 db 6
    nstr db 7 dup(' ')  
.code
.startup
                            
    mov ax, dgroup
    mov ds, ax
                            
    mov si,6
    mov nstr[si], '$'           
    dec si
    
    mov al, var1
    add al, var2
    add al, var3
    
    mov nstr[si], al
    dec si
    
    sub al, var3
    mov nstr[si], al
    dec si
    
    sub al, var2
    mov nstr[si], al

print:
    mov ah, 09h
    mov dx, offset nstr
    int 21h 

stop:
    mov ah, 4ch
    int 21h
end

每次我尝试打印它时,控制台都会显示一个符号而不是数字。我知道我需要先将数字转换为字符串,然后再将它们添加到数组中。

我见过的唯一方法是 div 乘以 10 并遍历数字直到其中没有剩余字符,然后将每个字符添加到数组中。

我的问题是我需要在单个数组位置上有一个两位数,在这个例子中 nstr[5] 需要是 15,使用上面的方法我会得到 nstr[2] = 4, nstr [3] = 9,nstr[4] = 1,nstr[5] = 5,这不是我需要的结果,即使打印正确。

有什么办法可以完成这个任务吗?谢谢!

Every time i try to print it, the console displays a symbol instead of the numbers. I understand that I need to convert the numbers to strings before adding them into the array.

这引出了一个问题:您为什么不进行转换?
对于 nstr[3]nstr[4],只要加上 48 就可以将数字变成可打印字符。

The only method I have seen is to div by 10 and loop over the number until there is no characters left in it and add every character to the array.

您可以使用的不仅仅是十进制。如果你select16进制就可以解决任务

.data
    var1 db 4
    var2 db 5
    var3 db 6
    nstr db 7 dup(' ')
    hexa db "0123456789ABCDEF"
.code
.startup                     
    mov ax, dgroup
    mov ds, ax
    mov bx, offset hexa                
    mov si, 6
    mov nstr[si], '$'           
    dec si
    
    mov al, var1
    add al, var2
    add al, var3
    xlatb
    mov nstr[si], al
    dec si

    mov al, var1
    add al, var2
    xlatb
    mov nstr[si], al
    dec si
    
    mov al, var1
    xlatb
    mov nstr[si], al
    ...

上面应该打印:

   49F

或者,使用循环打印 7 个数组元素:字节大小的数字:

32, 32, 32, 4, 9, 15, 32

事实上 nstr 数组被定义为 nstr db 7 dup(' '),使用 space 字符,并不一定意味着您必须将它用作字符串。最终 dup 保留 space,仅此而已。