Другие языки программирования и технологии
Помогите с задачкой на MASM-е
Вычислить целочисленное выражение: (2*b - 38*c)/(b+a/c + 1) Сделал вот так, но решает неправильно, в чем здесь дело?: ;Вычисление целочисленных арифметических выражений: (2*b-38*c)/(b+a/c+1) .386 ; Использовать будем регистры и команды 386 процессора CSEG segment use16 ; По умолчанию 16-и разрядные данные assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h Start: ; Печать text0 mov dx, offset text0 call Print_A ; Печать text1 mov dx, offset text1 call Print_A ; Ввод первого десятичного числа call Input_V; Введенное число находится в регистре AX mov a10, AX ; сохраняем первое введенное число в a10 ; Печать text2 mov dx, offset text2 call Print_A ; Ввод второго десятичного числа call Input_V mov b10, AX ; сохраняем второе введенное число в b10 ; Печать text3 mov dx, offset text3 call Print_A ; Ввод третьего десятичного числа call Input_V mov c10, AX ; сохраняем третье введенное число в c10 ; Вычисляем числитель ; Вычисление 38*c movBX,38 movAX,c10 mulBX pushAX; результат сохраняем в стеке ; Вычисление 2*b movAX,2 movBX,b10 mulAX ; Вычисление (2*b-38*c) popAX subAX,BX pushAX; сохраняем результат вычисления числителя в стеке ; Вычисляем знаменатель ; Вычисление a/c mov AX,c10 mov BX,a10 div AX ; Вычисление b+a/c mov AX,b10 add BX,AX ; Вычисление b+a/c+1 inc BX; результат вычисления знаменателя в регистре BX ; Последнее вычисление (2*b-38*c)/(b+a/c+1) pop AX mov BX,4 div BX push AX ; Вывод результата ; Печать text4 mov dx, offset text4 call Print_A popAX mov BX, 10 ; делитель на 10 call Output_A mov ah,10h int 16h int 20h include My_File.inc text0 db 13,10,'(2*b-38*c)/(b+a/c+1)$' text1 db 13,10,'Введите десятичное число а:$' text2 db 13,10,'Введите десятичное число b:$' text3 db 13,10,'Введите десятичное число с:$' text4 db 13,10,' Результат = $' a10 word ? b10 word ? c10 word ? b1 db 10 CSEG ends end Start
Я не разбираюсь в вашем коде, поэтому просто ткну пальцем туда, где мне непонятно!: )
Вычисляем числитель
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
; Вычисление (2*b-38*c)
pop AX
После первого умножения вы результат заносите в стек.
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
Затем вы выполняете второе умножение
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
Его результат будет храниться в регистре AX. (На самом деле ксли вы умножаете слова, то результат будет храниться в регистровой паре DX:AX. Но мы будем предполагать, что значение сомножителей достаточно малы, что результат помещается только в регистр AX). Затем вы этот результат ЗАТИРАЕТЕ, выполняя команду
pop AX
Вот этого я и не понимаю!:)
Вычисляем числитель
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
; Вычисление (2*b-38*c)
pop AX
После первого умножения вы результат заносите в стек.
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
Затем вы выполняете второе умножение
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
Его результат будет храниться в регистре AX. (На самом деле ксли вы умножаете слова, то результат будет храниться в регистровой паре DX:AX. Но мы будем предполагать, что значение сомножителей достаточно малы, что результат помещается только в регистр AX). Затем вы этот результат ЗАТИРАЕТЕ, выполняя команду
pop AX
Вот этого я и не понимаю!:)
Я тоже не разбираюсь в вашем коде, поэтому просто ткну пальцем туда, где мне непонятно!: )
Вычисляем числитель
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
; Вычисление (2*b-38*c)
pop AX
После первого умножения вы результат заносите в стек.
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
Затем вы выполняете второе умножение
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
Его результат будет храниться в регистре AX. (На самом деле ксли вы умножаете слова, то результат будет храниться в регистровой паре DX:AX. Но мы будем предполагать, что значение сомножителей достаточно малы, что результат помещается только в регистр AX). Затем вы этот результат ЗАТИРАЕТЕ, выполняя команду
pop AX
Вычисляем числитель
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
; Вычисление (2*b-38*c)
pop AX
После первого умножения вы результат заносите в стек.
; Вычисление 38*c
mov BX,38
mov AX,c10
mul BX
push AX ; результат сохраняем в стеке
Затем вы выполняете второе умножение
; Вычисление 2*b
mov AX,2
mov BX,b10
mul AX
Его результат будет храниться в регистре AX. (На самом деле ксли вы умножаете слова, то результат будет храниться в регистровой паре DX:AX. Но мы будем предполагать, что значение сомножителей достаточно малы, что результат помещается только в регистр AX). Затем вы этот результат ЗАТИРАЕТЕ, выполняя команду
pop AX
Похожие вопросы
- Помогите решить задачку простенькую.
- Кто разбирается в программировании? помогите решить задачку!
- Помогите с задачкой по Паскалю
- помогите решить задачку, на VBA для Excel
- Пожалуйста, помогите решить задачку по информатике...
- Помогите простенькие задачки по паскалю решить??)
- Помогите решить задачку
- Пожалуйста, помогите с задачкой на Delphi
- Помогите с задачкой на Pascal'e (МАССИВЫ)!
- Люди помогите решить задачку!!!на паскале
mov AX,2
mov BX,b10
mul AX
А разве не будет храниться в BX?