Консультация № 199715
26.11.2020, 12:26
0.00 руб.
1 14 1
Здравствуйте! С Assembler знаком всего 3 дня) подскажите как записать формулу в код

Код:

;Program_4 – Арифметические операции, вариант …
Data SEGMENT ;Открыть сегмент данных
A DB 5Ah ;Инициализировать
B DB 55h ;переменные A, B, C, D, X
C DB 11h
D DB 5
X DW ?
Data ENDS ;Закрыть сегмент данных
Ourstack SEGMENT Stack ;Открыть сегмент стека
DB 100h DUP (?) ;Отвести под стек 256 байт
Ourstack ENDS ;Закрыть сегмент стека
ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные
;регистры
Code SEGMENT ;Открыть сегмент кодов

Start: mov AX, Data ;Инициализировать
mov DS, AX ;сегментный регистр DS
xor AX, AX ;Очистить регистр AX

Здесь должны быть команды вычисления
арифметического выражения


movAX, 4C00h ;Завершить программу
int 21h ;с помощью DOS
Code ENDS ;Закрыть сегмент кодов
END Start ;Конец исходного модуля.

заранее благодарю
Прикрепленные файлы:
f3ab28aa84cf5446371735bb0fae5d6e6aee63a3.jpg

Обсуждение

давно
Старший Модератор
31795
6196
26.11.2020, 15:12
общий
Адресаты:
FPU или целые числа?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404521
8
26.11.2020, 15:19
общий
FPU
давно
Старший Модератор
31795
6196
26.11.2020, 18:08
общий
Адресаты:
Цитата: Александр
всего 3 дня

Цитата: Александр
FPU

неверю
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404521
8
26.11.2020, 22:44
общий
блин, стеб вообще не понял. Ты разве не знаешь наши шараги? Сказали сделать, как сделать, что куда не объясняют, не сделал 2.
давно
Старший Модератор
31795
6196
30.11.2020, 11:47
общий
Адресаты:
В следующем своем вопросе Вы используете целочисельную арифметику, а не FPU.
Х=(48+3А)-B*D/C=(C*(48+3A)-B*D)/C
Теперь это выражение можно считать с помощью целочисельной арифметики.

[code language=assembler]model tiny
.code
org 100h
begin: mov ax,A
mov bx,3
mul bx
add ax,48
mov bx,C
mul bx
push ax
mov ax,B
mov cx,D
mul cx
pop cx
sub cx,ax
mov ax,cx
xor dx,dx
div bx
push dx
mov si,10
xor cx,cx
@@01: xor dx,dx
div si
push dx
inc cx
or ax,ax
jnz @@01
@@02: pop ax
or al,'0'
int 29h
loop @@02
@@03: pop dx
or dx,dx
jz @@05
push dx
mov al,'.'
int 29h
@@04: pop ax
or ax,ax
jz @@05
xor dx,dx
mul si
div bx
push dx
or al,'0'
int 29h
inc cx
cmp cx,30;
jnz @@04
pop dx
@@05: xor ax,ax
int 16h
ret
A dw 10
B dw 20
C dw 30
D dw 40
end begin
[/code]
Прикрепленные файлы:
4323aefc075b4090ba0656fcf17832ad.jpg
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
30.11.2020, 11:50
общий
Адресаты:
Ваш дубль удаляю.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
30.11.2020, 12:36
общий
это ответ
Здравствуйте, Александр!

Смотрите код:
Код:
model	tiny
.code
org 100h
begin: mov ax,A
mov bx,3
mul bx
add ax,48
mov bx,C
mul bx
push ax
mov ax,B
mov cx,D
mul cx
pop cx
sub cx,ax
mov ax,cx
xor dx,dx
div bx
push dx
mov si,10
xor cx,cx
@@01: xor dx,dx
div si
push dx
inc cx
or ax,ax
jnz @@01
@@02: pop ax
or al,'0'
int 29h
loop @@02
@@03: pop dx
or dx,dx
jz @@05
push dx
mov al,'.'
int 29h
@@04: pop ax
or ax,ax
jz @@05
xor dx,dx
mul si
div bx
push dx
or al,'0'
int 29h
inc cx
cmp cx,30;
jnz @@04
pop dx
@@05: xor ax,ax
int 16h
ret
A dw 5Ah
B dw 55h
C dw 11h
D dw 5
end begin

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404521
8
30.11.2020, 16:48
общий
Код:
;Program_4 – Арифметические операции, вариант …
Data SEGMENT ;Открыть сегмент данных
A DB 5Ah ;Инициализировать
B DB 55h ;переменные A, B, C, D, X
C DB 11h
D DB 5
X DW ?
Data ENDS ;Закрыть сегмент данных
Ourstack SEGMENT Stack ;Открыть сегмент стека
DB 100h DUP (?) ;Отвести под стек 256 байт
Ourstack ENDS ;Закрыть сегмент стека
ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные
;регистры
Code SEGMENT ;Открыть сегмент кодов

Start: mov AX, Data ;Инициализировать
mov DS, AX ;сегментный регистр DS
xor AX, AX ;Очистить регистр AX

