|
|
|
hack7 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.8.2017 Репутация: нет Всего: нет |
Здравствуйте! Проверьте что не так надо вычислить выражение f = (a-b)*c/2+d, если a, b, c, d - байтовые, a=15, b = 70, c=25, d=35 Надо еще вывести результат в виде двоичном и шестнадцатеричном значении.
.model small .stack 256 .data a db 15 b db 70 c db 25 d db 35 f dw 0 .code main: xor ax, ax mov al, 15 cbw movsx bx, ax sub ax, bx imul c idiv 2 xor dx, dx mov dl, d movsx ax, dx add ax, dx exit: mov ax, 4c00h int 21h end main |
|||
|
||||
JAPH |
|
|||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: нет Всего: 23 |
Проследите внимательно за тем, как исполняются команды.
Вычитание a-b делайте 8-битным. Далее умножение дает 16-битное число. Деление надо тоже сделать 16-битным, т.к. результат, скорее всего, не поместится в 8 бит. Поэтому надо делитель 2 занести либо в регистр, либо в ячейку памяти, и использовать idiv с 16-битным операндом, которая делит на него 32-битное число в регистровой паре DX:AX, которое нужно получить из AX командой cwd. Зачем нужна f, я не понял. По поводу вывода чисел смотрите статью http://forum.vingrad.ru/faq/topic-158522/k...0%BB%D0%B0.html Это сообщение отредактировал(а) JAPH - 27.8.2017, 20:43 -------------------- Что непонятно - спрашиваем |
|||
|
||||
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |