Неправильное вычисление знаменателя (signed byte) - Assembler
Формулировка задачи:
При компиляции ошибок нет. Числитель вычислен правильно, но знаменатель нет. Помогите, пожалуйста, выявить ошибку
(signed byte)
.686 .MODEL FLAT, C .data extern shisl:dword,znam:dword,rez:dword .CODE ;(44+c*d-15)/(a + c - 6) myfunc PROC C aaaS:byte, bbbS:byte,cccS:byte ;shisl *******************************(aaaS+bbbS*cccS-1)/(aaaS/3+1) mov al, cccS imul bbbS mov dl, aaaS cbw add ax, dx sub ax, 1 mov dx, 0 ;mov word ptr shisl+2, dx mov word ptr shisl, ax ;znam *******************************(aaaS/3+1) mov al, aaaS cbw mov bl, 3 idiv bl add al, 1 cbw mov word ptr znam, ax mov dx, word ptr shisl+2 mov ax, word ptr shisl idiv znam mov word ptr rez,ax ret myfunc ENDP END
Решение задачи: «Неправильное вычисление знаменателя (signed byte)»
textual
Листинг программы
mov al, cccS imul bbbS mov dx, ax mov ax, aaaS cbw add ax, dx sub ax, 1 mov dx, 0 ;mov word ptr shisl+2, dx mov word ptr shisl, ax ;znam *******************************(aaaS/3+1) mov al, aaaS cbw mov bl, 3 idiv bl add al, 1 cbw mov word ptr znam, ax mov dx, word ptr shisl+2 mov ax, word ptr shisl idiv word ptr znam mov word ptr rez,ax ret
Объяснение кода листинга программы
- mov al, cccS - Загрузка значение переменной 'cccS' в регистр 'al'
- imul bbbS - Умножение 'al' на значение переменной 'bbbS'
- mov dx, ax - Перемещение результата в регистр 'dx'
- mov ax, aaaS - Загрузка значение переменной 'aaaS' в регистр 'ax'
- cbw - Преобразование беззнакового числа в знаковое
- add ax, dx - Прибавление результата умножения к 'ax'
- sub ax, 1 - Вычитание 1 из 'ax'
- mov dx, 0 - Установка 'dx' в 0
- mov word ptr shisl, ax - Сохранение значения 'ax' в переменной 'shisl'
- mov al, aaaS - Загрузка значение переменной 'aaaS' в регистр 'al'
- cbw - Преобразование беззнакового числа в знаковое
- mov bl, 3 - Загрузка значения 3 в регистр 'bl'
- idiv bl - Деление 'al' на 'bl'
- add al, 1 - Прибавление 1 к 'al'
- cbw - Преобразование беззнакового числа в знаковое
- mov word ptr znam, ax - Сохранение значения 'ax' в переменной 'znam'
- mov dx, word ptr shisl+2 - Загрузка старшего байта из переменной 'shisl' в 'dx'
- mov ax, word ptr shisl - Загрузка младшего байта из переменной 'shisl' в 'ax'
- idiv word ptr znam - Деление 'dx:ax' на 'znam'
- mov word ptr rez,ax - Сохранение результата деления в переменной 'rez'
- ret - Возврат из процедуры