Как я могу найти ошибку в этом коде сборки? - PullRequest
0 голосов
/ 24 марта 2019

Эта программа преобразует hexadec в новую базу нумерации (radix), у меня ошибка, и я не могу ее найти.

;This program converts number from decimal
;to a new numbering base(radix)

.Model small
.stack 200
.data

    radix db 10; radix 10 for decimal
    num dw 0EFE4H;
    temp db 10 dup(?); used to stimulate stack

.code
        mov ax, num; load ax with number


        mov cx,0 ;clear digital counter
        xor bh,bh; clear bh
        mov bl,radix; set for decimal
        xor si,si; clear si register

dispx1:
       mov dx,00 ;clear dx
       div bx    ;divide dx:ax by 10
       mov temp[si],dl;save remainder
       inc si
       inc cx ;count remainder
       or ax,ax;test for quotient of zero
       jnz dispx1; if quotient is not zero


       dec si
dispx2:

        mov dl,temp[si]; get remainder
        mov ah,06h;select function 06h
        add dl,30h;converts to ASCII
        int 21h

        dec si
        dec cx;repeat for all digits
        jnz displx2
.exit
end

1 Ответ

1 голос
/ 28 марта 2019

Ваша программа использует .Model small. Это означает, что регистр сегмента DS не настроен так, чтобы указывать на ваш .data. Вам нужно сделать это самостоятельно:

.Model small
.stack 200
.data
    radix db 10        ; radix 10 for decimal
    num   dw 0EFE4H    ;
    temp  db 10 dup(?) ; used to stimulate stack
.code
    mov ax, @data      ;Load data segment address to AX     ADD THIS!
    mov ds, ax         ;Move segment address to DS          ADD THIS!
    mov ax, num        ;Load AX with number
...