манипулирование 32-битными числами с 16-битными регистрами в 8086 - PullRequest
5 голосов
/ 02 декабря 2011

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

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 подобно: процесс получения 28 di= 0 * 10 + 2 = 2 di = 2 * 10 * + 8 = 28

1 Ответ

9 голосов
/ 02 декабря 2011

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

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

    add ax,bx
    adc dx,cx

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

...