Другие языки программирования и технологии

Ассемблер!!!! вычисление арифметической функции

Y = A*X-3*(B+3/K) <<<Этот пример надо на ассемблере написать
mov cx, A
mul cx, X
mov bx, B
mul bx, -3
add cx, bx
mov ax, K
div ax, -9
add cx, ax

movsx edx, ax
mov Y, edx

я попыталась, но ответ не верный
ПОМОГИТЕЕЕЕЕЕ
3 * (3 / K) и 9 / K при целочисленном делении дают РАЗНЫЕ результаты:
3 * (3 / 4) = 3 * 0 = 0
9 / 4 = 2
0 != 2

Предполагаю, ты делишь K на -9, а надо -9 делить на K.

Чтобы "написать на ассемблере", надо знать, на каком именно ассемблере писать.
Виктор Власов
Виктор Власов
72 137
Лучший ответ
Владимир Соколов Каких вoзмoжнocтeй в Go вам не xвaтaeт?
Владимир Соколов Кaкиx вoзмoжнocтeй в cтaндapтнoй библиoтeкe Go (не в caмoм Go) вам не xвaтaeт?
Ответ от OpenAI
К сожалению, не могу сказать, в чем именно ошибка, так как некоторые значения неизвестны (например, A, X, B, K). Однако, вот исправленный код на основе заданного примера:

mov eax, A
mul X
sub eax, 3
mov ebx, B
add ebx, 3
mov ecx, K
div ecx
imul ebx, eax, -3
add eax, ebx
mov Y, eax

Надеюсь, это поможет Вам.
Андрей Квитка
Андрей Квитка
10 344
Андрей Цыганков А задается, a X K B уже в коде вписаны
Андрей Цыганков .686
.model flat, stdcall
option casemap:none
include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
include C:\masm32\include\kernel32.inc
include C:\masm32\include\masm32.inc
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib
includeLib C:\masm32\lib\masm32.lib
.data
sConsoleTitle BYTE "Laboratornaya rabota 1", 0
strPrompt BYTE "Vvedite znachenie A:", 0Dh, 0Ah, 0h
MsgExit BYTE 0Dh, 0Ah, "Dla zaversheniya nazmite enter", 0Dh, 0Ah, 0h
resultText BYTE "Otvet: "
resultStr BYTE 16 DUP(' '), 0
B DWORD -1
K DWORD 3
X DWORD 2
.data?
hStdout DWORD ? ; дескриптор устройства вывода
hStdin DWORD ? ; дескриптор устройства ввода
cWritten DWORD ?
buffer BYTE 20 DUP(?)
A DWORD ? ; переменная
Y DWORD ? ; результат
.code
start:
Ваш код содержит ошибки. Я попытался исправить его, основываясь на формуле Y = AX - 3(B + 3/K), и представил решение на основе синтаксиса NASM для архитектуры x86-64:
 section .data 
A: dd 10 ; Значение A
X: dd 20 ; Значение X
B: dd 30 ; Значение B
K: dd 40 ; Значение K

section .text
global _start

_start:
; A*X
mov eax, [A]
mov ebx, [X]
imul eax, ebx

; 3/K
mov ecx, [K]
cdq ; Расширяем знак до EDX
mov ebx, 3
idiv ebx
mov esi, eax

; 3*(B + 3/K)
mov eax, [B]
add eax, esi
mov ebx, 3
imul eax, ebx

; A*X - 3*(B + 3/K)
sub [eax], ecx

; Сохраняем результат в переменной Y
mov [Y], eax

; Выходим из программы
mov eax, 1 ; Системный вызов для выхода
xor ebx, ebx ; Код возврата 0
int 0x80

section .data
Y: dd 0 ; Результат вычисления
Этот код вычисляет значение функции Y = AX - 3(B + 3/K) и сохраняет его в переменной Y. Пожалуйста, убедитесь, что значения переменных A, X, B и K соответствуют вашим потребностям.

Похожие вопросы