Когда я запускаю программу, я получаю ошибку строки 16, которая говорит об ошибке A2070, строка 16 - mov ax, message[si]
. Это потому, что я перехожу из регистра в регистр? Также как я могу исправить эту проблему? Программа представляет собой простой толчок и поп строки, в которой каждый символ в стеке увеличивает сообщение стека, а затем выталкивает стек, чтобы отобразить строку назад.push and pop error A2070
;
.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
спасибо, теперь я понимаю, что это исправить проблему, но когда я запускаю программу в поле dos, она показывает пустую программу, не печатает обратную строку @jose –
@MikeShasaco, еще одна ошибка: ваша строка должна заканчиваться на «$» вместо «0» (потому что вы используете int 21h ah = 09). –
Спасибо, что это сработало, но оно также напечатало кучу случайных символов ascii, но оно напечатало строку назад. @jose –