Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.163.31] |
|
Сообщ.
#1
,
|
|
|
Добрый день! Помогите, пожалуйста, разобраться с кодом. Прога работает но я не могу сообразить как происходит вычисление результата. Если можно, прокомментируйте код.
Задание следующее: Программа должна посчитать С=А/2+В. Установить все нечетные биты С. Расчет должен быть выполнен с использованием процедуры с передачей параметров через директивы. Вывести на экран число С и все промежуточные числа в двоичном виде, с использованием макроса. input macro ;Макрос ввода двух чисел в десятичном виде mov bl, 0 lea dx, str1 mov ah, 9 int 21h l1: mov ah, 1 int 21h cmp al, 13 je l2 sub al, 30h cmp al, 9 jle l3 sub al, 7 cmp al, 15 jle l3 sub al, 20h jmp l3 l2: cmp bl, 1 je l4 inc bl mov ch, cl xor cl, cl lea dx, el mov ah, 9 int 21h lea dx, str2 int 21h jmp l1 l3: shl cl, 4 add cl, al jmp l1 l4: endm outn macro n ;макрос вывода на экран lea dx, el mov ah, 9 int 21h lea dx, str3 int 21h mov cx, 16 xor dl, dl o1: rol n, 1 adc dl, 30h mov ah, 2 int 21h xor dl, dl loop o1 endm calc macro ;макрос вычисления результата mov es, ax mov bx, cx sub cl, 5h mov al, 2 mul cl add al, ch xor cx, cx test al, 00010000b jnz c1 mov cl, bl jmp e c1: mov cl, bh e: endm dseg segment str1 db 'A = $' ;текстовые строки для вывода на экран str2 db 'B = $' str3 db 'C = A/2 + B = $' el db 10, 13, '$' dseg ends sseg segment stack db 60 dup (?) sseg ends cseg segment assume cs:cseg, ds:dseg, ss:sseg main proc mov ax, dseg mov ds, ax input calc mov bx, cx outn bx mov ah, 4ch int 21h main endp cseg ends end main |