Сборка - программа не выйдет должным образом, не вставив в Debug32.exe - PullRequest
0 голосов
/ 08 декабря 2018

Я пишу "программу шестнадцатеричного преобразования" в сборке, она без проблем работает в режиме отладки, но не в DOSBox.Я проверил SP, и нет переполнения.Я пытался изменить ret -> retf, проблема все еще, у кого-нибудь есть идея, что случилось?Я ценю

* Я хочу попробовать другой отладчик, но DOSBox не разрешит мне его запустить, поэтому я думаю, что это проблема «debug32.exe»?Как это старая версия.'Неправильная версия MS-DOS'

https://github.com/laisiotou1997/ASSEMBLY_practise/raw/master/Tools.zip ИНСТРУМЕНТЫ:

-DEBUG32.EXE

-LINK.EXE

-MASM.EXE

DOSBox 0.74-2

СИСТЕМА: 4.15.0-39-generic # 42-Ubuntu SMP Вт 23 октября 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

;/*
;|**********************************************************************;
;* Project           : Hex Conversion_Assembly
;*
;* Program name      : hexToAsc.asm
;*
;* Author            : SIO TOU LAI (laisiotou1997@gmail.com)
;*
;* Date created      : 08/12/2018
;*
;* Purpose           : Change Hex to ASCII than print on screen
;*
;* Revision History  :
;*
;* Date        Author      Ref    Revision (Date in DDMMYYYY format) 
;* 08122018    lst97       1      First release
;*
;* Known Issue       :
;*
;* Program won't exit properly with out put into Debug32.exe
;|**********************************************************************;
;*/

assume cs:code, ds:data, ss:stack

data segment
    db 6 dup(0)
data ends

stack segment
    dw 3 dup(0)
stack ends

code segment
main:   mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax
    mov sp, 0006h
    xor si, si

    mov ax, 12666               ;The number that need to be conver
    mov cx, 0005h
    call HtASC              ;Hex to ASCII

    mov ax, 0B800h
    mov es, ax
    mov si, 18h             ;0 - 24 row
    mov di, 0h              ;0 - 79 word
    mov dx, 0002h               ;Colour code
    xor ax, ax
    xor bx, bx
    call show_str
    mov ax, 4C00h
    int 21h

HtASC:  mov bx, 0Ah
lpA:    div bx
    add dx, 30h
    push bx
    mov bx, cx
    mov ds:[bx - 01h], dl
    dec bx
    pop bx
    xor dx, dx
    loop lpA
    ret

show_str:   mov bx, 00A0h           ;Calculate row length
        mov ax, bx
        mov bx, 10h
        mul si
        div bx
        add ax, 0B800h
        mov es, ax

        mov bx, di          ;Calculate word length
        mov ax, bx
        mov di, 02h
        mul di
        mov bx, ax

        mov di, 00h         ;Initialize
        mov si, 00h
        mov cx, 0005h
        mov dx, 0002h
lpWord:     mov al, ds:[di]         ;Get a word from memory [data segment]
        mov es:[bx + si], al

        mov es:[bx + si + 01h], dl

        inc di
        add si, 02h
        loop lpWord

        mov al, ds:[di + 01h]       ;Won't jmp if not 0 in [data segment]
        mov cx, ax
        jcxz p_end

p_end:      ret

code ends
end main

Программа может завершить работу в режиме отладки:

Правильный результат:

Невозможно правильно завершить работу без режима отладки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...