当我在数据段中包含“最大编号是:$”作为 MSG 时,我没有得到结果

When i include the "The largest no. is:$' as MSG in data segment, i don't get the result

enter image description here

msg db 'The largest no is:$'

lea dx, msg
mov ah, 9
int 21h

如果我不包括这些行,我会得到 9 作为最大的,这是正确的。但我如果包括那个提示显示,我得到 "a" 作为输出。为什么? (如果我不写东西,它不会让我上传...................................... ..................................................... ..................................................... ...............)

.model small
.stack 100h
.data
array db 1,0,2,3,4,5,6,7,9,8
msg db 'The largest no is:$'
largest db ?
.code
main proc
mov ax, @data
mov ds, ax

lea si, array
mov cx, 10
mov al, [si]
findlargest:cmp al, [si+1]
jnc skip
mov al, [si+1]
skip:inc si
loop findlargest

mov largest, al

mov ah, 0     ;;; clear the screen
mov al, 2
int 10h

mov dl, 13                      ;;; new line
mov ah, 2
int 21h
mov dl, 10
mov ah, 2
int 21h

lea dx, msg
mov ah, 9
int 21h

mov dl, largest
add dl, 48             ;; convert number to character to print
mov ah, 2
int 21h

mov ah, 4ch     ;; exit
int 21h
main endp
end

您的代码溢出字节 array

首先,您通过 mov al, [si] 加载 al 以保持起始值。

然后您循环十次引用 [si+1] 的迭代,这意味着您将 alarray+1array+11 进行比较。而 array+11 持有字符 'T',并被捕获为最高,因此当您将 48 添加到 'T' 时,您会得到一个有趣的字符。

如果省略 msg,则 array+11 很可能为零,因此不会被视为最高值。