Содержимое ячейки памяти = CA16. Какое это число без знака? число со знаком - Assembler
Формулировка задачи:
Нужно написать программы для 16 разрядного ассемблера:
Содержимое ячейки памяти = CA16. Какое это число без знака? число со знаком?
Решение задачи: «Содержимое ячейки памяти = CA16. Какое это число без знака? число со знаком»
textual
Листинг программы
.model small .stack 100h .data CrLf db 0Dh, 0Ah, '$' .code main proc mov ax, @data mov ds, ax mov ax, 0CA16h call Show_UInt call NewLine call Show_Int mov ax, 4C00h int 21h main endp NewLine proc push ax push bx push cx push dx push di mov ah, 09h lea dx, [CrLf] int 21h pop di pop dx pop cx pop bx pop ax ret NewLine endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_Int proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе ; если число в ax отрицательное, то ;1) напечатать '-' ;2) сделать ax положительным or ax, ax jns @@ShowUInt push ax mov dx, '-' mov ah, 2 ; ah - функция вывода символа на экран int 21h pop ax neg ax @@ShowUInt: call Show_UInt pop di pop dx pop cx pop bx pop ax ret Show_Int endp ; выводит знаковое 16-разрядное число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_UInt proc push ax push bx push cx push dx push di mov cx, 10 xor di, di ; di - кол. цифр в числе @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стек or ax, ax jnz @@Conv ; выводим из стека на экран @@Show: pop dx ; dl = очередной выводимый символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret Show_UInt endp end main