当我运行程序时,我得到第16行错误,表示错误A2070,第16行是mov ax, message[si]
。是因为我从寄存器搬到了寄存器吗?我怎么能解决这个问题?
该程序是一个简单的push和pop字符串,用于存储堆栈中的每个字符,增加堆栈消息,然后弹出堆栈以向后显示字符串。
;
.model small
.data
message db "Hello, DOS Here!",0 ; the string
nameSize = ($ - message) - 1 ;gives length of the string
.code
main proc
mov ax,@data
mov ds,ax
mov cx, nameSize ;size of the string stored in cx
mov si, 0 ;stack index 0
Li:
mov ax, message[si] ;
push ax ;push ax
inc si ;incremting stack index
loop Li ; looping through message character
mov cx, nameSize ;Popping
mov si, 0 ; popping from stack
L2:
pop ax ;pop of the ax
mov message[si], al ;
inc si
loop L2
mov dx, offset message ; displaying of string
mov ah,9
int 21
mov ax,4c00h
int 21h
main endp
end main
答案 0 :(得分:3)
您将字符串声明为DB
类型:
▼
message db "Hello, DOS Here!",0 ; the string
DB
表示“一个字节”,但是您将一个字节移动到两个字节寄存器AX
中,这是一个大小冲突。我们来解决它:
mov cx, nameSize ;size of the string stored in cx
mov si, 0 ;stack index 0
xor ax, ax ;◄■■■ CLEAR AX.
Li:
mov al, message[si] ;◄■■■ USE AL.
push ax ;push ax
inc si ;incremting stack index
loop Li ; looping through message character
顺便说一句,致电int 21
打印字符串的电话缺少“h”:int 21h
。