【发布时间】:2025-12-28 23:10:11
【问题描述】:
我正在努力提前完成我的大学课程并自己学习汇编程序,所以我有点卡住了。
我有这个练习问题,我不明白如何正确打印。
我得到了 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
每次我尝试打印它时,控制台都会显示一个符号而不是数字。我知道在将数字添加到数组之前,我需要将它们转换为字符串。
我见过的唯一方法是除以 10 并循环该数字,直到其中没有字符,然后将每个字符添加到数组中。
我的问题是我需要在单个数组位置上有一个两位数,在这个例子中 nstr[5] 需要是 15,使用上面的方法我会得到 nstr[2] = 4, nstr[3 ] = 9, nstr[4] = 1 and nstr[5] = 5,这不是我需要的结果,即使打印正确。
有什么办法可以完成这件事吗?谢谢!
【问题讨论】:
-
正如你所说,你不能将 2 位数字压缩成 1 个字符,所以问题规范似乎是矛盾的。
-
int 21h是否打印数字或字符?零、一等的 ASCII 码是什么?
标签: assembly dos x86-16 tasm dosbox