Как напечатать обратную строку в nasm? - PullRequest
0 голосов
/ 15 мая 2018

Как напечатать обратную строку в 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
...