Итак, я пишу программу, которая вставляет 10 чисел в массив, как показано ниже: 2, 4, 8, 14, 22 ... где число равно индексу * 2 плюс значение числа напредыдущий индекс для примера 22 находится на позиции 4;4 * 2 = 8;8 + 14 = 22;
Затем пользователь вводит двузначное число, и в переменную A программа помещает значение числа в индекс, равный введенному числу в массиве:
.model small
.data
niza dw 10 dup(?)
broj db ?
A dw ?
.code
start:
mov ax, data
mov es, ax
mov ds, ax
mov bx, 0
mov niza[bx], 2d
Insert:
mov cx, niza[bx]
inc bx
push bx
mov ax, bx
mov bx, 2
mov dx, 0
mul bx
add ax, cx
pop bx
mov niza[bx], ax
cmp bx, 10
jne Insert
mov ah, 1
int 21h
sub al, 48d
mov bl, 10
mov dl, 0
mul bl
mov broj, al
mov ah, 1
int 21h
sub al, 48
add broj, al
mov bl, broj
mov bh, 0
mov ah, 0
mov al, 0
mov ax, niza[bx]
mov A, ax
end start
ends
Однако здесь есть проблема.
Числа правильно помещаются в массив, однако, если я поставлю число, например, 03 вместо размещения 14, то это число 14, это место число 5646.
После осмотра я обнаружил, что после перемещения значения niza [BX] в AX в инструкции:
mov ax, niza[bx]
значение в AX равно 14 в AL и 22 в AHи, таким образом, вычисляет общее значение 5646 и помещает в переменную.
14 в AL является правильным, но я понятия не имею, откуда взято 22 в AH.
Я не могу просто установить AH равным 0, потому что если я выберу из массива число с большим индексом, это даст мне большее значение, большее, чем 255, для которого нужны и AL, и AH, поэтому установите для AH значение0 после перемещения числа в топор изменит номер.
Есть идеи?