Сборка программы 8086, которая вычисляет c = ((22-7) / 5) * 113 - PullRequest
0 голосов
/ 20 марта 2011

привет, я действительно понятия не имею, как это работает

data segment
 db 22
 db 7
 db 5
 db 113
data ends
code segment
 assume cs:code,ds:data
start:mov si,500H
 mov di,1500H
 mov ah,0
 mov al,22
 cbw
 sub ax,7
 mov cx,5
 idiv cx
 mov bx,113
 imul bx
 mov dl,ax
 mov [di],al
 code ends
end start

я действительно не знаю, что происходит в этой программе, поэтому любая помощь будет принята

Ответы [ 3 ]

1 голос
/ 20 марта 2011

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

data segment - объявляет 3 байта данных, которые будут использоваться для расчета (но, к сожалению, вообще не используются).db - это объявление байта (сравните с dw - d eclare w ord, ...) code segment - объявляет, что там начинается код программы

Всего для выполнения расчета вам нужно только следующее:

mov AX, 22; place number 22 to processor register AX
sub AX, 7; now we have subtract 7 from AX and place it back to AX
mov CX, 5; 5 is placed to CX register
xor DX, DX; per comment of @GJ
idiv cx ; divide AX / CX
mov bx,113; BX now contains 113
imul bx; at last mul result of AX on BX and place back to AX
1 голос
/ 20 марта 2011

Вот несколько полезных советов:

  • mov <em>dst</em>, <em>src</em> копирует SRC в Dest
  • <em>operand</em> *dst*, <em>src</em> выполняет операнд в src и dest и копирует результат в dest. Например, sub ax, 7 вычисляет ax - 7 и помещает результат в ax.
  • idiv <em>src</em> умножает src на ax и помещает результат в ax. imul делает то же самое с умножением.

Этого должно быть достаточно, чтобы начать работу.

0 голосов
/ 07 февраля 2014

Простой:

mov word[c],((22-7)/5)*113
...