Я хочу перевернуть какой-то текст. Этот код работает. Но я не понимаю, почему между результатом пустая строка? Я добавил скриншот. Вы можете объяснить мне, почему?
Потому что я не использую CR (0Dh) или что-то в этом роде. Возможно, это из-за функций DOS, таких как 3fh или 40h. В этой ситуации, как я могу изменить свой код?
И еще один вопрос. Я использую and ax,ax
для проверки символов. Что можно использовать вместо and ax,ax
, чтобы понять, есть ли символы в строке
;reverse
.MODEL SMALL
.STACK 100h
.DATA
Max_String_Length EQU 1000
String1 DB Max_String_Length DUP (?) ;string i want to reverse
ReverseString DB Max_String_Length DUP (?) ;reverse string
.CODE
start:
mov ax,@Data
mov ds,ax
mov es, ax
mov ah,3fh ;DOS function
mov bx,0
mov cx,Max_String_Length
lea dx, String1
int 21h
and ax,ax ;are there any symbols?
jz Done ;if no the done
mov cx,ax
push cx
lea si, String1
lea di, ReverseString
add di,cx
dec di
again:
cld
lodsb
mov [di],al
dec di
loop again
pop cx
mov ah,40h ;DOS function
mov bx,1
lea dx, ReverseString
int 21h
Done:
mov ax,4c00h
int 21h
end start[enter image description here][1]