Как напечатать обратную строку в nasm?
У меня есть этот код:
BITS 16
org 0x7C00
_start:
xor ax,ax ; set ax register to 0
mov ds,ax ; set data segment(ds) to 0
mov es,ax ; set extra segment(es) to 0
mov bx,0x8000
mov si,string
call reverse_print
jmp $
reverse_print:
mov ah,0Eh
.rep_pre:
inc si
cmp al,0
je .rep_init
jmp .rep_pre
.rep_init:
dec si
jmp .rep
.rep:
std
lodsb
cmp al,0
je .done
int 10h
jmp .rep
.done:
cld
ret
string db "ABC",0
times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
dw 0xAA55 ; The standard PC boot signature
Строка:
ABC
И STDOUT:
A├ⁿ ⌡Θ⯈=♣t
Исключено STDOUT:
CBA
Можно ли исправить эту ошибку, если STDOUT отличается от ожидаемого STDOUT?
РЕДАКТИРОВАТЬ 1
Я расширил код, исправил ошибки и ошибки.
Теперь код выглядит так:
BITS 16
org 0x7C00
_start:
xor ax,ax ; set ax register to 0
mov ds,ax ; set data segment(ds) to 0
mov es,ax ; set extra segment(es) to 0
mov bx,0x8000
mov si,string
call reverse_print
jmp $
reverse_print:
mov ah,0Eh
mov cx,1
.rep_pre:
inc si
inc cx
cmp al,0
je .rep_init
jmp .rep_pre
.rep_init:
inc si
inc cx
jmp .rep
.rep:
std
lodsb
dec cx
cmp al,0
je .done
cmp cx,0
jl .done
int 10h
jmp .rep
.done:
cld
ret
string db "ABC",0
times 510-($-$$) db 0 ; Pad remainder of boot sector with 0s
dw 0xAA55 ; The standard PC boot signature
Я исправил некоторые ошибки, используя регистр CX, установленный в 1.
Теперь STDOUTвыглядит это как исключено :
CBA