Рассчитать квадрат числа и сохранить их в dw в сборке 8086 мАс - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь вычислить квадрат 5, используя грубую силу, поэтому я попробовал это, но он ничего не хранит в dw, и я определяю dw следующим образом result dw 2 dup(?)

mov ax, 5
mov bx, 5
mov cx, 1
mov dx, ax
loop1:
 add ax, dx

 cmp bx, cx
 je endLoop

 add cx, 1
 jmp loop1

endLoop:
 mov result, ax

1 Ответ

0 голосов
/ 10 ноября 2018

рассчитать квадрат 5

5 ^ 2 = 25, но ваш код выдает 30

В вашем цикле всего 5 сложений (1 при падении и 4 при прыжке назад).
Поскольку AX начинается с исходного значения, вы получаете слишком много!

Либо начинайте AX с нуля, либо делайте на 1 итерацию меньше:

 mov ax, 5
 mov bx, 5
 mov cx, 1
 mov dx, ax
 XOR AX, AX   ; start at zero
loop1:
 add ax, dx

 cmp bx, cx
 je endLoop

 add cx, 1
 jmp loop1

-

 mov ax, 5
 mov bx, 5
 mov cx, 1+1  ; one iteration less
 mov dx, ax
loop1:
 add ax, dx

 cmp bx, cx
 je endLoop

 add cx, 1
 jmp loop1

он ничего не хранит в dw, и я определяю dw следующим образом result dw 2 dup(?)

Обязательно настройте DS с кодом, подобным следующему:

mov ax, data    ; maybe you'll need 'mov ax, @data'
mov ds, ax

Попробуйте альтернативную адресацию памяти в квадратных скобках:

mov [result], ax

Из комментария:

Я пытаюсь получить результат, подобный этому
lea si, result
inc si
mov dl, [si]
mov ah, 2h
int 21h

Почему вы выбираете второй байт результата? Вероятно, это будет просто ноль.
Кроме того, результат имеет 2 цифры, поэтому вам нужно вывести 2 символа.

Это решение одного из моих недавних ответов:

mov ax, [result]     ; AX=25
mov bl, 10
div bl               ; AL=2   AH=5
add ax, "00"         ; AL='2' AH='5'
mov dx, ax
mov ah, 02h
int 21h              ; Outputs the character in DL='2'
mov dl, dh
mov ah, 02h
int 21h              ; Outputs the character in DL='5'
...