рассчитать квадрат 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'