Вывод знакового числа размером в 4 байта - Assembler
Формулировка задачи:
@: mov dx, 0001h mov ax, 0000h mov bx, 000Ah xor cx, cx @1: mov si, ax mov ax, dx xor dx, dx div bx xchg si, ax div bx push dx inc cx mov dx, si test dx, dx jnz @1 test ax, ax jnz @1 mov ah, 02h @2: pop dx add dl, 30h int 21h loop @2 mov ax, 4c00h int 21h
Решение задачи: «Вывод знакового числа размером в 4 байта»
mov dx, 8765h mov ax, 4321h test dh, 80h jz go0 push dx push ax mov al, '-' int 29h pop bx pop cx xor ax, ax mov dx, ax sub ax, bx sbb dx, cx go0:mov bx, 000Ah xor cx, cx go1:mov si, ax mov ax, dx xor dx, dx div bx xchg si, ax div bx push dx inc cx mov dx, si test dx, dx jnz go1 test ax, ax jnz go1 go2:pop ax add al, 30h int 29h loop go2 mov ah,8 int 21h mov ah, 4ch int 21h
Объяснение кода листинга программы
Вывод знакового числа размером в 4 байта (4321h): — Переменная dx содержит число 8765h. — Переменная ax содержит число 4321h. — Выполняется тест на четность числа в dx (80h). Если число четное, то выполняется команда go0. — Если число нечетное, то выполняется команда go1. — Переменная si содержит значение ax. — Переменная ax содержит значение dx. — Выполняется деление ax на bx. Результат сохраняется в dx:ax. — Переменная si заменяется на ax. — Выполняется деление dx:ax на bx. Результат сохраняется в dx:ax. — Выполняется команда go2, пока значение dx:ax не станет однозначным числом. — Выводится сообщение с числом 4321h. — Выполняется команда int 21h, чтобы завершить работу программы. — Выводится сообщение с числом 4321h.