model tiny
.code
org 100h
begin: mov ax,A
mov bx,3
mul bx
add ax,48
mov bx,C
mul bx
push ax
mov ax,B
mov cx,D
mul cx
pop cx
sub cx,ax
mov ax,cx
xor dx,dx
div bx
push dx
mov si,10
xor cx,cx
@@01: xor dx,dx
div si
push dx
inc cx
or ax,ax
jnz @@01
@@02: pop ax
or al,'0'
int 29h
loop @@02
@@03: pop dx
or dx,dx
jz @@05
push dx
mov al,'.'
int 29h
@@04: pop ax
or ax,ax
jz @@05
xor dx,dx
mul si
div bx
push dx
or al,'0'
int 29h
inc cx
cmp cx,30;
jnz @@04
pop dx
@@05: xor ax,ax
int 16h
ret
A dw 5Ah
B dw 55h
C dw 11h
D dw 5
end begin

movAX, 4C00h ;Завершить программу
int 21h ;с помощью DOS
Code ENDS ;Закрыть сегмент кодов
END Start ;Конец исходного модуля.
Прикрепленные файлы:
348e6b491e5f3fc083fa28df23ee8ee4.jpg
давно
Старший Модератор
31795
6196
30.11.2020, 17:03
общий
Адресаты:
Цитата: Александр
model tiny

Все что выше этого уберите, оставьте так как в моем ответе
Если Вам нужен код MODEL SMALL, то могу переделать.



Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404521
8
30.11.2020, 17:12
общий
Код:
;prog_4.asm Арифметические операции
Data SEGMENT ; Открыть сегмент данных
A DB 15 ;Инициализировать
B DW 150h ;переменные A, B, C, D, X
C DW 5
D DW 4
X DW ?
Data ENDS ;Закрыть сегмент данных
Ourstack SEGMENT Stack ;Открыть сегмент стека
DB 100h DUP (?) ;Отвести под стек 256 байт
Ourstack ENDS ;Закрыть сегмент стека
ASSUME CS:Code, DS:Data, SS:Ourstack ;Назначить сегментные ;регистры
Code SEGMENT ;Открыть сегмент кодов
Start: mov AX, Data ;Инициализировать (1)
mov DS, AX ;сегментный регистр DS (2)
xor AX, AX ;очистить регистр AX (3)
;=====команды вычисления арифметического выражения===========
mov AL,A ;AL:= (A) (4)
mul A ;AX:=A*A (5)
add AX, D ;AX:=(AX) + (D) (6)
cwd ;преобразовать (АХ) в двойное слово (7)
mov BX, C ;BX:= (C) (8)
sub BX,B ;BX:=(BX)-(B) (9)
idiv BX ;делить (DX:AX) на (BX) (10)
;частное в AX, остаток в DX
mov AX, 4C00h ;Завершить программу (11)
int 21h ;с помощью DOS (12)
Code ENDS ;Закрыть сегмент кодов
END Start ;Конец исходного модуля.



надо вот так ток с моим вариантом
давно
Старший Модератор
31795
6196
01.12.2020, 10:46
общий
Адресаты:
Цитата: Александр
надо вот так ток с моим вариантом

Код:
;
;model tiny
model small
.code
;
;org 100h
begin: mov ax,@data
mov ds,ax
;
mov ax,A
mul ax
add ax,D
cwd
mov bx,C
sub bx,B
;
;
idiv bx
push dx
or dx,ax
test dx,8000h
jz @@00
push ax
mov al,'-'
int 29h
pop ax
@@00: neg ax
js @@00
mov si,10
xor cx,cx
@@01: xor dx,dx
div si
push dx
inc cx
or ax,ax
jnz @@01
@@02: pop ax
or al,'0'
int 29h
loop @@02
@@03: pop dx
@@000: neg dx
js @@000
or dx,dx
jz @@05
push dx
mov al,'.'
int 29h
@@04: pop ax
or ax,ax
jz @@05
xor dx,dx
mul si
div bx
push dx
or al,'0'
int 29h
inc cx
cmp cx,30;
jnz @@04
pop dx
@@05: xor ax,ax
int 16h
;
mov ax,4C00h
int 21h
;
.data
A dw 15
B dw 150h
C dw 5h
D dw 4
;
.stack 256
end begin

Забудьте segment старое определение сегмента.
Код:
Data SEGMENT

Это сокращенная форма записи сегмента.
Код:
Ourstack SEGMENT Stack

Тоже сокращенная запись, только она неверная. Стек всегда пишется полной формой, иначе компилятор будет ругаться на отсутсвие стека.
Код:
Ourstack SEGMENT Stack 'Stack'

Используйте упрощенную запись model - .code - .data - .stack
Компилятор эти макросы подменяет полной формой определение сегмента, при этом избавляет Вас от assume
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404521
8
01.12.2020, 21:58
общий
спасибо Александр, завтра попробую сдать
давно
Старший Модератор
31795
6196
01.12.2020, 22:40
общий
Адресаты:
Цитата: Александр
спасибо Александр,

Я Костя
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

в сети
Посетитель
400728
1647
31.12.2020, 09:14
общий
Адресаты:
Цитата: Зенченко Константин Николаевич
Я Костя
очень редкое имя.... может я ошибаюсь, но это моё мнение
Форма ответа