Вывести каждый байт каждого числа в 16-тиричной системе счисления - Assembler
Формулировка задачи:
Доброго времени суток, практически недавно начал изучать ассемблер и возникла такая проблема, не могу разобраться в задаче, друзья немного помогли с программой, но все равно нет желаемого результата. Задача такая : Задан массив размером двойное число, вывести каждый байт каждого числа в 16-тиричной системе счисления. Вроде с самой программой все ок, а вот правильно настроить вывод никак не могу, подскажите пожалуйста, что нужно добавить или исправить.
dseg segment a dw 32000,25690,19483,4,5 n dw 5 temp dw 0 dseg ends cseg segment assume cs:cseg,ds:dseg start:xor di,di again: mov al,byte ptr a[di] cbw mov temp, di test ax, ax jns oi1 mov cx, ax mov ah, 02h mov dl, '-' int 21h mov ax, cx neg ax oi1: xor cx, cx mov bx, 16 ; oi2: xor dx,dx div bx push dx inc cx test ax, ax jnz oi2 mov ah, 02h oi3: pop dx cmp dl,9 jbe oi4 add dl,7 oi4: add dl, '0' int 21h loop oi3 ret mov di,temp mov al,byte ptr a[di]+1 cbw mov temp, di test ax, ax jns oi5 mov cx, ax mov ah, 02h mov dl, '-' int 21h mov ax, cx neg ax oi5: xor cx, cx mov bx, 16 oi6: xor dx,dx div bx push dx inc cx test ax, ax jnz oi6 mov ah, 02h oi7: pop dx . cmp dl,9 jbe oi8 add dl,7 oi8: add dl, '0' int 21h loop oi7 ret mov di,temp add di,2 cmp di,n jne again cseg ends end start
Решение задачи: «Вывести каждый байт каждого числа в 16-тиричной системе счисления»
textual
Листинг программы
.model small .aam macro power db 0D4h, power endm .data a dw 32000,25690,19483,4,5 a_ label byte a_size = a_ - a n dw 5 temp dw 0 .code start: mov ax, @data mov ds, ax lea si, a mov cx, a_size @@: lodsb call cvt call crlf loop @@ xor ax, ax int 16h mov ax, 4c00h int 21h cvt: .aam 16 ; al / 16 -> ah - десятки, al - единицы or ax, 3030h ; преобразуем в символы ASCII call @0 ; десятки выводим первыми @0: xchg al, ah ; меняем местами cmp al, 39h ; если код символа jbe @1 ; больше '9'? add al, 7 ; то корректируем его до 'A'-'F' @1: int 29h ; выводим на экран ret crlf: mov ax, 0D0Ah ; перевод строки int 29h xchg ah,al int 29h ret end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д