Манипулирование 32 -битным чисел с 16 -битными регистрами в 8086

StackOverflow https://stackoverflow.com/questions/8352704

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать программу, которая получает два 6-значных десятичных числа и показать их добавление, но в 16-битном 8086 я определил цифры как двойное слово и положил LO в Word 1 и HO в Word 2. Похоже на код ниже, но я Нет никакой идеи, чтобы сделать дальше, может ли любое тело предложить мне алгоритм для следующих операций? Спасибо

x dd(?)
    next_no:
    mov cl,2
    mov ch,4

two_bit:
getch

sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x+2,di

dec cl
jnz two_bit
fourbit:
getch
sub al,30h
mov bl,10
mul bl
mov di,ax
add word ptr x,di
dec ch
jnz fourbit

В этой программе DI является местом для хранения числа, сделанного через цикл, когда пользователь введет число DI будет несколько до 10, а новая цифра добавит DI Like: Proccess получения 28 DI = 0*10+2 = 2 DI = 2*10*+8 = 28

Это было полезно?

Решение

Вместо того, чтобы следовать своему неуместному коду, я представлю независимый пример.

Предположим, у вас есть одно 32-разрядное число в DX: AX и одно 32-разрядное число в CX: BX (это нотация означает, что высокие 16 укусов хранятся в DX, например, и низкие 16 бит в AX). Чтобы добавить эти значения и оставить результат в DX: AX, вы бы:

    add ax,bx
    adc dx,cx

А add Инструкция добавляет два значения и наборы C (переносить) бит до 1 или 0 в зависимости от того, был ли перенос или нет. А adc Инструкция добавляет два значения плюс Значение бита переноса (а затем снова устанавливает бит переноса). Таким образом, вы можете добавить значения любого размера, продолжая больше с adc инструкции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top