У меня проблемы с использованием массивов в сборке / emu8086

Я очень новичок в сборке. Я хочу напечатать 2 элемента массива.
Вот как я впервые написал свой код:

        mov PRIME_NUMBERS[1],2
        mov ax,PRIME_NUMBERS[1]
        call PRINT
        
        mov PRIME_NUMBERS[2],3
        mov ax,PRIME_NUMBERS[2]
        call PRINT

и он печатает «23», и все в порядке, но когда я кодирую так:

        mov PRIME_NUMBERS[1],2
        mov PRIME_NUMBERS[2],3
        mov ax,PRIME_NUMBERS[1]
        call PRINT
         
        mov ax,PRIME_NUMBERS[2]
        call PRINT

он печатает «7703و». Элемент номер 1 вроде заменили на номер 770. Не могу найти свою ошибку!

мой код:

.MODEL SMALL
.STACK 100H
.DATA
max_num_check dw ?
current_num dw ?
prime_numbers dw 100 DUP (0)

.CODE

MAIN PROC

        ;define data segment 
        mov ax,@DATA
        mov DS,ax
        ;------------------
        
        mov PRIME_NUMBERS[1],2
        mov ax,PRIME_NUMBERS[1]
        call PRINT
        
        mov PRIME_NUMBERS[2],3
        mov ax,PRIME_NUMBERS[2]
        call PRINT
        
        HLT 
MAIN ENDP

; to print numbers , you should use mov ax,number and CALL PRINT
PRINT PROC  
         mov cx,0
         mov dx,0
         mov bx,10
         l1:
         cmp ax,0
         je l2
         
         div bx
         push dx
         inc cx
         xor dx,dx
         jmp l1
         
         l2:
         cmp cx,0
         je end
         pop dx
         add dx,'0'
         dec cx
         mov ah,2h
         int 21h
         jmp l2
         
         end:
         xor ax,ax
ret   
PRINT ENDP

MAX_NUM_TO_CHECK PROC 
    mov cx,0
    here:
    mov ax,cx
    mul cx
    cmp ax,current_num
    jge store
    inc cx
    jmp here
    
    store:
    mov max_num_check,cx
ret
MAX_NUM_TO_CHECK ENDP

END MAIN
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

770 это 0302 в шестнадцатеричном формате. Обратите внимание, что значение 3 появляется в старшем байте.

Ассемблер не масштабирует индекс по размеру члена массива, поэтому PRIME_NUMBERS[1] равно PRIME_NUMBERS+1 вместо PRIME_NUMBERS+2, как вы предполагали.

Каждое число занимает два байта. Он сохраняет первое число в байтах PRIME_NUMBERS+1 и PRIME_NUMBERS+2. Он сохраняет второе число в байтах PRIME_NUMBERS+2 и PRIME_NUMBERS+3, перезаписывая старший байт первого числа. Затем, когда он пытается прочитать первое число, он получает один байт первого числа и один байт второго числа, сжатых в одно значение.

(На самом деле вы, вероятно, намеревались сохранить первое число в PRIME_NUMBERS+0, а второе число — в PRIME_NUMBERS+2.)

Другие вопросы по теме